개요
고가용성(HA)은 시스템 또는 서비스가 높은 비율의 시간 동안 계속 작동하고 액세스할 수 있는 능력을 의미합니다. 고가용성을 달성하려면 현재 Active상태인 시스템에서 하드웨어 또는 소프트웨어 적인 Fail 발생시 서비스 중단 없이 다른 하나가 원활하게 대신할 수 있어야 합니다.
PaceMaker는 CentOS, RedHat계열 리눅스OS 에서는 가용성을 달성할 수 있는 무료 솔루션입니다.
설정방법에 대해 알아보겠습니다.
HostName 구성
2대의 머신에 각각 hostname을 설정하고 서로 hostname으로 접근가능해야 합니다. /etc/hosts파일에 hostname을 추가하면 됩니다.
ex) 서버 구성
Type | HostName | IP Address |
---|---|---|
A Server | ServerA.localdomain | 192.168.1.2 |
B server | ServerB.localdomain | 192.168.1.3 |
vi /etc/hosts에 아래 항목을 추가한다.
192.168.1.2 ServerA.localdomain
192.168.1.3 ServerB.localdomain
도메인으로 접근 가능한지 2대의 머신에서 각각 체크해 봅니다.
[root@ServerA ~]# ping ServerB.localdomain
PING ServerB.localdomain (192.168.1.3) 56(84) bytes of data.
64 bytes from ServerB.localdomain (192.168.1.3): icmp_seq=1 ttl=64 time=0.184 ms
64 bytes from ServerB.localdomain (192.168.1.3): icmp_seq=2 ttl=64 time=0.181 ms
64 bytes from ServerB.localdomain (192.168.1.3): icmp_seq=3 ttl=64 time=0.181 ms
==> A서버에서 ping ServerB.localdomain 실행 및 결과 확인
Package 설치
yum으로 설치하면 편리합니다. 2대 모두 설치해야 합니다.
yum install -y pacemaker corosync pcs
Firewall 구성
서로 서버가 살아 있는지 링크체크를 합니다. FireWall에서 이 링크체크를 차단하면 비정상 동작하게 됩니다. 반드시 A <-> B 서버간 통신은 FireWall규칙에서 예외시켜 제한 없이 통신할 수 있게 해야 합니다.
Service 구동
서비스를 구동하고 부팅시 자동으로 실행하게 설정합니다.
systemctl start pcsd.service
systemctl enable pcsd.service
Cluster 계정
pacemaker 서비스를 위한 Linux 계정을 설정하여 줍니다. A,B서버 모두 hacluster 계정을 생성(없다면)후 비밀번호를 지정합니다.
adduser hacluster
passwd hacluster
Cluster내 노드인증
pacemaker에 A,B서버를 추가합니다. Linux계정을 사용하여 추가할 수 있습니다.
1대에서 설정하면 자동으로 동기화 되어 A,B양측에 반영이 됩니다.
pcs cluster auth ServerA.localdomain ServerB.localdomain
Username : hacluser
Password : <앞단계에서 설정한 비밀번호>
ServerA.localdomain Authorized
ServerB.localdomain Authorized
Cluster 생성 및 실행
이제 생성된 A,B서버 클러스터를 시작하여 줍니다. 여러개의 클러스터를 생성할 수 있으니 다른 것과 구분하기 쉽게 클러스터명을 지정해주는게 좋습니다.
pcs cluster setup --name <ClusterName> ServerA.localdomain ServerB.localdomain
pcs cluster start --all
Virtual IP
이제 생성된 Cluster에 가상 IP를 추가합니다. Virtual IP는 실제로 클라이언트가 접속하는 서비스 IP로 A,B서버중 1대에만 할당이 됩니다.
pcs resource create <Resource Name> ocf:heartbeat:IPaddr2 ip=192.168.1.4 cidr_netmask=27 op monitor interval=30s
가상 IP가 여러개인 경우 Resource Name을 달리하여 추가 가능합니다.
Service 추가
paceMaker는 Active상태일 때 기동해야할 서비스 프로세스들을 지정할 수 있습니다. 아래와 같이 리소스명과 서비스명을 지정합니다. 원하는 프로세스를 미리 system demon으로 등록해두어야 합니다.
pcs resource create <ResourceName> systemd:<service name>
ex) pcs resource create MyServer systemd:mydemon
Auto Failback
Failover후에 장애가 발생한 서비스를 복구시 자동으로 복구된 서버로 리소스가 이동하게 됩니다. 서비스 운영중에 이와 같은 상황이 발생하면 장애 상황이 발생하기 때문에 필요한 경우 막는게 좋습니다.
생성된 리소스별로 전부 입력해야 합니다.
pcs resource update <Resource Name> meta resource-stickiness=INFINITY
상태확인
cluster가 올바르게 동작중인지 확인할 수 있습니다.
현재 Cluster상태를 확인한다.
[root@BizParseA ~]# pcs status
Cluster name: ha_cluster
Stack: corosync
Current DC: ServerA.localdomain (version 1.1.23-1.el7-9acf116022) - partition with quorum
Last updated: Wed Dec 9 15:38:42 2020
Last change: Wed Dec 9 14:55:20 2020 by root via cibadmin on ServerB.localdomain
2 nodes configured
3 resource instances configured
Cluster Test
이제 FailOver가 정상적으로 동작하는지 시험해 봅니다. 우선 명령어를 사용하새 현재 Active인 서버를 Standby모드로 변경할 수있습니다.
pcs cluster standby ServerA.localdomain
A서버가 Active가 되면 Standby상태였던 B서버가 Active가 됩니다. pcs status명령으로 확인후 서비스가 정상적으로 동작하는지 직접 확인하시면 됩니다. 상태 확인후 다시 A서버로 돌리려면 아래 명령을 사용할 수 있습니다.
pcs cluster unstandby ServerA.localdomain
읽어주셔서 감사합니다.