이번 포스트에서는 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 과 연결해보도록 하겠습니다 !!
'PostgreSQL' 카테고리의 다른 글
| pgpool-II(4) | pgpool-II과 PostgreSQL 서버 연결 (pgpool-II to PostgreSQL Server) (0) | 2023.06.22 |
|---|---|
| pgpool-II 부록 : PCP Commands (2) | 2023.06.16 |
| pgpool-II(2) 파라미터 | PostgreSQL14 HA Tool Parameters (2) | 2023.06.15 |
| pgpool-II Overview | PostgreSQL 14 HA Tool (0) | 2023.06.14 |
| PostgreSQL14 논리적 복제 | Logical Replication (0) | 2023.06.08 |