Настройка основного сервера для репликации
На этом первом этапе вы настроите основной сервер PostgreSQL для подготовки к репликации. Это включает в себя изменение его конфигурационных файлов для разрешения сетевых подключений, включение необходимого уровня Write-Ahead Log (WAL) и создание специального пользователя для репликации.
1. Изменение конфигурационного файла PostgreSQL
Для подготовки к репликации вам необходимо изменить основной конфигурационный файл postgresql.conf. Редактирование этого большого файла вручную с помощью текстового редактора, такого как nano, может быть сложным и подверженным ошибкам из-за большого количества опций. Более эффективным и надежным методом является использование инструментов командной строки для просмотра и обновления конкретных настроек, которые вам нужно изменить. Это позволяет избежать прокрутки сотен строк и предотвращает случайные ошибки.
Сначала давайте проверим текущие значения настроек, которые нам нужно изменить: listen_addresses, wal_level и max_wal_senders.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
echo "--- Current Settings ---"
sudo grep -E "^#?\s*(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
Скорее всего, вы увидите эти строки закомментированными с помощью #.
Теперь давайте автоматически обновим эти настройки. Следующие команды создадут резервную копию конфигурационного файла, а затем обновят каждый необходимый параметр.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
## Создаем резервную копию перед внесением изменений
sudo cp $CONF_FILE ${CONF_FILE}.bak.$(date +%s)
## Устанавливаем listen_addresses в '*' для разрешения подключений с любого IP-адреса
sudo sed -i -E "s/^[#\s]*listen_addresses\s*=.*/listen_addresses = '*'/" "$CONF_FILE"
## Устанавливаем wal_level в 'replica' для включения журналов репликации
sudo sed -i -E "s/^[#\s]*wal_level\s*=.*/wal_level = replica/" "$CONF_FILE"
## Устанавливаем максимальное количество одновременных подключений для репликации
sudo sed -i -E "s/^[#\s]*max_wal_senders\s*=.*/max_wal_senders = 10/" "$CONF_FILE"
Наконец, давайте проверим, были ли изменения применены правильно. Следующая команда отобразит новые значения, отфильтровывая любые закомментированные строки.
echo "--- Verified Settings ---"
sudo grep -E "^(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
Вывод должен показать обновленную, активную конфигурацию:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
С подтвержденными этими настройками сервер правильно сконфигурирован для следующих шагов.
2. Создание выделенного пользователя для репликации
Рекомендуется использовать выделенного пользователя для репликации вместо суперпользователя. Давайте создадим роль с именем replicator.
Подключитесь к PostgreSQL с помощью клиентской программы командной строки psql:
sudo -u postgres psql
Теперь выполните следующую команду SQL для создания пользователя с правами репликации и паролем:
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicapass';
Вы должны увидеть вывод CREATE ROLE. Теперь выйдите из клиента psql:
\q
3. Разрешение подключения для репликации
Далее вам нужно настроить сервер, чтобы разрешить пользователю replicator подключаться с сервера реплики. Вы сделаете это, отредактировав файл pg_hba.conf.
Откройте файл с помощью nano:
sudo nano /etc/postgresql/14/main/pg_hba.conf
Добавьте следующую строку в конец файла. Это правило указывает, что пользователю replicator разрешено подключаться к псевдобазе данных replication с любого IP-адреса (0.0.0.0/0). Для этой лаборатории мы используем 127.0.0.1/32, поскольку оба сервера находятся на одной машине.
host replication replicator 127.0.0.1/32 md5
Нажмите Ctrl+X, затем Y и Enter, чтобы сохранить и выйти.
4. Перезапуск основного сервера
Чтобы применить все эти изменения конфигурации, необходимо перезапустить службу PostgreSQL.
sudo service postgresql restart
Основной сервер теперь готов принимать подключения для репликации.