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

Материал из megapuper
Перейти к: навигация, поиск
Строка 8: Строка 8:
 
  dnf install postgresql13-server postgresql13
 
  dnf install postgresql13-server postgresql13
 
  /usr/pgsql-13/bin/postgresql-13-setup initdb
 
  /usr/pgsql-13/bin/postgresql-13-setup initdb
 
 
Включаем автозапуск и запускаем
 
systemctl enable postgresql-13
 
systemctl start postgresql-13
 
  
  
Строка 27: Строка 22:
  
  
Устанавливаем Bucardo и необходимые пакеты
+
Включаем автозапуск и запускаем
 +
systemctl enable postgresql-13
 +
systemctl restart postgresql-13
 +
 
 +
 
 +
Устанавливаем необходимые пакеты
 
  yum install bucardo postgresql13-plperl perl-DBI perl-DBD-Pg perl-DBIx-Safe
 
  yum install bucardo postgresql13-plperl perl-DBI perl-DBD-Pg perl-DBIx-Safe
  
Строка 34: Строка 34:
 
  mkdir /var/log/bucardo
 
  mkdir /var/log/bucardo
 
  mkdir /var/run/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 '<font color=blue>DB_PASS</font>';"
 +
 +
 +
Дальнейшие действия проводим на первом хосте. Запускаем Bucardo
 +
bucardo start
 +
 +
 +
Добавляем базы данных с которыми будем работать (Главное требование для работы на нем должна быть та же схема данных что и на первом)
 +
bucardo add database keycloak1 dbname=keycloak dbhost=172.19.3.109 dbuser=bucardo dbpass=<font color=blue>DB_PASS</font>
 +
bucardo add database keycloak2 dbname=keycloak dbhost=172.19.3.110 dbuser=bucardo dbpass=<font color=blue>DB_PASS</font>
 +
 +
 +
Проверяем
 +
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)
 +
 +
 +
<nowiki>
 +
-------------------
 +
Удаление баз
 +
bucardo remove database keycloakX
 +
-------------------
 +
</nowiki>
 +
 +
 +
Добавляем таблицы которые  будем реплицировать (Важно исключить таблицы без PK)
 +
bucardo add table all --db=keycloak1 --herd=keycloak_herd
 +
 +
Здесь нужно заострить внимание на PK. Bucardo, похоже, не работает с таблицами без первичных ключей. Синк сделать получится.
 +
Удаляем из обработки таблицу без PK
 +
bucardo remove table public.databasechangelog
 +
 +
Проверяем
 +
bucardo list table
 +
bucardo list herd
 +
 +
Удаление
 +
bucardo remove table all
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  

Версия 13:32, 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 -------------------


Добавляем таблицы которые будем реплицировать (Важно исключить таблицы без PK) bucardo add table all --db=keycloak1 --herd=keycloak_herd

Здесь нужно заострить внимание на PK. Bucardo, похоже, не работает с таблицами без первичных ключей. Синк сделать получится. Удаляем из обработки таблицу без PK 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