15 апреля 2019 г.

Простенькая репликация postgres

Имеем в наличии:
Два сервера под управлением Astra Linux 1.5 с postgres 9.2 на борту
Настроена боевая база на мастере.
srv - master - 192.168.10.1
srv2 - slave - 192.168.10.2

Нужно:
1. Репликация
2. Балансировка

Делаем.
Первым шагом настраиваем реплику

На мастере:
В файле pg_hba.conf добавляем запись
host     replication    postgres   192.168.10.2/32    trust

В файле postgresql.conf:
max_wal_senders = 1 # количество подключаемых резервных серверов
max_keep_segments = 256 # Количество хранимых сегментов. Необходимо подобрать такое количество, чтобы резервных сервер успевал все забирать. Я влепил 256 (макс), чтобы за сутки wal не затирались

wal_level = hot_standby # hot_standby добавляет информацию, необходимую для запуска только для чтения запросов на резервный сервер

checkpoint_segments = 16 # Можно увеличить количество сегментов в wal-логе

На слейве
Создаем директорию, куда будет литься реплика
mkdir -p /DATA/main/

Добавляем локали ru_RU.UTF-8, en_US.UTF-8, для чего необходимо раскоментировать их в файле /etc/locale.gen. и выполнить команду: 
locale-gen 

Проверяем наличие в системе нужной локали
locale -a 

Сносим старый кластер:
pg_dropcluster 9.2 main --stop

Создаем новый кластер с нужной локалью:
pg_createcluster --locale=ru_RU.UTF-8 -d /DATA/main 9.2 main


Удаляем оттуда все
rm -r /DATA/main/*


Запускаем pg_basebackup
pg_basebackup --host=192.168.10.1 --port=5432 --username=postgres -D "/DATA/main/"

После выполнения меняем владельца файлов даты
chown -R postgres /DaTA/main/

Стартуем кластер на слейве.
Если не стартуется в файле psotgresql.conf, на слейве, поменять
log_destination = 'stderr' на log_destination = 'syslog'
и искать ошибку в syslog

Комментариев нет:

Отправить комментарий