```{index} replication, внешние ссылки ``` # Настройка репликации ```{seealso} Оригинальная статья: ``` ## Создаём пользователя в PostgreSQL на Master Входим в систему под пользователем `postgres`: ```bash su - postgres ``` Создаём нового пользователя для репликации: ```bash createuser --replication -P repluser ``` Система запросит пароль --- его нужно придумать и ввести дважды. В данном примере мы создаём пользователя `repluser`. Выходим из оболочки пользователя `postgres`: ```bash exit ``` ## Настраиваем Master Смотрим расположение конфигурационного файла `postgresql.conf` командой: ```bash su - postgres -c "psql -c 'SHOW config_file;'" ``` Открываем конфигурационный файл `postgresql.conf` (тот, имя которого получили в выводе предыдущей команды): ```bash vim /mnt/storage/pgsql/data/postgresql.conf ``` Редактируем следующие параметры: ```text listen_addresses = '*' wal_level = replica max_wal_senders = 2 max_replication_slots = 2 hot_standby = on hot_standby_feedback = on ``` где: :\*: IP-адрес сервера, на котором он будем слушать запросы Postgres, можно перечислить явно через запятую; :wal_level: указывает, сколько информации записывается в WAL (журнал операций, который используется для репликации); :max_wal_senders: количество планируемых слейвов; :max_replication_slots: максимальное число слотов репликации ```{warning} Данный параметр не нужен для postgresql 9.2: с ним сервер не запустится! ``` :hot_standby: определяет, можно или нет подключаться к postgresql для выполнения запросов в процессе восстановления; :hot_standby_feedback: определяет, будет или нет сервер slave сообщать мастеру о запросах, которые он выполняет. Открываем конфигурационный файл `pg_hba.conf` --- он находится в том же каталоге, что и файл `postgresql.conf`: ```bash vim /mnt/storage/pgsql/data/pg_hba.conf ``` Добавляем следующие строки: ```text host replication repluser 127.0.0.1/32 md5 host replication repluser 192.168.1.1/32 md5 host replication repluser 192.168.1.2/32 md5 ``` Данной настройкой мы разрешаем подключение к базе данных `replication` пользователю `repluser` с локального сервера (`127.0.0.1` и `192.168.1.1`) и сервера `192.168.1.2`. ```{hint} Лучше использовать не `md5`, а `scram-sha-256`. ``` Перезапускаем службу `postgresql`: ```bash systemctl restart postgresql ``` ```{important} Обратите внимание, что название сервиса в системах Linux может различаться. ``` ## Настраиваем Slave Смотрим расположение папки данных `postgresql`: ```bash su - postgres -c "psql -c 'SHOW data_directory;'" ``` Получаем: `/mnt/storage/pgsql/data`. Также смотрим путь до конфигурационного файла `postgresql.conf` (нам это понадобится ниже): ```bash su - postgres -c "psql -c 'SHOW config_file;'" ``` Останавливаем сервис `postgresql`: ```bash systemctl stop postgresql ``` На всякий случай, создаём архив базы: ```bash tar -czvf /tmp/data_pgsql.tar.gz \ /mnt/storage/pgsql/data ``` Удаляем содержимое каталога с данными: ```bash rm -rf /mnt/storage/pgsql/data/* ``` И реплицируем данные с master сервера. ```{rubric} а) Если у нас postgresql 9: ``` ```bash su -u postgres -с "pg_basebackup \ -h 192.168.1.1 \ -U repluser \ -D /mnt/storage/pgsql/data \ --xlog-method=stream --write-recovery-conf" ``` где: :192.168.1.1: IP-адрес мастера; :/mnt/storage/pgsql/data: путь до каталога с данными. ```{rubric} б) Если у нас postgresql 10 и выше: ``` ```bash su - postgres -c "pg_basebackup --host=192.168.1.1 \ --username=repluser \ --pgdata=/mnt/storage/pgsql/data \ --wal-method=stream --write-recovery-conf" ``` где: :192.168.1.1: IP-адрес мастера; :/mnt/storage/pgsql/data: путь до каталога с данными. После ввода команды система запросит пароль для созданной ранее учётной записи `repluser` --- вводим его. Начнётся процесс клонирования данных. Открываем конфигурационный файл `postgresql.conf` на слейве, если явно указывали адреса, меняем: ```bash vim /mnt/storage/pgsql/data/postgresql.conf ``` И редактируем следующие параметры: ```text listen_addresses = '*' ``` Снова запускаем сервис `postgresql`: ```bash systemctl start postgresql ```