После установки PostgreSQL, для безопасности необходимо настроить репликацию.
Репликация позволяет иметь актуальную копию баз на данный момент времени с минимальным расхождением. И в случае падения основного сервера — восстановить базы из запасного.
Настраиваем Master и Slave
nano /etc/postgresql/9.6/main/postgresql.conf
listen_addresses = '*' # IP адреса этого сервера wal_level = replica max_wal_senders = 3 # По количеству серверов реплик wal_keep_segments = 128
Настраиваем Master
nano /etc/postgresql/9.6/main/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD host replication replication 192.168.0.0/24 md5
Создаем пользователя replication с паролем 1234
su postgres psql CREATE ROLE replication WITH REPLICATION PASSWORD '1234' LOGIN;
Перезапускаем
\q su systemctl restart postgresql && systemctl status postgresql
Настраиваем Slave
Останавливаем
systemctl stop postgresql
nano /etc/postgresql/9.6/main/postgresql.conf
Исправим
hot_standby = on
Копируем начальное состояние мастера
rm -Rf /var/lib/postgresql/9.6/main/* su postgres pg_basebackup -h IP_Мастера -D /var/lib/postgresql/9.6/main -R -P -U replication --xlog-method=stream su
nano /var/lib/postgresql/9.6/main/recovery.conf
Добавим
trigger_file = '/var/lib/postgresql/9.6/main/trigger_file'
Запускаем сервер
su systemctl start postgresql && systemctl status postgresql
Проверяем работу
su postgres
На мастере — подключенные слейвы и их отставание
psql -c 'SELECT *,pg_xlog_location_diff(s.sent_location,s.replay_location) byte_lag FROM pg_stat_replication s;'
На слейве — расхождение с мастером (когда была синхронизация)
psql -c "SELECT now()-pg_last_xact_replay_timestamp();"
Размер базы — делаем запрос на мастере и на слейве и видим, как меняется размер базы на слейве вслед за мастером
psql -c "SELECT pg_size_pretty( pg_database_size( 'gilev83' ) );"
Что дальше?
При падении мастера — на слейве остается максимально актуальная база, и мы ее можем забэкапить и восстановить на мастере второй базой, без затирания основной.
Добавить комментарий