안녕하세요.
Postgres로 다음과 같이 구성하여 테스트 진행중에 해결이 계속 안되는 부분이 존재하여 이렇게 질문드립니다.
구성1: PGPOOL-II 서버 : 10.10.0.145
구성2: Master 서버 : 10.10.0.135
구성3: Slave 서버 : 10.10.0.140
먼저, Master - Slave 간의 streaming replication 까지는 hot_standby, WAL설정 등을 통해 정상적으로 복제됨을 확인 하였습니다.
그래서 이제 PGPOOL-II 서버를 구성하여 Master서버가 중지되었을때,( sudo service postgresql stop )
자동으로 Slave 서버가 failover기능을 통해 Master 서버가 되도록 구성하고 있습니다.
따라서, 다음과 같이 PGPOOL 설치 및 설정하였습니다.
< PGPOOL-II 설정 >
1. PGPOOL2 설치.
1) Pgpool Lib 설치.
: sudo apt-get install postgresql-9.3-pgpool2
2) pgpool2 설치.
: sudo apt-get install pgpool2
1. PGPOOL2 설정.
1) MASTER - STANDBY 구성.
: sudo vi /etc/pgpool2/pgpool.conf 수정.
# - Backend Connection Settings -
backend_hostname0 = '10.10.0.135'
# Host name or IP address to connect to for backend 0
backend_port0 = 5432
# Port number for backend 0
backend_weight0 = 1
# Weight for backend 0 (only in load balancing mode)
backend_data_directory0 = '/var/lib/postgresql/9.3/main/'
# Data directory for backend 0
backend_flag0 = 'ALLOW_TO_FAILOVER'
# Controls various backend behavior
# ALLOW_TO_FAILOVER or DISALLOW_TO_FAILOVER
backend_hostname1 = '10.10.0.140'
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = '/var/lib/postgresql/9.3/main/'
backend_flag1 = 'ALLOW_TO_FAILOVER'
# - Authentication -
enable_pool_hba = on
2) pgpool 인증을 위해 md5 활성화.
: sudo vi /etc/pgpool2/pool_hba.conf
host all all 10.10.0.0/24 md5
3) pgpool 계정 추가. --> 이건 언제 사용하는건지는 잘 모르겠음.
: sudo pg_md5 -f /etc/pgpool2/pgpool.conf -m -u postgres
: 비번없는 postgres로 함.
: /etc/pgpool2/pool_passwd.conf 생기고 안에 md5dssdfsfhsdjfsdf...로 되어있는거 확인.
4) pgpool 실행/정지.
: sudo pgpool -n -d > /tmp/pgpool.log 2>&1 &
: sudo pgpool stop
그리고 아래와 같이 FAILOVER 기능을 설정하였습니다.
① failover.sh 생성.
: /etc/pgpgool/failover.sh 생성 및 chmod 777 권한 부여.
: 내용> ssh -T postgres@10.10.0.140 "touch /tmp/postgresql.trigger.5432" > /tmp/failover.log 2>&1
② failover 설정. ( /etc/pgpool2/pgpool.conf )
1> failover_command = '/etc/pgpool2/failover.sh %d %P %H %R /tmp/postgresql.trigger.5432'
2> Health check(상태체크) 설정: 자동으로 failover 기능이 활성화 되도록 설정.
health_check_period = 0 --> 15
health_check_timeout = 20 --> 10
health_check_max_retries = 0 --> 3
health_check_retry_delay = 1
health_check_user = 'nobody' --> 'postgres'
3> Master / Slave Mode.
: master_slave_mode = off --> on
master_slave_sub_mode = 'slony' ---> 'stream'으로 변경 : postgres에서 제공하는 streaming replication 기능 쓰려면 변경해주어야 함.
: load_balance_mode = off --> on.
: sr_check_period = 0 --> 10 ---> streaming replication 지연 시간을 체크. default 0이면, 복제 검사를 체크 안한 다는 뜻.
sr_check_user = 'nobody' --> 'postgres'
4> recovery_user = 'nobody' --> 'postgres'
--> 이건 설정이 필요하지 않은거 같은데, 우선 해준 상태.
--> 온라인 복구는 MASTER가 어떠한 작업을 하라고 할 때 사용하는 걸로 리서치가 되서 필요없는 항목으로 추정.
위와 같이 설정하고 PGPOOL 서버의 Postgres, PGPOOL을 재시작하였습니다.
그리고 MASTER / SLAVE 의 Postgresql 을 시작하도록 설정 한 후에, 일정 시간 후에 MASTER의 Postgresql를 stop시켰습니다.
그러면 제 생각에는 PGPOOL의 failover.sh를 통해
SLAVE에 trigger파일이 생성되어야 할거 같은데, 생성이 되지 않습니다. 또한, failover관련 로그도 존재하지 않습니다.
위의 구성이 뭔가 잘못됬는지, 아님 어떠한 설정을 해야하는지 등등에 대해서 답변 부탁드립니다.. 감사합니다!
* 참고로 SLAVE 서버의 recovery.conf는 다음과 같이 구성되어있습니다.
: /var/lib/postgres/9.3/main/recovery.conf 생성 및 아래 설정으로 한 상태.
standby_mode = 'on'
primary_conninfo = 'host=10.10.0.135 port=5432 user=replicator password=passwd'
trigger_file = '/tmp/postgresql.trigger.5432'
|