2016-09-07 16 views
0

Postgresql 및 Pgpool II 설치가 처음입니다. Pgpool과 Repmgr을 사용하여 PostgreSQL HA /로드 밸런싱을 구성했습니다.실패한 postgresql 마스터 노드의 자동 복구가 pgpool II에서 작동하지 않습니다.

The setup consist of 3 nodes and verison of Application and OS is as mentioned below: 
**Pgpool node** => 192.168.0.4, **Postgresql Nodes** => 192.168.0.6, 192.168.0.7 
**OS version** => CentOS 6.8 (On all the 3 nodes) 
**Pgpool II version** => pgpool-II version 3.5.0 (ekieboshi). 
**Postgresql Version** => PostgreSQL 9.4.8 
**Repmgr Version** => repmgr 3.1.3 (PostgreSQL 9.4.8) 

나는 설정을 수행 할 link을 따랐다.

마스터 노드를 종료하면 장애 조치가 성공적으로 수행되고 슬레이브 노드가 새 마스터 노드로 사용됩니다.
장애 조치 후에 장애가 발생한 노드를 수동으로 복구하고 새 마스터 노드와 동기화해야합니다.

복구 프로세스를 자동화하고 싶습니다.

pgpool 노드에 pgpool.conf 파일 매개 변수 을 recovery_1st_stage_command이 포함되어 있습니다. 소스를 온라인으로 검색 한 결과, "recovery_1st_stage_command"을 Pgpool 노드의 pgpool.conf 파일에 설정해야합니다.

recovery_1st_stage_command = 'basebackup.sh'을 설정했습니다. 내가 데이터 디렉토리 '/var/lib/pgsql/9.4/data'에서 PostgreSQL의 노드 모두에서 스크립트 'basebackup.sh' 파일에 놓여있다.

또한 에 'pgpool_remote_start'스크립트를 데이터베이스 노드 '/var/lib/pgsql/9.4/data'아래에 두었습니다.

또한 데이터베이스 노드 모두에서 pgpool 확장자 pgpool_recovery와 pgpool_adm을 만들었습니다.

마스터 노드가 중지되면 장애 조치가 발생하지만 'basebackup.sh'복구 스크립트가 실행되지 않습니다.
pgpool 로그를 확인하고 디버그 수준을 활성화했습니다. 여전히 스크립트가 실행되었는지 여부를 찾을 수 없습니다.

실패한 노드의 자동 온라인 복구를 도와주세요. 나와 사용하는 스크립트를 찾으십시오.

basebackup.sh

#!/bin/bash 
 
# first stage recovery 
 
# $1 datadir 
 
# $2 desthost 
 
# $3 destdir 
 

 
#as I'm using repmgr it's not necessary for me to know datadir(master) $1 
 
RECOVERY_NODE=$2 
 
CLUSTER_PATH=$3 
 
#repmgr needs to know the master's ip 
 
MASTERNODE=`/sbin/ifconfig eth0 | grep inet | awk '{print $2}' | sed 's/addr://'` 
 

 
cmd1=`ssh [email protected]$RECOVERY_NODE "repmgr -D $CLUSTER_PATH --force standby clone $MASTERNODE"` 
 
echo $cmd1

pgpool_remote_start 스크립트.

#! /bin/sh 
 

 
if [ $# -ne 2 ] 
 
then 
 
    echo "pgpool_remote_start remote_host remote_datadir" 
 
    exit 1 
 
fi 
 

 
DEST=$1 
 
DESTDIR=$2 
 
PGCTL=/usr/pgsql-9.4/bin/pg_ctl 
 

 
ssh -T $DEST $PGCTL -w -D $DESTDIR start 2>/dev/null 1>/dev/null < /dev/null &

감사합니다.

+0

나는 장애 조치 후, 대기 노드가 성공적으로 새 마스터 서버로 승격되는 것을 발견했다 (컴퓨터가 응답하지 않는 같은) 마스터와 진짜 문제가있는 경우입니다. 그리고 지금, 나는 ** Pgpool ** 노드에서 수동으로 ** pcp_recovery_node ** 명령을 실행해야합니다. 이 명령은 새 마스터 서버의 ** basebackup.sh ** 스크립트를 실행하고 성공적으로 실패한 노드를 복구하고 클러스터에 노드를 결합한다. **이 pcp_recovery_node 명령 execuiton **을 자동화하려고합니다. – yravi104

답변

0

나는 이것이 설계된 것이라고 생각합니다. 마스터가 실패하면 장애 조치가 발생하여 노예가 승격됩니다. 그러나 오래된 마스터는 자동으로 슬레이브로 복구되지 않습니다.반면에, 일반적으로 장애 조치 스크립트는 종료에 영원히 실패한 마스터를 시도하고 다시 시작을 해제 (아마도 노드가 다운 가능하면 연결할 수 없습니다)이 좌우 분열을 피하기 위해.

당신이 정말로 다음 슬레이브가 승진 된 후에는 이전 마스터에 pcp_recovery 작업을 할 것 같은 방법으로 장애 조치 스크립트를 수정할 수 있다고합니다

. 그러나 당신이하고 사실에 다음 무엇은 전환이 단계의 일련의 스크립트되어야한다 ...입니다. 장애 조치는