세 개의 노드로 Postgresql-9.4 High Availability (HA)
설치해 보세요 RHEL7
. 세 노드 모두에서 그에 따라 설치 postgresql
, 업데이트 postgresql.conf
및 pg_hba.conf
파일을 설치합니다. 모든 설정을 완료한 후 마스터 서버에서 check 명령어를 이용하여 동기화된 스트리밍 복제를 검증해 보세요.
select * from pg_stat_replication;
그것은 돌아온다
postgres=# select * from pg_stat_replication;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_location | write_
location | flush_location | replay_location | sync_priority | sync_state
-----+----------+---------+------------------+-------------+-----------------+-------------+---------------+--------------+-------+---------------+-------
---------+----------------+-----------------+---------------+------------
(0 rows)
이는 복사가 없음을 나타냅니다. postgresql 로그 파일을 살펴보니 대기 노드에서 기본 노드로의 연결이 설정되지 않은 것을 확인했습니다. 세 노드 모두의 로그 파일은 다음과 같습니다.
노드 0:
FATAL: no pg_hba.conf entry for replication connection from host "x.x.x.x (node1)", user "postgres", SSL off
FATAL: no pg_hba.conf entry for replication connection from host "x.x.x.x (node2)", user "postgres", SSL off
노드 1 및 노드 2:
FATAL: could not connect to the primary server:
FATAL: no pg_hba.conf entry for replication connection from host "x.x.x.x (node0)", user "postgres", SSL off
연결을 확인하기 위해 세 노드 모두에서 iptables를 비활성화했습니다. 다른 모든 노드에서/로 ping이 가능하며, 슬레이브에서 마스터로의 텔넷은 잘 작동하지만, 마스터에서 슬레이브로의 텔넷은 작동하지 않습니다. 왜 이런 일이 발생하는지 잘 모르겠습니다(iptables 서비스가 중지되었음에도 불구하고).
답변1
마스터 노드(노드 0): 파일을 업데이트 pg_hba.conf
하고 postgres
데이터베이스에 대한 (사용자) 액세스를 추가합니다.
대기 노드(노드 1 및 노드 2): 기본 노드에 대한 연결을 허용하도록 비활성화 iptables
하거나 구성합니다 .firewall
/etc/sysconfig/iptables에 다음 줄을 추가하고 재부팅합니다.
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432(port) -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
이 솔루션은 내 문제를 해결했습니다.