Как настроить репликацию Master-Slave для PostgreSQL 9.6 в Ubuntu 16.04
Это руководство существует для этих версий ОС
- Ubuntu 16.04 (Xenial Xerus)
- Ubuntu 15.04 (Vivid Vervet)
На этой странице
- Шаг 1. Установите PostgreSQL 9.6.
- Шаг 2. Настройка брандмауэра UFW
- Шаг 3. Настройка ГЛАВНОГО сервера PostgreSQL
- Шаг 4. Настройка ПОДЧИНЕННОГО сервера
- Шаг 5. Копирование данных PostgreSQL с ГЛАВНОГО на ПОДЧИНЕННОЕ
- Шаг 6. Тестирование
- Справочник
PostgreSQL или Postgres — это система управления объектно-реляционными базами данных (ORDBMS) с открытым исходным кодом, активно разрабатываемая более 15 лет. Это мощный сервер базы данных, который может справляться с высокими нагрузками. PostgreSQL можно использовать на серверах Linux, Unix, BSD и Windows.
Репликация базы данных master/slave — это процесс копирования (синхронизации) данных из базы данных на одном сервере (главном) в базу данных на другом сервере (ведомые). Основное преимущество этого процесса заключается в распределении баз данных на несколько машин, поэтому, когда на главном сервере возникают проблемы, есть резервная машина с теми же данными, доступная для обработки запросов без перерыва.
PostgreSQL предоставляет несколько способов репликации базы данных. Его можно использовать для целей резервного копирования и обеспечения высокой доступности сервера базы данных. В этом руководстве мы покажем вам, как установить и настроить репликацию PostgreSQL 9.6 Master-Slave на сервере Ubuntu 16.04. Мы будем использовать режим горячего резерва, и это очень хорошая отправная точка для углубленного изучения PostgreSQL.
Что мы будем делать:
- Установите PostgreSQL 9.6.
- Настройте брандмауэр UFW.
- Настройте ГЛАВНЫЙ сервер.
- Настройте ПОДЧИНЕННЫЙ сервер.
- Скопируйте данные PostgreSQL из MASTER в SLAVE.
- Тестирование.
Условие:
- 1 сервер Ubuntu 16.04
- ГЛАВНЫЙ – Разрешение чтения и записи – IP: 10.0.15.10
- ВЕДОМЫЙ – Только чтение – IP: 10.0.15.11
Шаг 1. Установите PostgreSQL 9.6.
В этом руководстве мы установим последнюю версию PostgreSQL 9.6. В официальном репозитории Ubuntu они предоставляют только PostgreSQL 9.5, поэтому нам нужно установить последнюю версию напрямую из репозитория PostgreSQL.
Добавьте репозиторий postgreSQL 9.6 в каталог sources.list.d.
echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' | tee /etc/apt/sources.list.d/postgresql.list
И импортируйте ключ подписи PostgreSQL в систему.
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Теперь обновите системный репозиторий с помощью команды apt.
apt-get update
Затем установите пакет PosgreSQL 9.6 с помощью приведенной ниже команды apt.
apt-get install -y postgresql-9.6 postgresql-contrib-9.6
Если установка завершена, добавьте ее для автоматического запуска при загрузке.
systemctl enable postgresql
По умолчанию PostgreSQL работает на IP-адресе локального хоста (127.0.0.1) с портом 5432 в Ubuntu, проверьте его с помощью команды netstat.
netstat -plntu
В системе работает PostgreSQL 9.6. На следующем шаге нам нужно настроить пароль для пользователя postgres.
Из учетной записи root войдите в систему пользователя postgres с помощью команды su, затем получите доступ к внешнему терминалу postgres psql.
su - postgres
psqlИзмените пароль пользователя postgres и проверьте информацию о подключении с помощью запросов postgres ниже.
\password postgres
\conninfoPostgreSQL 9.6 был установлен в системе, работает без ошибок, и пароль для пользователя postgres был обновлен.
Шаг 2. Настройте брандмауэр UFW.
UFW или Uncomplicated Firewall — это приложение для управления брандмауэром на основе iptables в Ubuntu. UFW — это инструмент настройки брандмауэра по умолчанию для Ubuntu Linux, который предоставляет удобный способ настройки брандмауэра.
Мы можем установить ufw из основного репозитория Ubuntu с помощью команды apt.
apt-get install -y ufw
Добавьте новые службы в брандмауэр UFW: добавьте службы SSH и PostgreSQL с помощью приведенных ниже команд.
ufw allow ssh
ufw allow postgresqlВключите брандмауэр UFW и проверьте его состояние.
ufw enable
ufw statusУстановлен межсетевой экран UFW и добавлена служба PostgreSQL.
ЗАМЕЧАНИЯ:
Выполните шаг 1 и шаг 2 на ГЛАВНОМ и ПОДЧИНЕННОМ серверах.
Шаг 3. Настройте ГЛАВНЫЙ сервер PostgreSQL.
Главный сервер имеет IP-адрес 10.0.15.10, и служба postgres будет работать под этим IP-адресом с портом по умолчанию. Главный сервер будет иметь разрешение на ЧТЕНИЕ и ЗАПИСЬ в базу данных и выполнять потоковую репликацию на подчиненный сервер.
Перейдите в каталог конфигурации postgres /etc/postgresql/9.6/main и отредактируйте файл postgresql.conf с помощью vim.
cd /etc/postgresql/9.6/main/
vim postgresql.confРаскомментируйте строку listen_addresses и измените значение на IP-адрес главного сервера 10.0.15.10.
listen_addresses = '10.0.15.10'
Раскомментируйте строку wal_level и измените значение на hot_standby.
wal_level = hot_standby
Для уровня синхронизации мы будем использовать локальную синхронизацию. Раскомментируйте и измените строку значения, как показано ниже.
synchronous_commit = local
Включите режим архивирования и измените параметр archive_command на команду cp %p /var/lib/postgresql/9.6/main/archive/%f.
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'Для настроек репликации в этом руководстве мы используем только 2 сервера, главный и подчиненный, раскомментируйте строку wal_sender и измените значение на 2, а для wal_keep_segments значение равно 10.
max_wal_senders = 2
wal_keep_segments = 10Для имени приложения раскомментируйте строку synchronous_standby_names и измените значение на имя pgslave001.
synchronous_standby_names = 'pgslave001'
Сохраните файл и выйдите из редактора.
В файле postgresql.conf режим архива включен, поэтому нам нужно создать новую директорию для архива. Создайте новый каталог архива, измените разрешение и измените владельца на пользователя postgres.
mkdir -p /var/lib/postgresql/9.6/main/archive/
chmod 700 /var/lib/postgresql/9.6/main/archive/
chown -R postgres:postgres /var/lib/postgresql/9.6/main/archive/Затем отредактируйте файл pg_hba.conf для настройки аутентификации.
vim pg_hba.conf
Вставьте конфигурацию ниже в конец строки.
# Localhost
host replication replica 127.0.0.1/32 md5
# PostgreSQL Master IP address
host replication replica 10.0.15.10/32 md5
# PostgreSQL SLave IP address
host replication replica 10.0.15.11/32 md5Сохраните и выйдите, затем перезапустите PostgreSQL.
systemctl restart postgresql
PostgreSQL работает под IP-адресом 10.0.15.10, проверьте его с помощью команды netstat.
netstat -plntu
Далее создайте нового пользователя для репликации. Мы создадим новую реплику пользователя с паролем [email . Пожалуйста, выберите безопасный пароль здесь для вашей установки! Войдите в систему как пользователь postgres и получите доступ к внешнему терминалу postgres psql.
su - postgres
psqlСоздайте нового пользователя реплики с паролем [email с запросом postgres ниже.
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD '';
Теперь проверьте нового пользователя с помощью запроса du ниже, и вы увидите пользователя реплики с привилегиями репликации.
\du
Настройка ГЛАВНОГО сервера завершена.
Шаг 4 - Настройте ПОДЧИНЕННЫЙ сервер
ВЕДОМЫЙ сервер имеет IP-адрес 10.0.15.11. И этот сервер будет иметь только разрешение READ для базы данных. Сервер базы данных Postgres будет работать под IP-адресом сервера, а не под IP-адресом локального хоста.
Остановите службу postgres на подчиненном сервере с помощью приведенной ниже команды systemctl.
systemctl stop postgresql
Перейдите в каталог конфигурации Postgres /etc/postgresql/9.6/main, затем отредактируйте файл конфигурации postgresql.conf.
cd /etc/postgresql/9.6/main/
vim postgresql.confРаскомментируйте строку listen_addresses и замените значение IP-адресом подчиненного сервера 10.0.15.11.
listen_addresses = '10.0.15.11'
Раскомментируйте строку wal_level и измените значение на hot_standby.
wal_level = hot_standby
Для уровня синхронизации раскомментируйте строку synchronous_commit и измените значение, как показано ниже.
synchronous_commit = local
Для настройки репликации раскомментируйте строку max_wal_senders и замените значение на 2, потому что просто используйте 2 сервера. А для wal_keep_segments измените значение на 10.
max_wal_senders = 2
wal_keep_segments = 10Раскомментируйте строку synchronous_standby_names для имени приложения и измените значение на имя pgslave001.
synchronous_standby_names = 'pgslave001'
Включите hot_standby для подчиненного сервера, раскомментировав следующую строку и изменив значение на on.
hot_standby = on
Сохраните файл и выйдите из редактора.
Шаг 5 — Скопируйте данные PostgreSQL с ГЛАВНОГО на ПОДЧИНЕННЫЙ
Затем мы хотим заменить основной каталог postgres на SLAVE-сервере основным каталогом данных с MASTER-сервера.
Войдите на сервер SLAVE и получите доступ к пользователю postgres.
su - postgres
Перейдите в основной каталог данных postgres и создайте его резервную копию, переименовав имя каталога.
cd 9.6/
mv main main-bekupСоздайте новый основной каталог от имени пользователя postgres и убедитесь, что у него есть разрешение, такое как у каталога main-bekup.
mkdir main/
chmod 700 main/Затем скопируйте основной каталог с ГЛАВНОГО сервера на ПОДЧИНЕННЫЙ сервер с помощью команды pg_basebackup, мы будем использовать пользователя-реплику для выполнения этой копии данных.
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/postgresql/9.6/main -P --xlog
Password:Когда передача данных будет завершена, перейдите в основной каталог данных и создайте новый файл recovery.conf.
cd /var/lib/postgresql/9.6/main/
vim recovery.confВставьте конфигурацию ниже:
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica application_name=pgslave001'
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'Сохраните и выйдите, затем измените права доступа к файлу на 600 с помощью chmod.
chmod 600 recovery.conf
Теперь запустите PostgreSQL 9.6 на SLAVE-сервере и убедитесь, что служба postgres работает на IP-адресе 10.0.15.11 с помощью netstat.
systemctl start postgresql
netstat -plntuПередача данных и настройка для SLAVE-сервера завершены.
Шаг 6 — Тестирование
Для тестирования проверим состояние репликации PostgreSQL 9.6 и попробуем создать новую таблицу на ГЛАВНОМ сервере, затем проверим репликацию, проверив все данные с ПОДЧИНЕННОГО сервера.
Войдите на ГЛАВНЫЙ сервер и войдите в систему под пользователем postgres.
su - postgres
Запустите приведенные ниже команды psql, чтобы увидеть статус репликации.
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"Вы получите результаты, как показано ниже.
Далее попробуйте создать новую таблицу с ГЛАВНОГО сервера. Войдите в систему под пользователем postgres на главном сервере.
su - postgres
psqlИ создайте новую таблицу с именем replica_test и вставьте данные в таблицу, выполнив запросы postgres ниже.
CREATE TABLE replica_test (hakase varchar(100));
INSERT INTO replica_test VALUES ('linux-console.net');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');Затем войдите в систему под пользователем postgres на SLAVE-сервере и получите доступ к терминалу psql.
su - postgres
psqlПроверьте данные в таблице replica_test с помощью запроса postgres ниже.
select * from replica_test;
И вы получите те же данные, что и на ГЛАВНОМ, они реплицируются с ГЛАВНОГО сервера на ВЕДОМЫЙ сервер.
Дополнительный тест:
Протестируйте запись на SLAVE-сервере с помощью приведенного ниже запроса.
INSERT INTO replica_test VALUES ('this is SLAVE');
И вы получите сообщение об ошибке «Невозможно выполнить запрос INSERT на SLAVE-сервере».
Установка и настройка PostgreSQL 9.6 с репликацией Master-Slave на Ubuntu 16.04 Xenial Xerus прошла успешно.
Ссылка
- https://linux-console.net/tutorial/postgresql-replication-on-ubuntu-15-04/