디지털 라이프 電子的生活 My Digital Life/잡다한 Linux 관련 것들

RHEL7/RHEL8 Pacemaker/DRBD 설정시 다른 점 비교

미친도사 2022. 4. 29. 20:00

서버 이중화를 위해 가장 많이 쓰는 페이스메이커(pacemaker)를 공부하고 있다.

pacemaker로 구현된 당시 우리 회사 솔루션을 써본 적은 있지만, 그게 어떤 식으로 구현되어 돌아가는 지는 몰랐다. 그래서, 러스터(Lustre) 파일 시스템 공부하면서 pacemaker도 들여다 보면서 이런저런 기능들을 익히고 있다.

 

pacemaker는 우리가 주로 쓰는 OS에 기본적으로 포함되어 있긴 하나, RHEL8 혹은 그 계열의 대체 OS(Rocky, Alma 등)에서는 High Availability repository를 활성화해야 설치할 수 있다.

# yum --enablerepo=HighAvailability -y install pacemaker pcs

 

DRBD는 elrepo라는 repository를 통해서 설치할 수 있다.

drbd84 혹은 drbd90을 설치할 수 있는데, 대부분의 자료가 84로 되어 있어 84로 진행했다. 90도 해봤는데 다르지는 않았다.

 

DRBD를 구성하는 부분에 대해서는 다른 곳에서 충분히 다뤘기에 참고한 블로그 글 2개를 링크한다.

https://onecellboy.tistory.com/330

 

[LINUX]DRBD (블럭 디바이스 HA)

참고 : http://guguru.tistory.com/category/%5B%EA%B8%B0%EC%88%A0%EA%B2%80%ED%86%A0%20%26%20%EC%95%84%EC%9D%B4%ED%85%9C%5D http://superlinuxer.com/DRBD http://www.nidc.kr/customer/content.asp?board=te..

onecellboy.tistory.com

https://blog.boxcorea.com/wp/archives/2660

 

리눅스 HA(corosync, pacemaker, DRBD) – Part 2

corosync, pacemaker 클러스터에 DRBD 디스크 이용하기. 참고: 리눅스 HA(corosync, pacemaker) – Part 1 리눅스 HA (pacemaker, corosync, iscsi shared storage) – part 3 리눅스 HA(corosync, pacemaker, shared disk)에 zabbix 모니터링

blog.boxcorea.com

두번째 블로그에 pacemaker와 연동하는 부분이 잘 설명되어 있긴한데, RHEL8 계열에서는 조금 명령어가 달라서 따로 정리한다.

 

아래 표는 pacemaker 클러스터 구성 명령어를 순서에 따라 정리한 것이다.

el7과 el8이 다른 이유는 pacemaker의 버전이 다르기 때문인 것 같다.

el7: 1.1.23-1

el8: 2.1.0-8

 

el7 el8
[ pacemaker 클러스터 기본 구성]
# pcs cluster auth {node1} {node2} # pcs host auth {node1} -u hacluster -p {PASSWORD}
# pcs host auth {node2} -u hacluster -p {PASSWORD}
# pcs cluster setup --name drbdHA {node1} {node2}
--start --enable
# pcs cluster setup drbdHA {node1} {node2}
--start --enable
# pcs property set stonith-enabled=false 좌동
// 호스트 인증 문법이 다르고, cluster setup 명령에 클러스터 이름 지정하는 부분에 el7에선 --name 옵션이 필요하다.
[ DRBD 서비스 리소스 등록 ]
# pcs cluster cib drbd_cfg 좌동
# pcs -f drbd_cfg resource create DrbdData
ocf:linbit:drbd drbd_resource=drbd0 op monitor
interval=60s
좌동
# pcs -f drbd_cfg resource master DrbdDataClone
DrbdData master-max=1 master-node-max=1
clone-max=2 clone-node-max=1 notify=true
# pcs -f drbd_cfg resource promotable DrbdData
promoted-max=1 promoted-node-max=1
clone-max=2 clone-node-max=1 notify=true
# pcs cluster cib-push drbd_cfg 좌동
// el8에선 resource master 대신 promotable을 사용해야 한다. master 옵션 때엔 clone 명을 수동 지정해야 했는데, el8에서는 원래 리소스-clone이란 이름으로 자동 생성된다.
[ DRBD 파티션 마운트 리소스 등록 ]
# pcs cluster cib fs_cfg 좌동
# pcs  -f fs_cfg resource create DrbdFS Filesystem
device="/dev/drbd0" directory="/mnt/drbd" fstype="xfs"
좌동
# pcs  -f fs_cfg constraint colocation add DrbdFS with
DrbdDataClone INFINITY with-rsc-role=Master
# pcs  -f fs_cfg constraint colocation add DrbdFS with
DrbdData-clone INFINITY with-rsc-role=Master
# pcs  -f fs_cfg constraint order promote
DrbdDataClone then start DrbdFS
# pcs  -f fs_cfg constraint order promote
DrbdData-clone then start DrbdFS
# pcs cluster cib-push fs_cfg 좌동
// 앞서 수동 생성한 clone 이름과 자동 생성된 -clone과의 차이 외엔 문법은 동일

 

이렇게 해서 drbd를 위한 이중화 구성이 되었다.

 

Pacemaker 상태 (el7)
Pacemaker 상태 (el8)

테스트를 위해 현재 master로 활성화된 노드를 standby 상태로 바꾸면, 두번째 노드로 master 역할이 넘어가면서 DRBD 파티션이 마운트되는 것을 확인할 수 있다.

# pcs node standby {node1}

Master가 옮겨가면서 DRBD 파니션도 마운트되었다

그런데, 이게 el8에서는 좀 달랐다. 정확하게 말하면 drbd파티션의 동기화가 el7과 el8에서 좀 다르게 동작했다는 것이 맞을 것 같다.

el7에서는 2대의 노드에서 drbd 파티션을 지정하고, 한 대를 primary 지정해서 포맷하고 파일을 옮겨놓으면 바로 secondary에서도 해당 포맷으로 설정되고 파일도 생성되었다.

그런데, el8에서는 설정하고 나서 primary와 seconday가 드라이브 블럭 레벨로 동기화가 진행되는 것 같았다. 그래서, 두 대의 drbd로 지정된 드라이브가 싱크되기까지 시간이 꽤나 걸렸다. 일단 동기화가 되고 나면 이후에 파일 동기화는 빠르게 진행되나, 최초의 설정엔 시간이 좀 걸렸다. 이게 무슨 차이로 인한 것인지는 알 수 없는데, 이 때문에 pacemaker를 설정하자마자 서비스 전환 시험을 하면 실패할 수 있다는 것이다.

이를 확인하기 위해서는 secondary 노드에서 다음 명령어로 상태를 확인할 수 있다.

# cat /proc/drbd

 

이 부분을 짚고 넘어가고 싶었다.

끝!

반응형