본문 바로가기
PostgreSQL

pgpool-II(3) | pgpool-II 설치 및 기본 구성 (pgpool-II Installation and Basic Configuration)

by 울라불라오미짱 2023. 6. 16.
반응형

이번 포스트에서는 pgpool-II을 rpm을 이용하여 설치해보고 설치되는 파일과 pgpool-II 파라미터 외에 설정해야 할 부분들을 정리하겠습니다! 두 개의 노드로 primary 와 standby 를 설정 하여 구성할 것이기 때문에 두 대의 서버를 준비했습니다.

pgpool-II 설치

사전 요구 환경

  • 두 대의 서버에 PostgreSQL 설치
  • HA 관리 기능을 실습하기 위해 Streaming Replication 상태
  primary (node 0)  standby (node 1)
IP 192.168.40.133 192.168.40.134

pgpool-II RPM 설치 (root : node0, node1)

yum install -y <https://www.pgpool.net/yum/rpms/4.3/redhat/rhel-7-x86_64/pgpool-II-pg14-4.3.3-1pgdg.rhel7.x86_64.rpm>
yum install -y <https://www.pgpool.net/yum/rpms/4.3/redhat/rhel-7-x86_64/pgpool-II-pg14-debuginfo-4.3.3-1pgdg.rhel7.x86_64.rpm>
yum install -y <https://www.pgpool.net/yum/rpms/4.3/redhat/rhel-7-x86_64/pgpool-II-pg14-extensions-4.3.3-1pgdg.rhel7.x86_64.rpm>

pgpool-II 구성

config 파일 수정 외에 구성에 필요한 부분들 입니다. 실행해야하는 OS 유저나 서버를 표기해놨으니 천천히 순서대로 따라오세요! 

pgpool-II 디렉토리 권한 변경 (root : node0, node1)

pgpool-II 이 설치되면 소유자가 root입니다. 저는 postgresql의 접속 유저인 test 유저로 소유 권한을 변경 해주도록 하겠습니다.

chown -R test:test /etc/pgpool-II

pgpool_status 파일 옵션 수정 (root : node0, node1)

pgpool-II을 시작할 때 pgpool_status라는 파일을 읽으며 연결된 서버의 상태를 읽습니다. 상태가 최신 상태가 아닐 수 있으므로 시작할 때 이 파일을 읽지 않고 시작하게 하는 옵션을 적어줍니다.

vi /etc/sysconfig/pgpool
OPTS=" -D -n"

vip 관리를 위한 sudo 설정 (root : node0, node1)

pgpool-II 에는 vip 라는 개념이 있습니다. 각 노드에 vip를 올렸다가 내렸다가 하려면 sudo 권한이 있어야 ip 커맨드를 쓸 수 있어서 sudo 권한 설정을 해주어야합니다.

visudo -f /etc/sudoers
…
test ALL=NOPASSWD: /sbin/ip 
test ALL=NOPASSWD: /usr/sbin/arping
…

pgpool-II service 설정 (root : node0, node1)

서비스를 시작할 OS 유저와 그룹을 지정해줍니다.

systemctl enable pgpool
vi /etc/systemd/system/multi-user.target.wants/pgpool.service
...
User=test
Group=test
...
systemctl daemon-reload

pgpool-II log 디렉토리 생성 및 확인 (test : node0, node1)

pgpool 로그가 저장될 디렉토리를 생성 해 줍니다.

mkdir /test/pg/14/log/pgpool
ls -al /test/pg/14/log
total 4
drwxr-xr-x. 4 test test   34 Jun  9 10:41 .
drwxr-xr-x. 6 test test   58 Jun  5 03:11 ..
drwxr-xr-x. 2 test test 4096 Jun  9 00:00 pg_log
drwxrwxr-x. 2 test test    6 Jun  9 10:41 pgpool

노드 ID 지정 (test : node0, node1)

pgpool 의 watchdog이 각 노드를 구별 하려면 노드 ID가 설정 되어 있어야합니다. primary 노드는 0번, standby 노드는 1번으로 지정합니다.

vi /etc/pgpool-II/pgpool_node_id
#primary
0

#standby
1

SSH 설정 (root/test : node0, node1)

auto failover 및 online recovery 를 사용하려면 각 node 의 사용자가 암호 없이 ssh 접속이 가능해야합니다. 각 노드에 root 계정과 test계정의 SSH 설정을 해보도록 하겠습니다.

