서버 이중화를 위해 가장 많이 쓰는 페이스메이커(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
https://blog.boxcorea.com/wp/archives/2660
두번째 블로그에 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를 위한 이중화 구성이 되었다.
테스트를 위해 현재 master로 활성화된 노드를 standby 상태로 바꾸면, 두번째 노드로 master 역할이 넘어가면서 DRBD 파티션이 마운트되는 것을 확인할 수 있다.
# pcs node standby {node1}
그런데, 이게 el8에서는 좀 달랐다. 정확하게 말하면 drbd파티션의 동기화가 el7과 el8에서 좀 다르게 동작했다는 것이 맞을 것 같다.
el7에서는 2대의 노드에서 drbd 파티션을 지정하고, 한 대를 primary 지정해서 포맷하고 파일을 옮겨놓으면 바로 secondary에서도 해당 포맷으로 설정되고 파일도 생성되었다.
그런데, el8에서는 설정하고 나서 primary와 seconday가 드라이브 블럭 레벨로 동기화가 진행되는 것 같았다. 그래서, 두 대의 drbd로 지정된 드라이브가 싱크되기까지 시간이 꽤나 걸렸다. 일단 동기화가 되고 나면 이후에 파일 동기화는 빠르게 진행되나, 최초의 설정엔 시간이 좀 걸렸다. 이게 무슨 차이로 인한 것인지는 알 수 없는데, 이 때문에 pacemaker를 설정하자마자 서비스 전환 시험을 하면 실패할 수 있다는 것이다.
이를 확인하기 위해서는 secondary 노드에서 다음 명령어로 상태를 확인할 수 있다.
# cat /proc/drbd
이 부분을 짚고 넘어가고 싶었다.
끝!
'디지털 라이프 電子的生活 My Digital Life > 잡다한 기술 관련 것들' 카테고리의 다른 글
openmediavault 업그레이드하기 (5.x > 6.x) (0) | 2022.07.07 |
---|---|
InfiniBand의 RDMA 트래픽 모니터링하기 (0) | 2022.06.30 |
mdadm으로 S/W RAID 구성하기 요약 (0) | 2021.12.10 |
openmediavault로 NAS 만들기 #3 - 커스텀 디스플레이 (2) | 2021.08.28 |
openmediavault로 NAS 만들기 #2 - 소프트웨어 설치 (0) | 2021.08.28 |