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 9547 게시물 읽기
No. 9547
pgpool-II 구성중에 질문드립니다.
작성자
한승현
작성일
2015-04-28 17:41ⓒ
2015-04-28 17:41ⓜ
조회수
14,591

안녕하세요.

요즘 우분투 위에 Nginx + Rails + Postgresql 올라간 서버를 신규 서버의 CentOS로 이관중에 있습니다.

올라간 Application도 많고 이중화도 구성하려고 하니 난관이 많습니다.

그래서 구성에 도움좀 받고자 질문드립니다.

 

일단 환경은 이렇습니다.

Postgresql : 9.4.1

pgpool-II : 3.4.2

Server #1 : 192.168.0.171

Server #2 : 192.168.0.172

 

목적은 서버당 WEB + DB 구성해서 WEB은 L4로 DB는 pgpool-II로 이중화를 구성하려고 합니다.

1번 서버가 다운이 되어도 2번 서버에서 모든 서비스가 가능토록 하려 합니다.

 

일단 DB단에서 Replication은 설정해서 sync가 되는건 확인했습니다.

그리고 pgpool를 설치하고 설정하였습니다.

- Master : 1번서버 (Write)

- Slave1 : 1번서버 (Read)

- Slave2 : 2번서버 (Read)

그래서 1번서버가 Master와 Slave1 역할을 같이 하게 설정이 하려고하여 아래와 같이 넣었습니다.

# vi pgpool.conf

backend_hostname0 = '192.168.0.171'
                                   # Host name or IP address to connect to for backend 0
backend_port0 = 5432
                                   # Port number for backend 0
backend_weight0 = 0.2
                                   # Weight for backend 0 (only in load balancing mode)
backend_data_directory0 = '/var/lib/pgsql/9.4/data'
                                   # Data directory for backend 0
backend_flag0 = 'ALLOW_TO_FAILOVER'
                                   # Controls various backend behavior
                                   # ALLOW_TO_FAILOVER or DISALLOW_TO_FAILOVER


backend_hostname1 = '192.168.9.171'
backend_port1 = 54321
backend_weight1 = 5
backend_data_directory1 = '/var/lib/pgsql/9.4/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = '192.168.9.172'
backend_port1 = 54322
backend_weight1 = 5
backend_data_directory1 = '/var/lib/pgsql/9.4/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'

 

여기서 질문입니다.

1. 제가 처음에 말한 목적에 맞게 제대로 진행하고 있는지 궁금합니다.

2. 현재 1번 서버에만 pgpool을 설치했는데 2번 서버에는 필요 없나요??

    1번서버가 장애 (DB가 아닌 서버장애)가 나면 pgpool도 죽어서 DB pool 역활을 못하게 되어 2번 서버가 pgpool을 해야 될거 같은데...

     검색해봐도 이 내용은 찾기가 힘드네요...ㅜㅡ

 

 

 

 

 

 

 

 

 

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

pgpool은 rails가 돌아가고 있는 호스트에서 운영하는 것이 좋습니다.

 

고가용성을 고려한 설계기법에는 몇가지가 있는데,

일반적으로 OS에서 제공하는 솔루션으로 고가용성을 고려할 경우는 DB 쌍방간 구축으로 끋나는데,

그 방식이 아니라, pgpool 처럼 제3자가 고가용성 기능을 담당하는 경우는 그 프로그램을 DB가 운영되고 있는 호스트 밖에 둡니다.

이 때 고려해야 할 것은 pgpool 데몬이 돌아가고 있는 호스트의 장애시 pgpool 의 고가용성을 고려해야합니다.

즉, 이렇게 고민하다 보면, rails가 돌고 있는 모든 호스트에서 pgpool이 실행되어야 한다는 결론이 나오죠.

 

김상기(ioseph)님이 2015-04-29 11:50에 작성한 댓글입니다.
기나긴 삽질 끝에 pgpool을 운영하고 있는 1인입니다.
1. 제가 처음에 말한 목적에 맞게 제대로 진행하고 있는지 궁금합니다.
-- pgpool.conf 파일에 backend 정보는 pgpool 호스트가 아닌 postgresql DB 정보가 필요합니다.
2개의 DB호스트를 운영할 계획이시라면 각각의 IP와 port 및 data_directory 를 기재하시고 backend_weight는 load balance 모드를 활성화 시켰을 경우
읽기 트랜잭션에 대한 가중치를 상대비로 두 합이 1이 되도록 설정하시면 됩니다.
 
