Установка
sudo sh -c "echo 'deb [arch=amd64] http://apt.ngn.eltex.loc/jammy/3.17 stable main extras external' > /etc/apt/sources.list.d/eltex-ecss10.list"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 33CB2B750F8BB6A5
Примечание
Перед установкой ecss-postgres-bdr-ssw в системе, в apt sources, должен быть добавлен docker для этого выполнить следующие команды:
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt upgrade
Установка вне кластера
Установка пакета ecss-postgres-bdr-ssw
sudo apt install ecss-postgres-bdr-ssw
При конфигурации пакета ecss-postgres-bdr-ssw будут заданы вопросы:
| Вопросы ecss-postgres-bdr-ssw | Ответы для одиночного сервера |
|---|---|
| Текущий IP-адрес сетевого интерфейса. | Выбрать из списка IP-адрес для работы с Postgres |
| Выберите <Да>, если пакет устанавливается на узле кластера. Установка в кластере? | No (необходимо выбрать) |
Проверка
sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4887950e2633 resistanseltd/postgres-bdr "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:5439->5432/tcp, [::]:5439->5432/tcp ecss-postgres-bdr-ssw-postgres-container-1
Установка в кластере
Установка пакета ecss-postgres-bdr-ssw
Выполняется последовательно, первым устанавливается на node работающий в режиме "Maser"
sudo apt install -y ecss-postgres-bdr-ssw
При конфигурации пакета ecss-postgres-bdr-ssw будут заданы вопросы:
| Вопросы ecss-postgres-bdr-ssw | Ответы для ecss1 (Master) |
|---|---|
| Текущий IP-адрес сетевого интерфейса. | Выбрать из списка IP-адрес для работы с Postgres |
| Установка в кластере? | Yes (значение по умолчанию) |
| Является ли этот узел мастером? | Yes (необходимо выбрать) |
sudo apt install -y ecss-postgres-bdr-ssw
При конфигурации пакета ecss-postgres-bdr-ssw будут заданы вопросы:
| Вопросы ecss-postgres-bdr-ssw | Ответы для ecss2 (Slave) |
|---|---|
| Текущий IP-адрес сетевого интерфейса. | Выбрать из списка IP-адрес для работы с Postgres |
| Установка в кластере? | Yes (значение по умолчанию) |
| Является ли этот узел мастером? | No (значение по умолчанию) |
| IP-адрес, используемый для подключения к кластеру: | Указать IP-адрес Master (ecss1) |
При установке на более чем 2 ноды
sudo apt install -y ecss-postgres-bdr-ssw
При конфигурации пакета ecss-postgres-bdr-ssw будут заданы вопросы:
| Вопросы ecss-postgres-bdr-ssw | Ответы для ecssХ (Slave) |
|---|---|
| Текущий IP-адрес сетевого интерфейса. | Выбрать из списка IP-адрес для работы с Postgres |
| Установка в кластере? | Yes (значение по умолчанию) |
| Является ли этот узел мастером? | No (значение по умолчанию) |
| IP-адрес, используемый для подключения к кластеру: | Указать IP-адрес Master (ecss1) |
Проверить корректность настройки репликации
Во время установки в директорию /srv/ecss/ecss-postgres-bdr-ssw устанавливаются скрипт postgresbdr_ssw.sh
Для проверки репликации выполнить следующие команды:
cd /srv/ecss/ecss-postgres-bdr-ssw
sudo ./postgresbdr_ssw.sh check
Вывод на хостах должен быль одинаковый
При кластере из 3 нод в выводе будет 3 строки
sudo ./postgresbdr_ssw.sh checkEnter master ip pleaseLike 10.150.150.1510.0.10.51Enter slave ip please10.0.10.52Press enter with empty passwordПросто щелкайте Enter не вводя парольq - выход из просмотра таблицы (если необходимо)таблица нод на мастере по ecss_storekeeper_dbтаблица нод на слейве по ecss_storekeeper_dbтаблица коннекций на мастер по ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1(2 rows)
таблица коннекций на слейве по ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1(2 rows)
sudo ./postgresbdr_ssw.sh checkEnter master ip pleaseLike 10.150.150.1510.0.10.51Enter slave ip please10.0.10.52Press enter with empty passwordПросто щелкайте Enter не вводя парольq - выход из просмотра таблицы (если необходимо)таблица нод на мастере по ecss_storekeeper_dbтаблица нод на слейве по ecss_storekeeper_dbтаблица коннекций на мастер по ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1(2 rows)
таблица коннекций на слейве по ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1(2 rows)
sudo ./postgresbdr_ssw.sh check[sudo] password for abf: Sorry, try again.[sudo] password for abf: Enter master ip pleaseLike 10.150.150.1510.0.10.51Enter slave ip please10.0.10.52Press enter with empty passwordПросто щелкайте Enter не вводя парольq - выход из просмотра таблицы (если необходимо)таблица нод на мастере по ecss_storekeeper_db node_sysid | node_local_dsn | node_init_from_dsn ---------------------+---------------------------------------------------------------------------------------+-------------------- 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 | (1 row)
таблица нод на слейве по ecss_storekeeper_dbpsql: error: connection to server at "10.0.10.52", port 5439 failed: Connection refused Is the server running on that host and accepting TCP/IP connections?таблица коннекций на мастер по ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1(1 row)
таблица коннекций на слейве по ecss_storekeeper_dbpsql: error: connection to server at "10.0.10.52", port 5439 failed: Connection refused Is the server running on that host and accepting TCP/IP connections?
sudo ./postgresbdr_ssw.sh checkEnter master ip pleaseLike 10.150.150.1510.0.10.51Enter slave ip please10.0.10.52Press enter with empty passwordПросто щелкайте Enter не вводя парольq - выход из просмотра таблицы (если необходимо)таблица нод на мастере по ecss_storekeeper_db node_sysid | node_local_dsn | node_init_from_dsn ---------------------+---------------------------------------------------------------------------------------+-------------------- 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 | (1 row)
таблица нод на слейве по ecss_storekeeper_dbтаблица коннекций на мастер по ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1(1 row)
таблица коннекций на слейве по ecss_storekeeper_db conn_sysid | conn_dsn ---------------------+--------------------------------------------------------------------------------------- 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1(3 rows)
Удаление Postgres BDR
Удаление Postgres BDR
sudo apt remove -y ecss-postgres-bdr-ssw
При удаления, чтобы не потерять данные, остается volume контейнера (находится по пути /srv/ecss/ecss-postgres-bdr-ssw/) имя папки дополняется_дата_время, .
/srv/ecss/ecss-postgres-bdr-ssw$ lltotal 99692drwxr-xr-x 5 root root 4096 ноя 7 13:48 ./drwxr-xr-x 3 root root 4096 ноя 7 12:43 ../-rwx------ 1 root root 6529 окт 23 14:48 cluster_resolver5439.sh*-rw-r--r-- 1 root root 360 ноя 1 11:45 docker-compose.container.yml-rw-r--r-- 1 root root 102029198 окт 23 14:48 ecss_postgres_bdr.tar-rwx------ 1 root root 16657 окт 23 14:48 postgresbdr_ssw.sh*drwxr-xr-x 3 root root 4096 ноя 7 13:48 volumes/drwxr-xr-x 3 root root 4096 ноя 7 12:44 volumes_2025_11_07_13_04/
Удаление Postgres BDR с очисткой конфигурации:
sudo apt purge -y ecss-postgres-bdr-ssw
/srv/ecss/ecss-postgres-bdr-ssw$ lltotal 99692drwxr-xr-x 5 root root 4096 ноя 7 13:48 ./drwxr-xr-x 3 root root 4096 ноя 7 12:43 ../drwxr-xr-x 3 root root 4096 ноя 7 13:48 volumes_2025_11_07_13_48/drwxr-xr-x 3 root root 4096 ноя 7 12:44 volumes_2025_11_07_13_04/
sudo apt autoremove -y
Восстановления кластера
Postgres работает в режиме Multi-master Replication:
- При которой несколько узлов кластера действуют как мастера.
- Обеспечивать высокую доступность - выход одного из узлов не влияет на доступность базы данных.
BDR (Bi-Directional Replication) основан на функции логического декодирования в PostgreSQL, которая извлекает все постоянные изменения из журнала WAL (Write Ahead Log)
и переводит их в форму, специфичную для приложения (поток строк или команды SQL).