
Установка
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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4887950e2633 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 check
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press 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
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press 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 please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press 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
psql: 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_db
psql: 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 check
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press 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
sudo apt remove -y ecss-postgres-bdr-ssw |
При удаления, чтобы не потерять данные, остается volume контейнера (находится по пути /srv/ecss/ecss-postgres-bdr-ssw/) имя папки дополняется_дата_время, . /srv/ecss/ecss-postgres-bdr-ssw$ ll
total 99692
drwxr-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/
|
|
|
sudo apt purge -y ecss-postgres-bdr-ssw
|
/srv/ecss/ecss-postgres-bdr-ssw$ ll
total 99692
drwxr-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/
|
|
Восстановления кластера
Postgres работает в режиме Multi-master Replication:
- При которой несколько узлов кластера действуют как мастера.
- Обеспечивать высокую доступность - выход одного из узлов не влияет на доступность базы данных.
BDR (Bi-Directional Replication) основан на функции логического декодирования в PostgreSQL, которая извлекает все постоянные изменения из журнала WAL (Write Ahead Log)
и переводит их в форму, специфичную для приложения (поток строк или команды SQL).