2. 현재 1번 서버에만 pgpool을 설치했는데 2번 서버에는 필요 없나요??
김상기 님의 말씀대로 pgpool 데몬이 운영되고 있는 호스트의 장애를 대비하여  DB가 운영되는 호스트 밖에 두는 것이 가장 깔끔하지만 상황이 여의치 않으실때는
두개의 DB 호스트에 각각의 pgpool 설치하고 watch dog 모듈을 이용하여 상호간 pgpool 상태를 체크하는 방법을 선택할 수 있습니다.
경험상 테스트 및 운영 결과 물리구성 자체에 대한 이슈는 없었습니다.
 
pgpool 을 선택함에 있어 개인적인 경험에서 비롯된 몇가지 중요한 고려요소를 공유하지면
1. (pgpool 3.2.1 기준) 운영중에 pg_terminate_backend 또는 강제 프로세스 kill 시 failover 트리거가 작동합니다. 이는 현재 생성되어 있는 backend process 를 강제 refork 하는 과정을 수반하며, AP입장에서는 DB 커넥션을  다시 맺어야 하며 TWO-NODE 운영시 엔지니어 입장에선 HA복구를 수행해야 하는 결과를 초래합니다. 결국엔 lock 세션 처리를 위해 pgpool 데몬을 내려야 하는 (서비스 담당팀 입장에선 어처구니 없는) 상황이 발생합니다.
 
2. load balacing 기능을 활용코자 하신다면 데이터 쓰기를 수반하는 function에 대해 관리를 해주셔야 합니다. replication의 메카니즘 상 데이터 쓰기를 포함하는 트랜잭션은 Master Node 에서만 처리되어야 하기 때문에
"이러이러한 함수는 Master에서 처리되어야 해" 또는 "저러저러한 함수를 제외한 나머지 함수는 Master에서 처리되어야 해" 라는 식으로 pgpool.conf 파일상에 그 함수정보를 명시하셔야 합니다.
그렇지 않으면 Stand-by 노드의 backend process 를 통한 요청은 오류를 초래하게 됩니다.
 
글이 길어졌네요. 개인적인 결론은 다른방법(repmgr / pg bouncer 등)을 선택함이 운영자 정신건강에 유익할 거란 생각이 듭니다. ^^;
 
김민석님이 2015-05-11 11:09에 작성한 댓글입니다.
이 댓글은 2015-05-11 11:19에 마지막으로 수정되었습니다. Edit

김상기님, 김민석님 소중한 댓글 감사드립니다.

일단 pgpool 구동 후에 2번서버에서 1번서버로 pgpool 통해서 디비컨넥시 에러가 발생하여 계속 보느냐 감사인사가 늦었습니다.

저도 김민석님 의견대로 pgpool을 고수하긴 보단 다른 postgres의 다른 HA방식으로 가볼까 해서 구글링 해봤으나, 저희 환경에 딱히 맞는것이 없어 좌절하고 있었습니다.

repmgr이랑 pgbouncer 확인해보겠습니다.

좀더 시도해보고 피드백 남기겠습니다.

다시한번 감사드립니다.

한승현(ninggimi)님이 2015-05-11 14:27에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9550postgreSQL DB 용량을 제한할 수 있는지 궁금합니다. [3]
박종혁
2015-05-15
10318
9549Postgresql Query 종료 방법 문의 [3]
이성필
2015-05-14
10860
9548[해결] table create 가 안됩니다. [9]
이성필
2015-04-29
14338
9547pgpool-II 구성중에 질문드립니다. [3]
한승현
2015-04-28
14591
9546이전 까지의 누적 횟수? 구하기 쿼리 [1]
김재영
2015-04-24
10341
9545desc 권한 질문입니다. [1]
입문자
2015-04-23
9561
9544OS에 따른 DB 성능 차이? [2]
이경환
2015-04-23
10196
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다