Репликация PostgreSQL с помощью Bucardo — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
Строка 86: Строка 86:
  
 
Добавляем таблицы которые  будем реплицировать (Важно исключить таблицы без Primary Key)
 
Добавляем таблицы которые  будем реплицировать (Важно исключить таблицы без Primary Key)
bucardo add table all --db=keycloak1 --herd=keycloak_herd
+
bucardo add table all --db=keycloak1 --herd=keycloak_herd
  
 
Здесь нужно заострить внимание на Primary Key. Bucardo, похоже, не работает с таблицами без первичных ключей. Синк сделать получится<br>
 
Здесь нужно заострить внимание на Primary Key. Bucardo, похоже, не работает с таблицами без первичных ключей. Синк сделать получится<br>
 
Удаляем из обработки таблицу без Primary Key
 
Удаляем из обработки таблицу без Primary Key
 
  bucardo remove table public.databasechangelog
 
  bucardo remove table public.databasechangelog
 +
  
 
Проверяем
 
Проверяем
 
  bucardo list table
 
  bucardo list table
 
  bucardo list herd
 
  bucardo list herd
 
Удаление
 
bucardo remove table all
 
 
  
  
 +
Удаление таблиц
 +
bucardo remove table all
  
  
 +
Добавляем последовательности, если есть, в кейклоке не было
 +
bucardo add sequence all --db=keycloak1 --herd=keycloak_herd
  
  
 +
Удаление
 +
bucardo remove sequence all
  
  
 +
Создаем репликационную группу. Здесь указываем базу которая будет источником, а которая реципиентом данных, source здесь тот, кто работает и как источник и как реципиент, а target — только реципиент.
 +
bucardo add dbgroup keycloak_servers
  
 +
для MASTER<->MASTER
 +
bucardo add dbgroup keycloak_servers keycloak1:source
 +
bucardo add dbgroup keycloak_servers keycloak2:source
  
 +
для MASTER-SLAVE
 +
bucardo add dbgroup keycloak_servers rkeycloak1:source
 +
bucardo add dbgroup keycloak_servers keycloak2:target
  
  

Версия 13:37, 31 марта 2022

Репликация 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


Добавляем последовательности, если есть, в кейклоке не было

bucardo add sequence all --db=keycloak1 --herd=keycloak_herd


Удаление

bucardo remove sequence all


Создаем репликационную группу. Здесь указываем базу которая будет источником, а которая реципиентом данных, source здесь тот, кто работает и как источник и как реципиент, а target — только реципиент.

bucardo add dbgroup keycloak_servers

для MASTER<->MASTER

bucardo add dbgroup keycloak_servers keycloak1:source
bucardo add dbgroup keycloak_servers keycloak2:source

для MASTER-SLAVE

bucardo add dbgroup keycloak_servers rkeycloak1:source
bucardo add dbgroup keycloak_servers keycloak2:target





Другими словами, можно почитать здесь: https://itnan.ru/post.php?c=1&p=327674
http://www.zaweel.ru/2016/07/postgresql_22.html#bucardo