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

Как установить и настроить репликацию Master-Slave с помощью PostgreSQL 9.6 в CentOS 7


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

  1. Что мы будем делать
  2. Необходимое условие
  3. Шаг 1. Установите PostgreSQL 9.6.
  4. Шаг 2. Запустите и настройте PostgreSQL 9.6.
  5. Шаг 3. Настройка Firewalld
  6. Шаг 4. Настройка главного сервера
  7. Шаг 5. Настройка подчиненного сервера
  8. Шаг 6. Тестирование
    1. Дополнительный тест

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

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

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

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

    1. Установите PostgreSQL 9.6.
    2. Запустите и настройте PostgreSQL 9.6.
    3. Настройка брандмауэра
    4. Настроить главный сервер
    5. Настроить подчиненный сервер
    6. Тестирование

    Предпосылка

      • 1 сервер CentOS 7
        • Мастер — разрешение на чтение и запись — IP: 10.0.15.10

        • Подчиненное устройство — разрешение только на чтение — IP: 10.0.15.11

        Шаг 1. Установите PostgreSQL 9.6.

        В этом руководстве мы обсудим, как установить последнюю версию PostgreSQL 9.6 на сервер CentOS 7. По умолчанию официальный репозиторий CentOS предлагает более старую версию, поэтому нам нужно установить PostgreSQL из официального репозитория.

        Добавьте в систему новый репозиторий PostgreSQL 9.6.

        yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

        Теперь установите PostgreSQL 9.6 с помощью следующей команды yum.

        yum -y install postgresql96-server postgresql96-contrib

        Таким образом, вы можете установить PostgreSQL 9.6.

        Шаг 2. Запустите и настройте PostgreSQL 9.6.

        Перед запуском службы postgres нам необходимо инициализировать базу данных. Для этого перейдите в каталог /usr/pgsql-9.6/bin и инициализируйте базу данных с помощью postgres setup postgresql96-setup.

        cd /usr/pgsql-9.6/bin
        ./postgresql96-setup initdb

        Затем запустите службу postgres и включите ее автоматический запуск при загрузке системы.

        systemctl start postgresql-9.6
        systemctl enable postgresql-9.6

        По умолчанию postgres работает на порту 5432. Поэтому убедитесь, что порт 5432 находится в состоянии LISTEN, выполнив команду netstat следующим образом.

        netstat -plntu

        Если у вас нет команды netstat, установите net-tools. Его часть из net-tools.

        yum -y install net-tools

        Итак, PostgreSQL 9.6 запущен. Но нам все еще нужно настроить пароль для пользователя postgres. Войдите в систему как пользователь postgres, а затем получите доступ к оболочке postgres psql.

        su - postgres
        psql

        Дайте пользователю postgres новый пароль с помощью приведенного ниже запроса.

        \password postgres
        Enter new password:

        Итак, PostgreSQL 9.6 запущен и настроен новый пароль для пользователя postgres.

        Шаг 3 — Настройте Firewalld

        Firewalld по умолчанию является инструментом управления брандмауэром в CentOS 7. Мы запустим эту службу и откроем порт для подключения к PostgreSQL.

        Запустите firewalld и включите его автоматический запуск при загрузке системы с помощью следующих команд:

        systemctl start firewalld
        systemctl enable firewalld

        Затем добавьте новую службу postgres в firewalld с помощью следующих команд.

        firewall-cmd --add-service=postgresql --permanent
        firewall-cmd --reload

        Теперь проверьте открытый порт службы.

        firewall-cmd --list-all

        И вы увидите, что служба PostgreSQL была добавлена в файл firewalld.

        ПРИМЕЧАНИЕ. Запустите Шаг 1, Шаг 2 и Шаг 3 на всех ведущих и ведомых устройствах.

        Шаг 4. Настройте главный сервер.

        На этом шаге мы настроим главный сервер для репликации. Это основной сервер, позволяющий читать и записывать процессы из запущенных на нем приложений. PostgreSQL на главном сервере работает только с IP-адресом 10.0.15.10 и выполняет потоковую репликацию на подчиненный сервер.

        Перейдите в каталог данных pgsql /var/lib/pgsql/9.6/data и отредактируйте файл конфигурации postgresql.conf.

        cd /var/lib/pgsql/9.6/data
        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 команду в качестве значения.

        archive_mode = on
        archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'

        В настройках репликации раскомментируйте строку wal_sender и измените значение на 2 (в этом руководстве мы используем только 2 сервера — главный и подчиненный), а для wal_keep_segments — значение 10.

        max_wal_senders = 2
        wal_keep_segments = 10

        Для имени приложения раскомментируйте строку synchronous_standby_names и измените значение на pgslave01.

        synchronous_standby_names = 'pgslave01'

        Вот и все. Сохраните эти изменения и выйдите из редактора.

        Двигаясь дальше, в файле postgresql.conf включен режим архивирования, поэтому нам нужно создать новый каталог для целей архивирования.

        Создайте новый каталог, измените его разрешение и измените владельца на пользователя postgres.

        mkdir -p /var/lib/pgsql/9.6/archive/
        chmod 700 /var/lib/pgsql/9.6/archive/
        chown -R postgres:postgres /var/lib/pgsql/9.6/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 9.6 с помощью следующей команды.

        systemctl restart postgresql-9.6

        Далее нам нужно создать нового пользователя с привилегиями репликации. Мы создадим нового пользователя с именем replica.

        Войдите в систему как пользователь postgres и создайте нового пользователя-реплику с паролем [email .

        su - postgres
        createuser --replication -P replica
        Enter New Password:

        На этом основная настройка PostgreSQL 9.6 завершена, и пользователь для репликации создан.

        Шаг 5 - Настройте подчиненный сервер

        На этом этапе мы настроим подчиненный сервер. Мы хотим заменить каталог данных postgres на подчиненном сервере данными postgres с главного сервера, а затем настроить подчиненный сервер для работы под IP-адресом 10.0.15.11 и, наконец, включить на нем hot_standby, чтобы разрешить только чтение без записи.

        Прежде чем мы начнем настраивать подчиненный сервер, остановите службу postgres с помощью приведенной ниже команды systemctl.

        systemctl stop postgresql-9.6

        Затем перейдите в каталог postgres и каталог резервных данных.

        cd /var/lib/pgsql/9.6/
        mv data data-backup

        Создайте новый каталог данных и измените права владения каталогом на пользователя postgres.

        mkdir -p data/
        chmod 700 data/
        chown -R postgres:postgres data/

        Затем войдите в систему как пользователь postgres и скопируйте весь каталог данных с главного сервера на подчиненный сервер в качестве пользователя-реплики.

        su - postgres
        pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
        Password:

        Введите свой пароль и дождитесь передачи данных с главного сервера на подчиненный.

        После завершения переноса перейдите в каталог данных postgres и отредактируйте файл postgresql.conf на подчиненном сервере.

        cd /var/lib/pgsql/9.6/data/
        vim postgresql.conf

        Измените значение listen_addresses на IP-адрес подчиненного сервера 10.0.15.11.

        listen_addresses = '10.0.15.11'

        Включите hot_standby на подчиненном сервере, раскомментировав следующую строку и изменив значение на on.

        hot_standby = on

        Вот и все. Сохраните изменения и выйдите из редактора.

        Затем создайте новый файл recovery.conf с помощью vim.

        vim recovery.conf

        Вставьте в него следующую конфигурацию.

        standby_mode = 'on'
        primary_conninfo = 'host=10.0.15.10 port=5432 user=replica application_name=pgslave01'
        trigger_file = '/tmp/postgresql.trigger.5432'

        Сохраните изменения и закройте файл.

        Примечание. В файле primary_conninfo введите данные своего сервера.

        Измените права собственности файла recovery.conf на права пользователя postgres.

        chmod 600 recovery.conf
        chown postgres:postgres recovery.conf

        И запустите PostgreSQL 9.6 на подчиненном сервере.

        systemctl start postgresql-9.6

        Настройка подчиненного сервера завершена.

        Теперь, когда вы проверите подчиненный сервер, вы увидите, что PostgreSQL 9.6 работает на сервере с IP-адресом 10.0.15.11.

        netstat -plntu

        Шаг 6 — Тестирование

        Установка и настройка репликации PostgreSQL 9.6 Master-Slave завершены. Чтобы протестировать настройку, проверьте поток состояния репликации и проверьте репликацию данных с ведущего устройства на ведомое.

        Войдите на главный сервер и переключитесь на пользователя postgres.

        su - postgres

        Затем проверьте репликацию состояния потоковой передачи PostgreSQL с помощью следующих команд.

        psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
        psql -x -c "select * from pg_stat_replication;"

        Вы должны увидеть, что значение состояния — потоковое, а sync_state — синхронизированное.

        Затем проверьте, вставив данные с главного сервера, а затем проверьте все данные на подчиненном сервере.

        Войдите в систему как пользователь postgres и получите доступ к оболочке PostgreSQL на ГЛАВНОМ сервере.

        su - postgres
        psql

        Создайте новую таблицу replica_test и вставьте в нее некоторые данные с помощью следующих запросов на вставку.

        CREATE TABLE replica_test (test 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');

        А теперь войдите на сервер SLAVE аналогично тому, как вы это делали на главном сервере.

        su - postgres
        psql

        Проверьте все данные из таблицы replica_test, используя приведенный ниже запрос.

        select * from replica_test;

        Итак, вы увидите, что все данные реплицируются с ГЛАВНОГО сервера на ПОДЧИНЕННЫЙ сервер.

        Дополнительный тест

        Протестируйте выполнение действия WRITE с сервера SLAVE.

        INSERT INTO replica_test VALUES ('this is SLAVE');

        И результат должен быть Невозможно выполнить INSERT.

        Итак, установка и настройка репликации Master-Slave PostgreSQL 9.6 на CentOS 7 прошла успешно.

        использованная литература

        • https://www.server-world.info/en/note?os=CentOS_7