- Как настроить репликацию MySQL Master-Slave в Ubuntu 18.04
- Подготовка
- Установить MySQL
- Настроить главный сервер
- Настроить подчиненный сервер
- Проверить конфигурацию
- Выводы
- Настройка потоковой репликации PostgreSQL
- 1. Подготовка серверов
- PostgreSQL
- Брандмауэр
- SELinux
- 2. Настройки на Master
- Создаем пользователя в PostgreSQL
- Настраиваем postgresql
- 3. Настройки на Slave
- 4. Проверка репликации
- Посмотреть статус
- Создать тестовую базу
Как настроить репликацию MySQL Master-Slave в Ubuntu 18.04
Репликация MySQL — это процесс, который позволяет автоматически копировать данные с одного сервера базы данных на один или несколько серверов.
MySQL поддерживает несколько топологий репликации, причем топология «главный / подчиненный» является одной из наиболее известных топологий, в которой один сервер базы данных действует как главный, а один или несколько серверов действуют как подчиненные. По умолчанию репликация является асинхронной, когда ведущее устройство отправляет события, описывающие изменения базы данных, в свой двоичный журнал, а ведомые устройства запрашивают события, когда они готовы.
В этом руководстве рассматривается базовый пример репликации MySQL Master / Slave с одним главным и одним подчиненным серверами в Ubuntu 18.04. Те же шаги применяются для MariaDB.
Этот тип топологии репликации лучше всего подходит для развертывания реплик чтения для масштабирования чтения, резервного копирования баз данных в реальном времени для аварийного восстановления и для задач аналитики.
Подготовка
В этом примере предполагается, что у вас есть два сервера под управлением Ubuntu 18.04, которые могут связываться друг с другом по частной сети. Если ваш хостинг-провайдер не предлагает частные IP-адреса, вы можете использовать общедоступные IP-адреса и настроить брандмауэр, чтобы разрешить трафик на порт 3306 только из надежных источников.
Серверы в этом примере имеют следующие IP-адреса:
Master IP: 192.168.121.190 Slave IP: 192.168.121.236
Установить MySQL
По умолчанию репозитории Ubuntu 18.04 включают MySQL версии 5.7. Чтобы избежать каких-либо проблем, лучше всего установить одну и ту же версию MySQL на оба сервера.
sudo apt-get update
sudo apt-get install mysql-server
Установите MySQL на подчиненный сервер, используя те же команды:
sudo apt-get update
sudo apt-get install mysql-server
Настроить главный сервер
Первый шаг — настроить главный сервер MySQL. Внесем следующие изменения:
- Настройте сервер MySQL на прослушивание частного IP-адреса .
- Установите уникальный идентификатор сервера.
- Включите двоичное ведение журнала
Для этого откройте файл конфигурации MySQL и раскомментируйте или установите следующее:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 192.168.121.190 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
После этого перезапустите службу MySQL, чтобы изменения вступили в силу:
sudo systemctl restart mysql
Следующим шагом будет создание нового пользователя репликации. Войдите на сервер MySQL как пользователь root, набрав:
Изнутри командной строки MySQL выполните следующие SQL-запросы, которые создадут пользователя replica и предоставят пользователю привилегию REPLICATION SLAVE :
CREATE USER 'replica'@'192.168.121.236' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.236';
Убедитесь, что вы изменили IP-адрес на свой подчиненный IP-адрес. Вы можете назвать пользователя как хотите.
Находясь в командной строке MySQL, выполните следующую команду, которая выведет двоичное имя файла и позицию.
*************************** 1. row *************************** File: mysql-bin.000001 Position: 629 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
Обратите внимание на имя файла mysql-bin.000001 и позицию 629 . Эти значения понадобятся вам при настройке подчиненного сервера. Эти значения, вероятно, будут другими на вашем сервере.
Настроить подчиненный сервер
Как и для главного сервера выше, мы внесем следующие изменения в подчиненный сервер:
- Настройте сервер MySQL для прослушивания частного IP-адреса
- Установите уникальный идентификатор сервера
- Включите двоичное ведение журнала
Откройте файл конфигурации MySQL и отредактируйте следующие строки:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 192.168.121.236 server-id = 2 log_bin = /var/log/mysql/mysql-bin.log
Перезапустите службу MySQL:
sudo systemctl restart mysql
Следующим шагом является настройка параметров, которые подчиненный сервер будет использовать для подключения к главному серверу. Войдите в оболочку MySQL:
Сначала остановите подчиненные потоки:
Выполните следующий запрос, который настроит подчиненное устройство для репликации главного устройства:
CHANGE MASTER TO
MASTER_HOST='192.168.121.190',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=629;
Убедитесь, что вы используете правильный IP-адрес, имя пользователя и пароль. Имя и позиция файла журнала должны совпадать со значениями, полученными от главного сервера.
После этого запустите подчиненные потоки.
Проверить конфигурацию
На этом этапе у вас должна быть работающая настройка репликации Master / Slave.
Чтобы убедиться, что все работает должным образом, мы создадим новую базу данных на главном сервере:
CREATE DATABASE replicatest;
Войдите в подчиненную оболочку MySQL:
Выполните следующую команду, чтобы вывести список всех баз данных :
Вы заметите, что база данных, созданная на главном сервере, реплицируется на подчиненный:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | replicatest | | sys | +--------------------+ 5 rows in set (0.00 sec)
Выводы
В этом руководстве мы показали, как создать репликацию MySQL Master / Slave.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Настройка потоковой репликации PostgreSQL
Обновлено: 31.03.2021 Опубликовано: 04.05.2019
Тематические термины: PostgreSQL. Репликация PostgreSQL представляет из себя способ реализации отказоустойчивого кластера. Инструкция написана на примере PostgreSQL 9.6 и 10, также она будет работать для PostgreSQL 9.2 (все нюансы будут отмечены отдельными комментариями). В данном примере мы настроим потоковую (streaming) репликацию. Другой тип репликации (логическая) добавлена в PostgreSQL 10. Она позволяет реплицировать разные базы данных и таблицы на разные реплики. Также, мы будем применять асинхронную репликацию — это вид репликации, при котором запросы выполняются сначала на мастере, затем попадают в журнал операций (WAL) и только после этого — на slave. При синхронной репликации запросы сначала попадают в WAL — после в мастер и слейв. Используемые в данном руководстве команды, применимы для операционных систем Linux. Если Postgre работает под Windows, данную инструкцию можно использовать как шпаргалку для настройки конфигурационных файлов СУБД.
1. Подготовка серверов
PostgreSQL
На всех серверах баз данных должна быть установлена одна и та же версия PostgreSQL. Также, все серверы должны иметь одну и ту же архитектуру процессора. Вот пример установки сервера PostgreSQL на CentOS 7.
Брандмауэр
При использовании брандмауэра, необходимо открыть TCP-порт 5432 — он используется сервером postgre. а) Если управление выполняется с помощью Firewalld:
SELinux
Если активирована система безопасности SELinux (по умолчанию в системах Red Hat / CentOS / Fedora), отключаем ее:
2. Настройки на Master
В данной статье мы будем настраивать серверы с IP-адресами 192.168.1.10 (первичный или master) и 192.168.1.11 (вторичный или slave). Переходим на сервер, с которого будем реплицировать данные (мастер) и выполняем следующие действия.
Создаем пользователя в PostgreSQL
* система запросит пароль — его нужно придумать и ввести дважды. В данном примере мы создаем пользователя repluser. Выходим из оболочки пользователя postgres:
Настраиваем postgresql
* конфигурационный файл находится по пути /etc/postgresql/9.6/main/postgresql.conf. Открываем конфигурационный файл postgresql.conf.
* мы открываем файл, который получили sql-командой SHOW config_file;. Редактируем следующие параметры:
listen_addresses = ‘localhost, 192.168.1.10’
wal_level = replica
max_wal_senders = 2
max_replication_slots = 2
hot_standby = on
hot_standby_feedback = on
- 192.168.1.10 — IP-адрес сервера, на котором он будем слушать запросы Postgre;
- wal_level указывает, сколько информации записывается в WAL (журнал операций, который используется для репликации);
- max_wal_senders — количество планируемых слейвов;
- max_replication_slots — максимальное число слотов репликации (данный параметр не нужен для postgresql 9.2 — с ним сервер не запустится);
- hot_standby — определяет, можно или нет подключаться к postgresql для выполнения запросов в процессе восстановления;
- hot_standby_feedback — определяет, будет или нет сервер slave сообщать мастеру о запросах, которые он выполняет.
Открываем конфигурационный файл pg_hba.conf — он находитсяч в том же каталоге, что и файл postgresql.conf:
Добавляем следующие строки:
host replication repluser 127.0.0.1/32 md5
host replication repluser 192.168.1.10/32 md5
host replication repluser 192.168.1.11/32 md5
* данной настройкой мы разрешаем подключение к базе данных replication пользователю repluser с локального сервера (localhost и 192.168.1.10) и сервера 192.168.1.11.
Перезапускаем службу postgresql:
systemctl restart postgresql
* обратите внимание, что название для сервиса в системах Linux может различаться.
3. Настройки на Slave
Смотрим путь до конфигурационного файла postgresql:
su — postgres -c «psql -c ‘SHOW data_directory;'»
Также смотрим путь до конфигурационного файла postgresql.conf (нам это понадобиться ниже):
su — postgres -c «psql -c ‘SHOW config_file;'»
Останавливаем сервис postgresql:
systemctl stop postgresql
На всякий случай, создаем архив базы:
tar -czvf /tmp/data_pgsql.tar.gz /var/lib/pgsql/9.6/data
* в данном примере мы сохраним все содержимое каталога /var/lib/pgsql/9.6/data в виде архива /tmp/data_pgsql.tar.gz.
Удаляем содержимое каталога с данными:
И реплицируем данные с master сервера.
а) Если у нас postgresql 9:
su -u postgres -с «pg_basebackup -h 192.168.1.10 -U repluser -D /var/lib/pgsql/9.6/data —xlog-method=stream —write-recovery-conf»
* где 192.168.1.10 — IP-адрес мастера; /var/lib/pgsql/9.6/data — путь до каталога с данными.
б) Если у нас postgresql 10:
su — postgres -c «pg_basebackup —host=192.168.1.10 —username=repluser —pgdata=/var/lib/pgsql/10/data —wal-method=stream —write-recovery-conf»
* где 192.168.1.10 — IP-адрес мастера; /var/lib/pgsql/10/data — путь до каталога с данными.
После ввода команды система запросит пароль для созданной ранее учетной записи repluser — вводим его. Начнется процесс клонирования данных.
Открываем конфигурационный файл postgresql.conf на слейве:
И редактируем следующие параметры:
listen_addresses = ‘localhost, 192.168.1.11’
* где 192.168.1.11 — IP-адрес нашего вторичного сервера.
Снова запускаем сервис postgresql:
systemctl start postgresql
4. Проверка репликации
Посмотреть статус
Статус работы репликации можно посмотреть следующими командами.
=# select * from pg_stat_replication;
=# select * from pg_stat_wal_receiver;
Создать тестовую базу
На мастере заходим в командную оболочку Postgre:
Создаем новую базу данных:
=# CREATE DATABASE repltest ENCODING=’UTF8′;
Теперь на вторичном сервере смотрим список баз:
Мы должны увидеть среди баз ту, которую создали на первичном сервере: