После установки БД 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
Описанные в статье действия необходимо выполнить на обоих хостах.