안녕하세요,
지난번에 M-S Streaming Replication 구성완료 하고, 실시간 복제됨을 확인하였습니다.
현재 pgpool2를 구성하여 M가 down되면 S가 Master가 될수 있도록 pgpool2에서 제공하는 Failover 기능을 구성하였습니다.
하지만, Failover 기능이 계속해서 되고 있지 않는 상태여서 이렇게 질문드립니다.
아래와 같이 설정하였습니다.
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 Make sure you set enable_pool_hba = on -->pool_hba.conf 파일을 사용한 인증을 하겠다는 것.
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
: /etc/pgpool2/pool_passwd.conf 생기고 안에 md5dssdfsfhsdjfsdf...로 되어있는거 확인.
< FAILOVER 설정 >
1. STANDBY 서버.
: /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'
2. PGPOOL2 서버.
① failover.sh 생성.
: /etc/pgpgool/failover.sh 생성 및 chmod 777 권한 부여.
: 내용> ssh 10.10.0.140 "touch /tmp/postgresql.trigger.5432" > /tmp/failover.log 2>&1
② failover 설정. ( /etc/pgpool2/pgpool.conf )
0> listen_address = 'localhost' --> '*'
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_period보다 짧아야 함. 상태 점검 timeout 값.
health_check_period = 0 --> 15
health_check_timeout = 20 --> 10
health_check_user = 'nobody' --> 'postgres'
health_check_max_retries = 0 --> 3
health_check_retry_delay = 1
3> Master / Slave Mode.
: load_balance_mode = off --> on.
: master_slave_mode = off --> on
master_slave_sub_mode = 'slony' ---> 'stream'으로 변경 : postgres에서 제공하는 streaming replication 기능 쓰려면 변경해주어야 함.
: sr_check_period = 0 --> 10 ---> streaming replication 지연 시간을 체크. default 0이면, 복제 검사를 체크 안한 다는 뜻.
sr_check_user = 'nobody' --> 'postgres'
위와 같이 설정해서 pgpool2 에서 실행했는데, 다음과 같은 로그가 보이고 있습니다.
1. s_do_auth: expecting R got E.
2. make_persistent_db_connection: s_do_auth_failed.
3. failover_handler: no valid DB node found.
위에 대해서 리서치 해봤는데, 정상적으로 Health_check를 못하고 있는 상태일뿐, 따로 어떤식으로 해결해야할지 답이 안나와서 막막한 상태입니다.
인증이 잘못되어있는지 postgres를 다시 세팅하였지만, 동일합니다..
고수님들 답변 부탁드립니다.
|