Поиск по сайту:

Как настроить репликацию Master-Slave для PostgreSQL 9.6 в Ubuntu 16.04


Это руководство существует для этих версий ОС

  • Ubuntu 16.04 (Xenial Xerus)
  • Ubuntu 15.04 (Vivid Vervet)

На этой странице

  1. Шаг 1. Установите PostgreSQL 9.6.
  2. Шаг 2. Настройка брандмауэра UFW
  3. Шаг 3. Настройка ГЛАВНОГО сервера PostgreSQL
  4. Шаг 4. Настройка ПОДЧИНЕННОГО сервера
  5. Шаг 5. Копирование данных PostgreSQL с ГЛАВНОГО на ПОДЧИНЕННОЕ
  6. Шаг 6. Тестирование
  7. Справочник

PostgreSQL или Postgres — это система управления объектно-реляционными базами данных (ORDBMS) с открытым исходным кодом, активно разрабатываемая более 15 лет. Это мощный сервер базы данных, который может справляться с высокими нагрузками. PostgreSQL можно использовать на серверах Linux, Unix, BSD и Windows.

Репликация базы данных master/slave — это процесс копирования (синхронизации) данных из базы данных на одном сервере (главном) в базу данных на другом сервере (ведомые). Основное преимущество этого процесса заключается в распределении баз данных на несколько машин, поэтому, когда на главном сервере возникают проблемы, есть резервная машина с теми же данными, доступная для обработки запросов без перерыва.

PostgreSQL предоставляет несколько способов репликации базы данных. Его можно использовать для целей резервного копирования и обеспечения высокой доступности сервера базы данных. В этом руководстве мы покажем вам, как установить и настроить репликацию PostgreSQL 9.6 Master-Slave на сервере Ubuntu 16.04. Мы будем использовать режим горячего резерва, и это очень хорошая отправная точка для углубленного изучения PostgreSQL.

Что мы будем делать:

  1. Установите PostgreSQL 9.6.
  2. Настройте брандмауэр UFW.
  3. Настройте ГЛАВНЫЙ сервер.
  4. Настройте ПОДЧИНЕННЫЙ сервер.
  5. Скопируйте данные PostgreSQL из MASTER в SLAVE.
  6. Тестирование.

Условие:

  • 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
    \conninfo

    PostgreSQL 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/