После установки БД Postgres в кластере адреса прописываются в ecss_storekeeper_db. Для того, чтобы посмотреть, какие адреса прописаны в данный момент, заходим в postgres:

sudo psql -U postgres -h localhost -p 5439
Пароль пользователя postgres: postgres1


Подключиться к базе:

postgres=# \c ecss_storekeeper_db
psql (15.14 (Debian 15.14-astra.se3.1), сервер 9.4.17)
Вы подключены к базе данных "ecss_storekeeper_db" как пользователь "postgres".


Вывод списка таблиц:

ecss_storekeeper_db=# \dt bdr.*
                    Список отношений
 Схема |            Имя             |   Тип   | Владелец 
-------+----------------------------+---------+----------
 bdr   | bdr_conflict_handlers      | таблица | postgres
 bdr   | bdr_conflict_history       | таблица | postgres
 bdr   | bdr_connections            | таблица | postgres
 bdr   | bdr_global_locks           | таблица | postgres
 bdr   | bdr_nodes                  | таблица | postgres
 bdr   | bdr_queued_commands        | таблица | postgres
 bdr   | bdr_queued_drops           | таблица | postgres
 bdr   | bdr_replication_set_config | таблица | postgres
 bdr   | bdr_sequence_elections     | таблица | postgres
 bdr   | bdr_sequence_values        | таблица | postgres
 bdr   | bdr_votes                  | таблица | postgres
(11 строк)


Адреса прописаны в bdr.bdr_nodes и bdr.bdr_connections

SELECT * FROM bdr.bdr_nodes;
SELECT * FROM bdr.bdr_connections;


Задача: поменять адрес мастера на 192.168.0.81 и адрес слейва на 192.168.0.91.


bdr.bdr_nodes:

UPDATE bdr.bdr_nodes SET node_local_dsn = 'host=192.168.0.81 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'WHERE node_name = 'master_store_node_0842';
UPDATE bdr.bdr_nodes SET node_local_dsn = 'host=192.168.0.91 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1',node_init_from_dsn = 'host=192.168.0.81 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'WHERE node_name = 'slave_store_node_4942';

значения node_name берутся из предыдущей команды - SELECT * FROM bdr.bdr_nodes;


bdr.bdr_connections:

UPDATE bdr.bdr_connections SET conn_dsn = 'host=192.168.0.81 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'WHERE conn_sysid = '7678612370581352472';
UPDATE bdr.bdr_connections SET conn_dsn = 'host=192.168.0.91 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1'WHERE conn_sysid = '7678612607411490840';

значения conn_sysid берутся из предыдущей команды - SELECT * FROM bdr.bdr_connections;


Проверить, что репликация в порядке:

SELECT * FROM bdr.pg_replication_slots;

active должно быть t (true)


SELECT pg_xlog_location_diff(pg_current_xlog_location(), 'здесь_добавьте_значение_из_колонки_restart_lsn_из_предыдущей_команды') AS lag_bytes;

должно быть меньше килобайта


SELECT * FROM bdr.pg_stat_bdr;

колонки с "conflict" должны иметь значения 0.


SELECT node_name, node_status FROM bdr.bdr_nodes;

должно быть r r (ready ready)


После этого рекомендовано перезапустить контейнер ecss-postgres-bdr-ssw-postgres-container-1, посмотреть запущенные контейнеры:

sudo docker ps


Остановить:

sudo docker stop ecss-postgres-bdr-ssw-postgres-container-1


Запустить:

sudo docker start ecss-postgres-bdr-ssw-postgres-container-1


Проверить, что поднялся:

sudo docker ps


Описанные в статье действия необходимо выполнить на обоих хостах.

  • Нет меток