본문 바로가기

OS/Linux

Pacemaker 사용해보기[1] - VIP를 이용한 서버 이중화

반응형

소개


 

간단히 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
반응형