소개
간단히 VIP를 이용하여 Active/Passive 구조에서 Server Fail이 났을때 Failover 되는 상황을 테스트 해보려 한다.
유사한 Tool 중에 keepalived 가 있지만 keepalive에서 track 과 같이 스크립트를 사용했던 것과 비슷하게 resource agent 스크립트를 제공하며 정의 할 수 있는것으로 보인다.
keepalived보다 좀더 체계적인 방식으로 노드, pacemaker 자체 프로세스, 응용 프로세스, 네트워크, 디스크 등에 이르기까지 모니터링 기능을 통해 서비스 가용성을 확보할 수 있을 것으로 보인다.
또한 corosync quorum을 통해 3대 이상의 노드에서 failover 상황을 명확히 규정하고 stonith(fencing) 를 통해 데이터 무결성을 보장한다.
알아가는 과정인 만큼 간단히 server fail 상황에서 VIP의 이동 상황을 테스트하는 것으로 출발하려고 한다.
테스트 환경
- Node1
- OS : CentOS7 x64
- hostname : test-drbd01
- IP : 172.16.10.121/24
- Node2
- OS : CentOS7 x64
- hostname : test-drbd02
- IP : 172.16.10.122/24
- VIP : 172.16.10.96/24
설치
CentOS7 에서는 pacemaker 1.1.x 버전 패키지를 제공한다.
2개의 Node 모두에 설치한다.
yum install pacemaker corosync pcs
설정
호스트 등록(양쪽 모두)
vim /etc/hosts
172.16.10.121 test-drbd01
172.16.10.122 test-drbd02
hacluster 패스워드 생성(양쪽 모두)
pacemaker 설치 시 hacluster라는 계정이 자동 생성 되며 이 계정은 Node 간의 인증 시 사용된다.
두 Node 모두 패스워드를 동일하게 설정한다.
passwd hacluster
pcsd 서비스 시작(양쪽 모두)
pcs는 클러스터 관리용 CLI 도구로 설정에 앞서 서비스를 실행해 준다.
systemctl start pcsd
cluster 인증(한쪽 노드에서만)
pcs cluster auth -u hacluster -p <password> test-drbd01 test-drbd02
cluster setup (한쪽 노드에서만)
test-cluster 라는 이름으로 cluster를 생성하며 test-drbd01, test-drbd02 Node를 가입 시킨다.
pcs cluster setup --name test-cluster test-drbd01 test-drbd02
cluster start (한쪽 노드에서만)
cluster를 시작한다.
--all 을 통해 가입된 Node 모두에 cluster 관련 서비스(pacemaker, corosync)를 실행시킨다.
--all 옵션을 사용하지 않으면 해당 Node 에서만 실행된다.
pcs cluster start --all
cluster 상태 확인
pcs status 명령어를 통해 cluster 상태를 확인할 수 있다.
2개의 Node가 가입되어 있고 0개의 resource가 설정되어 있다.
vip resource는 추후 등록할 예정이다.
pcs status
Cluster name: test-cluster
Stack: corosync
Current DC: test-drbd02 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Fri Feb 23 11:59:45 2024
Last change: Wed Feb 21 16:38:52 2024 by root via cibadmin on test-drbd01
2 nodes configured
0 resource instance configured
Online: [ test-drbd01 test-drbd02 ]
No resources
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
stonith 기능 비활성화(한쪽 노드에서만)
stonith(fencing) 은 어떠한 요인(네트워크 등등)에 의해 다수의 Node에서 active 상태가 중복되는 것을 방지하는 기능으로 Node를 제외하기 위해 재부팅 등을 시도하여 무결성을 확보 할수 있다.
다만 직접 겪은 사례 중에 proxmox 에서 fencing 이 동작하여 HA 구성된 VM 외 local에 종속된 다른 VM도 같이 영향을 받았던 경험으로 비춰보아 사용에 세심한 주의가 필요하다.
pcs property set stonith-enabled=false
확인
pcs property show
Cluster Properties:
cluster-infrastructure: corosync
cluster-name: test-cluster
dc-version: 1.1.23-1.el7_9.1-9acf116022
have-watchdog: false
stonith-enabled: false
VIP resource 등록(한쪽 노드에서만)
test-drbd-vip라는 resource 이름으로 ocf:heartbeat:IPaddr2 리소스 프로바이더를 사용하여 등록하여 준다.
pcs resource create test-drbd-vip ocf:heartbeat:IPaddr2 ip=172.16.10.96 cidr_netmask=24 op monitor interval=30s
제공하는 리소스 프로바이더는 아래와 같이 확인 할 수 있다.
pcs resource standards
pcs resource providers
pcs resource agents ocf:heartbeat
OCF Resource Agengs 는 /lib/ocf/resource.d 에서 기본 스크립트를 확인해 볼수 있다.
cluster 상태를 확인해보면 test-drbd-vip resource가 등록되어있고 active는 test-drbd02 로 표기 된다.
pcs status
Cluster name: test-cluster
Stack: corosync
Current DC: test-drbd02 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Fri Feb 23 11:59:45 2024
Last change: Wed Feb 21 16:38:52 2024 by root via cibadmin on test-drbd01
2 nodes configured
1 resource instance configured
Online: [ test-drbd01 test-drbd02 ]
Full list of resources:
test-drbd-vip (ocf::heartbeat:IPaddr2): Started test-drbd02
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
vip도 확인한다.
ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 96:37:48:e6:68:10 brd ff:ff:ff:ff:ff:ff
inet 172.16.10.122/24 brd 172.16.10.255 scope global noprefixroute dynamic eth0
valid_lft 602114sec preferred_lft 602114sec
inet 172.16.10.96/24 brd 172.16.10.255 scope global secondary eth0
valid_lft forever preferred_lft forever
양 Node간의 ha cluster 메시지를 담당하는 corosync는 udp 5405 포트를 사용한다.
udp 0 0 172.16.10.122:5405 0.0.0.0:* 2147/corosync
cluster node 제거하기
pcs cluster node remove test-drbd02
cluster node 추가하기
pcs cluster node add test-drbd02
pcs cluster start test-drbd02
참고
pcs status 확인시 아래와 같이 Node 상태가 UNCLEAN(offline) 로 표기 될 경우가 있다.
[root@test-drbd02 ~]# pcs status
Cluster name: test-cluster
WARNINGS:
No stonith devices and stonith-enabled is not false
Stack: corosync
Current DC: test-drbd02 (version 1.1.23-1.el7_9.1-9acf116022) - partition WITHOUT quorum
Last updated: Wed Feb 21 16:15:36 2024
Last change: Wed Feb 21 13:48:52 2024 by hacluster via crmd on test-drbd02
2 nodes configured
0 resource instances configured
Node test-drbd01: UNCLEAN (offline)
Online: [ test-drbd02 ]
...
모든 경우는 아니지만 corosync에 Node IP가 locahost로 등록되는 경우가 있다.
[root@test-drbd02 ~]# cd /var/lib/corosync/
[root@test-drbd02 corosync]# ll
total 4
-rwx------ 1 root root 8 Feb 21 13:48 ringid_127.0.0.1
이는 cluster 생성 시 hosts 파일에 IP가 잘못 입력된 경우로 아래와 같이
127.0.0.1 test-drbd02 test-drbd02
로 입력되어 있을 수 있으니 확인해 보는 것이 좋다.
수정하기 위해서는 cluster를 멈추고 ringid_127.0.0.1 파일을 삭제 후 다시 cluster를 시작해주면 된다.
pcs cluster stop --all
rm -rf ringid_127.0.0.1
pcs cluster start --all
'OS > Linux' 카테고리의 다른 글
[Linux] Disk inode 사용 해제 (0) | 2024.03.04 |
---|---|
DRBD 구축 해보기 (0) | 2024.02.19 |
[LetsEncrypt] certbot을 이용한 SSL 인증서 발급(standalone, txt dns 레코드(dns challenge)) (0) | 2024.02.01 |
IOPS(Input/Output Operations Per Second) 계산 방법 (1) | 2024.01.26 |
jq filter를 이용한 json 출력하기 (1) | 2024.01.05 |