→ SSH 설정을 위해 test 계정의 패스워드를 설정해 주어야 합니다.

mkdir ~/.ssh 
chmod 700 ~/.ssh 
cd ~/.ssh 
ssh-keygen -t rsa
ssh-copy-id -i id_rsa.pub test@192.168.40.133
ssh-copy-id -i id_rsa.pub test@192.168.40.134
ssh test@192.168.40.133
ssh test@192.168.40.134

여기서 SSH 오류가 나시는 분들이 많을 텐데 그 내용은 따로 다뤄보겠습니다!

pcp.conf 파일 작성 (test : node0, node1)

pcp 커맨드로 pgpool-II 을 관리할 수 있는데 이때 사용할 pcp유저와 패스워드를 입력합니다. 이 패스워드는 어떤 패스워드라도 상관 없으며, 커맨드를 사용할 때 입력하는 패스워드와 이 파일안에 있는 패스워드의 비교용이므로 원하시는 패스워드를 입력하면 됩니다.

#echo 'test:'`pg_md5 [PCP PASSWORD]` >>/etc/pgpool-II/pcp.conf
echo 'test:'`pg_md5 1234` >>/etc/pgpool-II/pcp.conf
cat /etc/pgpool-II/pcp.conf
...
# be ignored. Again, no spaces or tabs allowed before '#'.

# USERID:MD5PASSWD
test:81dc9bdb52d04dc20036dbd8313ed055

.pgpass 파일 생성 (test : node0, node1)

streaming replication 및 online recovery를 하려면 데이터베이스에 암호 없이 접속할 수 있어야합니다. PostgreSQL 은 암호 없이 데이터베이스 접속을 위한 .pgpass 파일을 제공합니다. 기본적으로 사용자 홈 디렉토리에 생성해야하지만 다른 디렉토리에 생성할 경우, bash_profile에 path를 입력하여 지정할 수 있습니다.

vi ~/.pgpass

보통 .pgpass 파일의 양식은 다음과 같습니다. ( PASSWORD 를 제외한 모든 부분은 와일드카드(*) 사용 가능합니다!)

IP : PORT : DATABASE NAME : USER NAME : PASSWORD

[Primary IP]:5432:postgres:postgres: [PASSWORD]
[Standby IP]:5432:postgres:postgres:[PASSWORD]
[Primary IP]:5432:postgres:repluser:[PASSWORD]
[Standby IP]:5432:postgres:repluser:[PASSWORD]

저는 와일드 카드를 사용하여 다음과 같이 작성해 주도록 하겠습니다.

*:*:*:*:password

그리고 파일권한을 600으로 설정해줍니다.

chmod 600 ~/.pgpass

.pcppass 파일 생성 (test : node0, node1)

pgpool-II 에서 지원하는 기능 중에 pcp 커맨드를 직접 실행해야되는 기능이 있습니다.(예 : follow_primary.sh 실행) pcp 커맨드를 패스워드를 입력하지 않고 직접 실행해야 하므로 각 pgpool-II 사용자의 홈 디렉토리에 .pcppass 파일을 생성해야합니다.

echo '/var/run/test:9898:test:1234' > ~/.pcppass

그리고 파일권한을 600으로 설정해줍니다.

chmod 600 ~/.pcppass
cat ~/.pcppass
/var/run/test:9898:test:1234

VIP 설정

pgpool-II 은 VIP(Virtual IP) 를 통해 노드에 장애가 났을 때 관리합니다. 저는 가상환경에서 테스트 해보기 때문에! 그냥 임의로 아무 IP를 VIP로 이용했습니다.

sudo ip addr add 192.168.40.200/24 dev ens33 label ens33:0

ip addr 커맨드를 이용해 VIP가 정상적으로 올라왔는지 확인합니다.

ip addr
inet 192.168.40.133/24 brd 192.168.40.255 scope global noprefixroute dynamic ens33
       valid_lft 1405sec preferred_lft 1405sec
    inet 192.168.40.200/24 scope global secondary ens33:0

 

 

 

이렇게 하면 기본적인 구성은 완료 되었고, 다음 포스트에서는 파라미터를 PostgreSQL 서버에 맞게 변경하여 pgpool-II 과 연결해보도록 하겠습니다 !!

반응형