Репликация PostgreSQL с помощью Bucardo
Репликация PostgreSQL с помощью Bucardo на Oracle Linux 8.5
Имеем два хоста с базами 172.19.3.109 и 172.19.3.110, которые будем реплицировать. Репликация будет master - master
Установим Postgresql13
dnf module disable postgresql dnf install postgresql13-server postgresql13 /usr/pgsql-13/bin/postgresql-13-setup initdb
Вносим в настройки /var/lib/pgsql/13/data/pg_hba.conf
записи для разрешения работы bucardo c репликой на реплицируемых хостах
host all bucardo 127.0.0.1/32 trust host all bucardo 172.19.3.110/32 password host all bucardo 127.0.0.1/32 trust host all bucardo 172.19.3.109/32 password
Разрешаем слушать на всех интерфейсах /var/lib/pgsql/13/data/postgresql.conf
listen_addresses = '*'
Включаем автозапуск и запускаем
systemctl enable postgresql-13 systemctl restart postgresql-13
Устанавливаем необходимые пакеты
yum install bucardo postgresql13-plperl perl-DBI perl-DBD-Pg perl-DBIx-Safe
Создаем директории для логирования и запуска
mkdir /var/log/bucardo mkdir /var/run/bucardo
Запускаем установку Bucardo
bucardo install
Вывод следующего окна где надо будет задать соответствующие параметры
This will install the bucardo database into an existing Postgres cluster. Postgres must have been compiled with Perl support, and you must connect as a superuser Current connection settings: 1. Host: localhost 2. Port: 5432 3. User: postgres 4. Database: postgres 5. PID directory: /var/run/bucardo Enter a number to change it, P to proceed, or Q to quit: P
Заведём пароль пользователя bucardo на каждом из серверов:
psql -U postgres -c "ALTER USER bucardo WITH PASSWORD 'DB_PASS';"
Дальнейшие действия проводим на первом хосте. Запускаем Bucardo
bucardo start
Добавляем базы данных с которыми будем работать (Главное требование для работы на нем должна быть та же схема данных что и на первом)
bucardo add database keycloak1 dbname=keycloak dbhost=172.19.3.109 dbuser=bucardo dbpass=DB_PASS bucardo add database keycloak2 dbname=keycloak dbhost=172.19.3.110 dbuser=bucardo dbpass=DB_PASS
Проверяем
bucardo list database Database: keycloak1 Status: active Conn: psql -U bucardo -d keycloak -h 172.19.3.109 Database: keycloak2 Status: active Conn: psql -U bucardo -d keycloak -h 172.19.3.110
Эти настройки берутся из таблицы db базы bucardo, где и сидит упомянутый выше пароль
psql -U postgres bucardo -c "SELECT name,dbname,dbhost,dbuser,dbpass,status FROM db;" name | dbname | dbhost | dbuser | dbpass | status -----------+----------+--------------+---------+-----------------+-------- keycloak1 | keycloak | 172.19.3.109 | bucardo | htmZPWg7Ajp4MCC | active keycloak2 | keycloak | 172.19.3.110 | bucardo | htmZPWg7Ajp4MCC | active (2 rows)
Удаление баз
bucardo remove database keycloakX
Добавляем таблицы которые будем реплицировать (Важно исключить таблицы без Primary Key)
bucardo add table all --db=keycloak1 --herd=keycloak_herd
Здесь нужно заострить внимание на Primary Key. Bucardo, похоже, не работает с таблицами без первичных ключей. Синк сделать получится
Удаляем из обработки таблицу без Primary Key
bucardo remove table public.databasechangelog
Проверяем
bucardo list table bucardo list herd
Удаление bucardo remove table all
Другими словами, можно почитать здесь:
https://itnan.ru/post.php?c=1&p=327674
http://www.zaweel.ru/2016/07/postgresql_22.html#bucardo