Добавить README.md
This commit is contained in:
193
README.md
Normal file
193
README.md
Normal file
@@ -0,0 +1,193 @@
|
||||
# Домашнее задание 46
|
||||
|
||||
## Репликация postgresql
|
||||
|
||||
Для выполнение задания используется vagrant box Ubuntu 22.04
|
||||
|
||||
### Создание Vagrantfile
|
||||
|
||||
Создадим 3 VM c характеристиками
|
||||
|
||||
- CPU 1
|
||||
- RAM 1024Mb
|
||||
|
||||
Готовый [Vagrantfile](Vagrantfile)
|
||||
|
||||
### ansible.yml
|
||||
|
||||
|
||||
В сценарий для Ansible добавлены следующие действия:
|
||||
|
||||
|
||||
1. На VM **sql-master** и **sql-slave** устанавливается postgresql-14 сервер
|
||||
2. Настраивается репликации с VM **sql-master** на **sql-slave**
|
||||
3. На сервере **backup** устанавливается barman
|
||||
3. Настраиваем бекап с помощью barman
|
||||
|
||||
|
||||
|
||||
Готовый [ansible.yml](ansible.yml)
|
||||
|
||||
|
||||
### Проверка
|
||||
|
||||
Запускаем vagrant
|
||||
|
||||
```bash
|
||||
alex@ubuntu-pc:~/Документы/46$ vagrant up
|
||||
Bringing machine 'sql-master' up with 'virtualbox' provider...
|
||||
Bringing machine 'sql-slave' up with 'virtualbox' provider...
|
||||
Bringing machine 'backup' up with 'virtualbox' provider...
|
||||
==> sql-master: Importing base box 'ubuntu/jammy64'...
|
||||
==> sql-master: Matching MAC address for NAT networking...
|
||||
==> sql-master: Checking if box 'ubuntu/jammy64' version '20241002.0.0' is up to date...
|
||||
==> sql-master: Setting the name of the VM: 46_sql-master_1783010934875_59066
|
||||
==> sql-master: Clearing any previously set network interfaces...
|
||||
==> sql-master: Preparing network interfaces based on configuration...
|
||||
sql-master: Adapter 1: nat
|
||||
sql-master: Adapter 2: intnet
|
||||
==> sql-master: Forwarding ports...
|
||||
sql-master: 22 (guest) => 2222 (host) (adapter 1)
|
||||
==> sql-master: Running 'pre-boot' VM customizations...
|
||||
==> sql-master: Booting VM...
|
||||
==> sql-master: Waiting for machine to boot. This may take a few minutes...
|
||||
sql-master: SSH address: 127.0.0.1:2222
|
||||
sql-master: SSH username: vagrant
|
||||
sql-master: SSH auth method: private key
|
||||
sql-master: Warning: Connection reset. Retrying...
|
||||
sql-master:
|
||||
sql-master: Vagrant insecure key detected. Vagrant will automatically replace
|
||||
sql-master: this with a newly generated keypair for better securi
|
||||
...
|
||||
|
||||
...
|
||||
|
||||
|
||||
==> backup: Mounting shared folders...
|
||||
backup: /home/alex/Документы/46 => /vagrant
|
||||
==> backup: Running provisioner: ansible...
|
||||
backup: Running ansible-playbook...
|
||||
|
||||
PLAY [sql-master,sql-slave] ****************************************************
|
||||
skipping: no hosts matched
|
||||
|
||||
PLAY [backup] ******************************************************************
|
||||
|
||||
TASK [Gathering Facts] *********************************************************
|
||||
ok: [backup]
|
||||
|
||||
TASK [install barman] **********************************************************
|
||||
changed: [backup]
|
||||
|
||||
TASK [config barman] ***********************************************************
|
||||
changed: [backup]
|
||||
|
||||
TASK [cron config] *************************************************************
|
||||
changed: [backup]
|
||||
|
||||
PLAY RECAP *********************************************************************
|
||||
backup : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
|
||||
|
||||
```
|
||||
|
||||
|
||||
Подключимся к **sql-master**, и проверим статус репликации,
|
||||
```bash
|
||||
vagrant@sql-master:~$ sudo -u postgres psql
|
||||
could not change directory to "/home/vagrant": Permission denied
|
||||
psql (14.23 (Ubuntu 14.23-0ubuntu0.22.04.1))
|
||||
Type "help" for help.
|
||||
|
||||
postgres=# SELECT application_name, client_addr AS replica_ip, state, sync_state FROM pg_stat_replication;
|
||||
application_name | replica_ip | state | sync_state
|
||||
--------------------+------------+-----------+------------
|
||||
walreceiver | 10.0.0.11 | streaming | async
|
||||
barman_receive_wal | 10.0.0.12 | streaming | async
|
||||
(2 rows)
|
||||
|
||||
|
||||
```
|
||||
|
||||
Видим, что связь с 10.0.0.11 (sql-slave) и 10.0.0.12 (backup) установлена.
|
||||
|
||||
|
||||
Создадим новую тестовую базу
|
||||
|
||||
```bash
|
||||
postgres=# create database test_database;
|
||||
|
||||
```
|
||||
|
||||
|
||||
Теперь подключимся к реплики, и посмотрим список баз
|
||||
|
||||
|
||||
|
||||
```bash
|
||||
vagrant@sql-slave:~$ sudo -u postgres psql
|
||||
could not change directory to "/home/vagrant": Permission denied
|
||||
psql (14.23 (Ubuntu 14.23-0ubuntu0.22.04.1))
|
||||
Type "help" for help.
|
||||
|
||||
postgres=# \l
|
||||
List of databases
|
||||
Name | Owner | Encoding | Collate | Ctype | Access privileges
|
||||
---------------+----------+----------+---------+---------+-----------------------
|
||||
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
|
||||
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
|
||||
| | | | | postgres=CTc/postgres
|
||||
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
|
||||
| | | | | postgres=CTc/postgres
|
||||
test_database | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
|
||||
(4 rows)
|
||||
|
||||
|
||||
```
|
||||
|
||||
Как видим, база **test_database** успешно реплицировалась.
|
||||
|
||||
Репликация настроена.
|
||||
|
||||
|
||||
Подключимся к **backup**, и проверим настройки barman
|
||||
```bash
|
||||
vagrant@backup:~$ sudo -u barman barman check pg-server
|
||||
Server pg-server:
|
||||
PostgreSQL: OK
|
||||
superuser or standard user with backup privileges: OK
|
||||
PostgreSQL streaming: OK
|
||||
wal_level: OK
|
||||
replication slot: OK
|
||||
directories: OK
|
||||
retention policy settings: OK
|
||||
backup maximum age: OK (no last_backup_maximum_age provided)
|
||||
backup minimum size: OK (33.6 MiB)
|
||||
wal maximum age: OK (no last_wal_maximum_age provided)
|
||||
wal size: OK (0 B)
|
||||
compression settings: OK
|
||||
failed backups: OK (there are 0 failed backups)
|
||||
minimum redundancy requirements: OK (have 1 backups, expected at least 0)
|
||||
pg_basebackup: OK
|
||||
pg_basebackup compatible: OK
|
||||
pg_basebackup supports tablespaces mapping: OK
|
||||
systemid coherence: OK
|
||||
pg_receivexlog: OK
|
||||
pg_receivexlog compatible: OK
|
||||
receive-wal running: OK
|
||||
archiver errors: OK
|
||||
|
||||
```
|
||||
|
||||
Так как в тестовой стреде бекап настроен каждые 10 минут, то немного оставим наши VM для того что бы создалось несколько бекапов
|
||||
Через 30 минут смотрим, что по бекапам
|
||||
```bash
|
||||
vagrant@backup:~$ sudo -u barman barman list-backup pg-server
|
||||
pg-server 20260702T174001 - Thu Jul 2 17:40:03 2026 - Size: 49.6 MiB - WAL Size: 0 B
|
||||
pg-server 20260702T173002 - Thu Jul 2 17:30:03 2026 - Size: 49.6 MiB - WAL Size: 32.0 MiB
|
||||
pg-server 20260702T172002 - Thu Jul 2 17:20:04 2026 - Size: 49.6 MiB - WAL Size: 32.0 MiB
|
||||
```
|
||||
|
||||
Видим, что каждые 10 минут создается новый бэкап
|
||||
|
||||
|
||||
Задание выполнено!
|
||||
Reference in New Issue
Block a user