ThingWorx 고가용성 > Pgpool-II와 함께 PostgreSQL HA 배포 예제 > 9. Pgpool-II 마스터 및 대기 노드에 대해 Watchdog 서비스 구성
9. Pgpool-II 마스터 및 대기 노드에 대해 Watchdog 서비스 구성
단계 1
관련 watchdog 설정 및 값을 포함하도록 각 Pgpool-II 노드에서 pgpool.conf를 편집합니다.
설정
설명
use_watchdog
on
Pgpool-II에서 watchdog을 켭니다.
wd_hostname
'10.91.9.101'
또는
'10.91.9.102'
이 watchdog의 호스트 이름 또는 IP 주소입니다.
wd_port
9000
이 watchdog의 포트 번호입니다.
delegate_IP
'10.91.9.100'
클라이언트가 Pgpool-II를 통해 PostgreSQL에 액세스하는 데 사용하는 가상 IP 주소입니다.
ifconfig_path
'/etc/pgpool2'
if_up_cmd 및 if_down_cmd 명령 또는 스크립트가 포함된 디렉터리의 절대 경로입니다.
if_up_cmd
'ifup.sh $_IP_$ <eni id of Pgpool node>'
Pgpool-II가 delegate_IP 주소를 사용하여 가상 IP 인터페이스를 실행하려고 시도하면 명령이 실행됩니다. EC2 관리 콘솔에 로그인하고 해당 Pgpool-II 인스턴스로 이동하여 Pgpool-II 노드의 eni ID를 검색할 수 있습니다. 콘솔의 설명에서 네트워크 인터페이스 엔트리를 찾고 eth0을 클릭한 다음 인터페이스 ID를 찾습니다. 이 ID를 $<eni id of Pgpool node>에 사용합니다.
if_down_cmd
ifdown.sh $_IP_$ <eni id of Pgpool node>
Pgpool-II가 delegate_IP 주소를 사용하여 가상 IP 인터페이스를 내리려고 시도하면 명령이 실행됩니다. Pgpool-II 노드의 eni ID를 가져오려면 if_up_cmd를 참조하십시오.
arping_path
'/usr/bin'
iputils-arping 설치 패키지의 경로
arping_cmd
'arping -U $_IP_$ -w 1'
IP를 확인하는 데 사용되는 arping 명령
heartbeat_destination0
'10.91.9.102'
또는
’10.91.9.101’
하트비트 검사를 수행할 IP 주소. other_pgpool_hostname0 설정의 값
heartbeat_destination_port0
9694
기본값을 사용하십시오.
heartbeat_device
'eth0'
하트비트 통신을 위한 IP 주소용 NIC 장치
other_pgpool_hostname0
'10.91.9.102'
또는
’10.91.9.101’
다른 Pgpool-II 서버 인스턴스의 IP 주소
other_pgpool_port0
5432
다른 Pgpool-II 노드가 수신하는 포트
other_wd_port0
9000
다른 Pgpool-II watchdog 기능이 수신하는 포트
단계 2
pgpool.conf 파일의 if_up_cmd 설정에 사용할 ifup.sh 스크립트를 만듭니다.
1. 스크립트를 /Etc/pgpool2 디렉터리에 배치합니다.
2. 스크립트를 PostgreSQL이 소유하며 postgres 사용자에게 속하는지 확인합니다.
3. 해당 권한이 755로 설정되었는지 확인합니다.
4. 파일에는 다음이 포함되어야 합니다.
#!/bin/bash -x
/sbin/ifconfig eth0:0 inet $1 netmask 255.255.255.0
단계 3
pgpool.conf 파일의 if_down_cmd 설정에 사용할 ifdown.sh 스크립트를 만듭니다.
1. 이 파일을 /etc/pgpool2 디렉터리에 배치합니다.
2. 스크립트를 PostgreSQL이 소유하며 postgres 사용자에게 속하는지 확인합니다.
3. 해당 권한이 755로 설정되었는지 확인합니다.
4. 파일에는 다음이 포함되어야 합니다.
#!bin/bash -x
/sbin/ifconfig eth0:0 down
단계 4
/root/.ssh 디렉터리의 각 PostgreSQL 데이터베이스 서버에 있는 PostgreSQL 사용자의 .ssh/authorized_keys 엔트리에 해당하는 ssh 공용 키를 설정합니다. 루트 사용자는 HA(watchdog 사용) Pgpool-II 프로세스를 실행하고 PostgreSQL 데이터베이스 서버 장애 조치 시 /etc/pgpool2/failover.sh 스크립트를 실행해야 합니다.
* 
장애 조치 중 키와 관련된 Permission Denied 메시지가 발생합니다.
단계 5
watchdog을 사용하여 Pgpool-II 노드를 처음 시작하기 전에 /var/log/postgresql 디렉터리에 있는 pgpool_status 파일을 정리하거나 삭제하는 것이 좋습니다. 이렇게 하면 Pgpool-II가 시작 시 pgpool.conf 파일에 있는 node0으로 구성된 PostgreSQL 데이터베이스를 사용합니다. 장애 조치가 발생하고 마스터 노드가 pgpool.conf 파일의 node0 엔트리와 일치하지 않을 경우 pgpool_status 파일이 Pgpool-II 프로세스의 시작과 중지 간에 현재 마스터를 추적하므로 해당 파일을 유지합니다.
단계 6
첫 번째 Pgpool-II 인스턴스에서 루트 사용자로 pgpool 프로세스를 시작합니다. 이 프로세스를 서비스로 시작하지 않도록 하십시오. 다음 명령을 실행합니다.
sudo su
/usr/sbin/pgpool -n -f /etc/pgpool2/pgpool.conf > ~postgres/pgpool.log
2>&1 &
단계 7
syslog에서 Pgpool-II 엔트리를 보고 watchdog 기능이 제대로 초기화되었는지 확인합니다.
more /var/log/syslog | grep pgpool
출력에 watchdog과 Pgpool-II가 성공적으로 초기화되고 시작된 것으로 나타나야 합니다.
단계 8
Pgpool-II의 새 프로세스를 실행하기 전에 이 로그를 지우려면 기록 참조를 위해 기존 syslog를 백업하고 다음 명령을 호출하는 것이 좋습니다.
> /var/log/syslog
~postgres/pgpool.log 파일에 오류 엔트리가 없는지 확인합니다. Pgpool-II 프로세스가 시작되었는지 확인합니다.
단계 9
PostgreSQL HA 섹션에 지정된 기본 구성은 pgpool.conf 파일의 num_init_children 설정에 대해 값 125를 설정합니다. "PCP:"라는 접두사가 있는 프로세스를 포함하여 상태가 "wait for connection request"인 125개의 프로세스가 있어야 합니다. pgpool-II와 watchdog이 만드는 여러 개의 다른 프로세스가 있습니다.
단계 10
인터페이스 구성(ifconfig)을 확인하여 가상 IP가 작성되었는지 확인합니다. pgpool.conf 파일의 delegate_IP 설정에 지정한 IP 주소를 사용하여 새 네트워크 인터페이스가 작성되었는지 확인합니다. 이 인터페이스는 "eth0:0"이어야 합니다.
단계 11
두 번째 Pgpool-II 서버 인스턴스에서 루트 사용자로 Pgpool-II 프로세스를 시작합니다. 이 프로세스를 서비스로 시작하지 않도록 하십시오. 이제 로그에 한 인스턴스가 마스터로 수준이 올라가고 다른 인스턴스가 성공적으로 시작된 것으로 표시되어야 합니다. 마스터는 마스터가 아닌 Pgpool-II 인스턴스로부터 등록 요청을 수락했음을 보고해야 합니다(해당 IP 주소를 통해).
단계 12
Pgpool-II 프로세스를 중지하려면 루트로 다음 명령을 사용합니다.
sudo su
/usr/sbin/pgpool --mode=immediate stop
도움이 되셨나요?