database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9794 게시물 읽기
No. 9794
PostgreSQL, pgpool2, failover관련 질문드립니다.
작성자
김솔지(solji)
작성일
2017-04-26 15:17
조회수
8,343

안녕하세요.

 

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'

 

 

 

 

 

 

이 글에 대한 댓글이 총 3건 있습니다.

pgpool 서버의 로그 메시지를 좀 더 자세히 볼 수 있도록 설정해서 살펴보면 뭔가 보이지 않을까요?

 

김상기(ioseph)님이 2017-04-26 17:30에 작성한 댓글입니다.

네 로그쪽에 제가 설정한 내용들이 나오는거 말고는 ERROR가 존재하지는 않았었는데요, 더 자세히 봐바야겠어요!

혹시 위의 설정들이 잘못되거나 추가로 Online Recovery와 같은 설정 등등이 필요한 사항은 없는지 궁금합니다

solji님이 2017-04-26 17:52에 작성한 댓글입니다. Edit

pgpool 쓸 때 기억해야 할 것은

pgpool 서버 기준으로 한 노드가 중지되어 그 노드를 pgpool 관리 노드에서 뺏고,

그 빠진 노드가 다시 실행되었다고 해서, 자동으로 pgpool 서버가 추가하지 않습니다.

(자동으로 추가하는 기능이 있는지는 모르겠네요)

그래서, pcp_node_info 명령으로 각 노드들의 상태를 살펴봤을 때, 모두 up 상태여야지, failover가 잘 작동할겝니다.

그렇지 않다면, 실재 노드는 실행중인데, pgpool은 down 상태로 알고 있다면, pcp_attech_node 명령으로 pgpool 서버가 그 노드를 관리하도록 지정해 주어야 합니다.

김상기(ioseph)님이 2017-04-27 12:28에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9807PostgresSql to TIbero DBLINK [1]
김상준
2017-05-11
7533
9806큰따옴표 저장시.. 오류 [2]
따옴주스
2017-05-11
7561
9795DB의 table에 시간정보 저장할때 질문입니다. [3]
postgres
2017-04-27
6693
9794PostgreSQL, pgpool2, failover관련 질문드립니다. [3]
김솔지
2017-04-26
8343
9793work_mem, shared_buffers 설정 값 문의드립니다. [1]
김민재
2017-04-25
6896
9792postgres 파라미터 설정 shared_preload_libraries [1]
postgres
2017-04-24
7234
9790(해결완료)어제 백업관련 장애 여쭤본것입니다..(김상기님ㅜㅜ)
검콤이
2017-04-19
6799
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다