Я следую этому руководству, чтобы настроить лабораторию для postgres HA
Я точно следую руководству (в моем случае меняю ip-адрес), в конце концов, все работает, хотя на сервере postgres 1
Но когда дойдет до сервера postgres 2 patroni.yml
настроить
В руководстве сказано, что на обоих серверах postgres одинаковые patroni.yml
установки, но при перезапуске patroni service
Эта проблема произошла на сервере1
quanlm@DB1:~$ sudo service patroni status
● patroni.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/etc/systemd/system/patroni.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2019-11-12 07:35:33 UTC; 14min ago
Main PID: 411 (patroni)
Tasks: 12
Memory: 77.6M
CPU: 4.041s
CGroup: /system.slice/patroni.service
├─411 /usr/bin/python3 /usr/local/bin/patroni /etc/patroni.yml
├─431 postgres -D /data/patroni --config-file=/data/patroni/postgresql.conf --listen_addresses=192.168.122.77 --max_prepared_tran
├─435 postgres: postgres: checkpointer process
├─436 postgres: postgres: writer process
├─439 postgres: postgres: stats collector process
├─447 postgres: postgres: postgres postgres 192.168.122.77(49984) idle
├─455 postgres: postgres: wal writer process
└─456 postgres: postgres: autovacuum launcher process
Nov 12 07:49:28 DB1 patroni[411]: 2019-11-12 07:49:28,533 INFO: no action. i am the leader with the lock
Nov 12 07:49:38 DB1 patroni[411]: 2019-11-12 07:49:38,459 INFO: Lock owner: postgresql0; I am postgresql0
Nov 12 07:49:38 DB1 patroni[411]: 2019-11-12 07:49:38,536 INFO: no action. i am the leader with the lock
Nov 12 07:49:48 DB1 patroni[411]: 2019-11-12 07:49:48,459 INFO: Lock owner: postgresql0; I am postgresql0
Nov 12 07:49:48 DB1 patroni[411]: 2019-11-12 07:49:48,544 INFO: no action. i am the leader with the lock
Nov 12 07:49:58 DB1 patroni[411]: 2019-11-12 07:49:58,458 INFO: Lock owner: postgresql0; I am postgresql0
Nov 12 07:49:58 DB1 patroni[411]: 2019-11-12 07:49:58,548 INFO: no action. i am the leader with the lock
Nov 12 07:50:08 DB1 patroni[411]: 2019-11-12 07:50:08,457 INFO: Lock owner: postgresql0; I am postgresql0
Nov 12 07:50:08 DB1 patroni[411]: 2019-11-12 07:50:08,539 INFO: no action. i am the leader with the lock
Nov 12 07:50:19 DB1 patroni[411]: 2019-11-12 07:50:19,949 INFO: acquired session lock as a leader
Да, сервер 1 был в порядке, но на сервере 2
quanlm@DB2:~$ sudo service patroni status
● patroni.service - Runners to orchestrate a high-availability PostgreSQL
Loaded: loaded (/etc/systemd/system/patroni.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2019-11-12 07:50:02 UTC; 2s ago
Process: 9514 ExecStart=/usr/local/bin/patroni /etc/patroni.yml (code=exited, status=1/FAILURE)
Main PID: 9514 (code=exited, status=1/FAILURE)
Nov 12 07:50:02 DB2 patroni[9514]: File "/usr/lib/python3.5/socketserver.py", line 440, in __init__
Nov 12 07:50:02 DB2 patroni[9514]: self.server_bind()
Nov 12 07:50:02 DB2 patroni[9514]: File "/usr/lib/python3.5/http/server.py", line 138, in server_bind
Nov 12 07:50:02 DB2 patroni[9514]: socketserver.TCPServer.server_bind(self)
Nov 12 07:50:02 DB2 patroni[9514]: File "/usr/lib/python3.5/socketserver.py", line 454, in server_bind
Nov 12 07:50:02 DB2 patroni[9514]: self.socket.bind(self.server_address)
Nov 12 07:50:02 DB2 patroni[9514]: OSError: [Errno 99] Cannot assign requested address
Nov 12 07:50:02 DB2 systemd[1]: patroni.service: Main process exited, code=exited, status=1/FAILURE
Nov 12 07:50:02 DB2 systemd[1]: patroni.service: Unit entered failed state.
Nov 12 07:50:02 DB2 systemd[1]: patroni.service: Failed with result 'exit-code'.
В конце концов, он не работает.
Я разрешил удаленное подключение для обоих серверов, отредактировав listen_addresses = '*'
на postgresql.conf
и
host all all 0.0.0.0/0 md5
на pg_hba.conf
Поэтому, когда HAproxy начинает работать, когда 1-й не работает, 2-й сервер не запускается.
Проблемы наверняка на patroni
на сервере 2 но как исправить?
В противном случае, есть ли способ добраться до сервера postgresql HA?
P / s: настройки брандмауэра
quanlm@DB1:~$ sudo ufw status
Status: inactive
quanlm@DB1:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
quanlm@DB2:~$ sudo ufw status
Status: inactive
quanlm@DB2:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Я никогда не использовал Patroni, но в журнале довольно четко указано об ошибке:
OSError: [Errno 99] Cannot assign requested address
Не уверен в используемой архитектуре, но если вы настроили какой-то «плавающий IP-адрес», который клиенты используют для подключения, тогда этот IP-адрес назначается только одному из ваших узлов. Если вы хотите, чтобы Patroni использовал этот адрес и на втором узле, один из способов решения этой проблемы - разрешить привязку к «нелокальным» IP-адресам (который по умолчанию отключен, что приводит к указанной выше ошибке).
Для этого установите
net.ipv4.ip_nonlocal_bind = 1
через sysctl
.
(Обратите внимание: как написано, я никогда не использовал Patroni. Вы должны сами проверить, имеет ли то, что я написал, смысл и подходит ли это вашей среде.)
Из журнала похоже, что вам нужно выполнить на втором сервере:
# systemctl enable patroni.service
# systemctl start patroni.service
Я сделал вывод, потому что в сообщении об ошибке написано, что он отключен. (Я много использую Postgres, но еще не пробовал patroni.)