2.2. 장애 조치 설정 학습
다음 절차에서는 서비스를 실행하는 노드를 사용할 수 없게 되면 한 노드에서 다른 노드로 장애 조치되는 서비스를 실행하는 Pacemaker 클러스터를 생성하는 방법을 소개합니다. 이 절차를 통해 2-노드 클러스터에서 서비스를 생성하는 방법을 배울 수 있으며 실행 중인 노드에서 오류가 발생하면 해당 서비스가 어떤 일이 발생하는지 관찰할 수 있습니다.
이 예제 절차에서는 Apache HTTP 서버를 실행하는 2-노드 Pacemaker 클러스터를 구성합니다. 그런 다음 한 노드에서 Apache 서비스를 중지하여 서비스를 계속 사용할 수 있는 방법을 확인할 수 있습니다.
이 예제에서는 다음을 수행합니다.
-
노드는
z1.example.com
및z2.example.com
입니다. - 유동 IP 주소는 192.168.122.120입니다.
사전 요구 사항
- 서로 통신할 수 있는 RHEL 8을 실행하는 두 개의 노드
- 노드의 정적으로 할당된 IP 주소 중 하나와 동일한 네트워크에 상주하는 유동 IP 주소
-
실행 중인 노드의 이름은
/etc/hosts
파일에 있습니다.
절차
양쪽 노드에서 High Availability 채널에서 Red Hat High Availability Add-On 소프트웨어 패키지를 설치하고
pcsd
서비스를 시작하고 활성화합니다.# yum install pcs pacemaker fence-agents-all ... # systemctl start pcsd.service # systemctl enable pcsd.service
firewalld
데몬을 실행하는 경우 양쪽 노드에서 Red Hat High Availability Add-On에 필요한 포트를 활성화합니다.# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload
클러스터의 두 노드 모두에서 사용자
hacluster
의 암호를 설정합니다.# passwd hacluster
pcs
명령을 실행할 노드의 클러스터에 있는 각 노드에 대해 사용자hacluster
를 인증합니다.# pcs host auth z1.example.com z2.example.com
두 노드 모두 클러스터 구성원으로 사용하여
my_cluster
라는 클러스터를 생성합니다. 이 명령은 한 단계에서 클러스터를 생성하고 시작합니다.pcs
구성 명령이 전체 클러스터에 적용되므로 클러스터의 한 노드에서만 실행하면 됩니다.클러스터의 한 노드에서 다음 명령을 실행합니다.
# pcs cluster setup my_cluster --start z1.example.com z2.example.com
Red Hat High Availability 클러스터에서는 클러스터의 펜싱을 구성해야 합니다. 이러한 요구 사항의 이유는 Red Hat High Availability Cluster의 Red Hat Knowledgebase 솔루션에 설명되어 있습니다. 그러나 이 도입에서는 이 구성에서 페일오버가 작동하는 방식만 표시하려면 stonith
사용 클러스터 옵션을 false
로 설정하여 펜싱을 비활성화합니다.
+
stonith-enabled=false
를 사용하는 것은 프로덕션 클러스터에 전혀 부적절합니다. 실패한 노드가 안전하게 펜싱되었다고 가정하면 클러스터에 지시합니다.
+
# pcs property set stonith-enabled=false
클러스터를 생성하고 펜싱을 비활성화한 후 클러스터 상태를 확인합니다.
참고pcs cluster status
명령을 실행하면 시스템 구성 요소가 시작될 때 예제와 약간 다른 출력이 표시될 수 있습니다.# pcs cluster status Cluster Status: Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Thu Oct 11 16:11:18 2018 Last change: Thu Oct 11 16:11:00 2018 by hacluster via crmd on z1.example.com 2 nodes configured 0 resources configured PCSD Status: z1.example.com: Online z2.example.com: Online
두 노드 모두에서 웹 브라우저를 구성하고 간단한 텍스트 메시지를 표시하도록 웹 페이지를 만듭니다.
firewalld
데몬을 실행하는 경우httpd
에 필요한 포트를 활성화합니다.참고systemctl enable를
사용하여 시스템을 부팅할 때 클러스터에서 관리하는 서비스를 활성화하지 마십시오.# yum install -y httpd wget ... # firewall-cmd --permanent --add-service=http # firewall-cmd --reload # cat <<-END >/var/www/html/index.html <html> <body>My Test Site - $(hostname)</body> </html> END
Apache 리소스 에이전트가 Apache의 상태를 가져오려면 클러스터의 각 노드에서 기존 구성에 다음과 같이 생성되어 상태 서버 URL을 활성화합니다.
# cat <<-END > /etc/httpd/conf.d/status.conf <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 Allow from ::1 </Location> END
클러스터가 관리할
IPaddr2
및apache
리소스를 만듭니다. 'IPaddr2' 리소스는 유동 IP 주소이며 물리적 노드와 이미 연결되어 있지 않아야 합니다. 'IPaddr2' 리소스의 NIC 장치가 지정되지 않은 경우 유동 IP는 노드에서 사용하는 정적으로 할당된 IP 주소와 동일한 네트워크에 있어야 합니다.pcs resource list 명령을 사용하여 사용 가능한 모든 리소스 유형
목록을
표시할 수 있습니다. pcs resourcedescribe resourcetype
명령을 사용하여 지정된 리소스 유형에 대해 설정할 수 있는 매개변수를 표시할 수 있습니다. 예를 들어 다음 명령은apache
유형의 리소스에 대해 설정할 수 있는 매개변수를 표시합니다.# pcs resource describe apache ...
이 예제에서 IP 주소 리소스와 apache 리소스는 모두
apachegroup
그룹의 일부로 구성되어 동일한 노드에서 리소스가 함께 실행되도록 합니다.클러스터의 한 노드에서 다음 명령을 실행합니다.
# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.122.120 --group apachegroup # pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" --group apachegroup # pcs status Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Online: [ z1.example.com z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z1.example.com WebSite (ocf::heartbeat:apache): Started z1.example.com PCSD Status: z1.example.com: Online z2.example.com: Online ...
이 인스턴스에서
apachegroup
서비스가 z1.example.com 노드에서 실행되고 있습니다.생성한 웹 사이트에 액세스하고 실행 중인 노드에서 서비스를 중지한 다음 두 번째 노드로 서비스가 실패하는 방법을 확인합니다.
- 구성한 유동 IP 주소를 사용하여 생성한 웹 사이트를 브라우저를 가리킵니다. 이렇게 하면 사용자가 정의한 텍스트 메시지가 표시되어야 합니다. 그러면 웹 사이트가 실행 중인 노드의 이름을 표시할 수 있습니다.
apache 웹 서비스를 중지합니다.
killall -9
를 사용하면 애플리케이션 수준 충돌을 시뮬레이션합니다.# killall -9 httpd
클러스터 상태를 확인합니다. 웹 서비스를 중지하면 작업이 실패했지만 클러스터 소프트웨어가 실행 중인 노드에서 서비스를 다시 시작했으며 웹 브라우저에 액세스할 수 있어야 합니다.
# pcs status Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Online: [ z1.example.com z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z1.example.com WebSite (ocf::heartbeat:apache): Started z1.example.com Failed Resource Actions: * WebSite_monitor_60000 on z1.example.com 'not running' (7): call=31, status=complete, exitreason='none', last-rc-change='Fri Feb 5 21:01:41 2016', queued=0ms, exec=0ms
서비스가 시작되어 다시 실행되면 실패 상태를 지웁니다.
# pcs resource cleanup WebSite
서비스가 실행 중인 노드를 대기 모드로 설정합니다. 펜싱을 비활성화했으므로 클러스터가 이러한 상황에서 복구하는 데 펜싱이 필요하므로 노드 수준 오류를 효율적으로 시뮬레이션할 수 없습니다(예: 전원 케이블 가져오기).
# pcs node standby z1.example.com
클러스터의 상태를 확인하고 서비스가 현재 실행 중인 위치를 확인합니다.
# pcs status Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Node z1.example.com: standby Online: [ z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z2.example.com WebSite (ocf::heartbeat:apache): Started z2.example.com
- 웹 사이트에 액세스. 디스플레이 메시지에서 서비스가 현재 실행 중인 노드를 나타내야 하지만, 서비스가 손실되지 않아야 합니다.
클러스터 서비스를 첫 번째 노드로 복원하려면 노드를 standby 모드에서 전환합니다. 이 경우 해당 노드로 다시 서비스를 이동할 필요는 없습니다.
# pcs node unstandby z1.example.com
마지막 정리를 위해 두 노드 모두에서 클러스터 서비스를 중지합니다.
# pcs cluster stop --all