25.11. ha_cluster 시스템 역할을 사용하여 고가용성 클러스터에서 Apache HTTP 서버 구성
이 절차에서는 ha_cluster 시스템 역할을 사용하여 2노드 Red Hat Enterprise Linux High Availability Add-On 클러스터에서 활성/수동 Apache HTTP 서버를 구성합니다.
사전 요구 사항
플레이북을 실행할 노드에
ansible-core가 설치되어 있어야 합니다.참고클러스터 멤버 노드에
ansible-core를 설치할 필요가 없습니다.-
플레이북을 실행하려는 시스템에
rhel-system-roles패키지가 설치되어 있습니다. - 클러스터 구성원에게 RHEL 및 RHEL 고가용성 애드온에 대한 활성 서브스크립션 적용 범위로 사용할 시스템이 있습니다.
- 시스템에 Apache에 필요한 공용 가상 IP 주소가 포함되어 있습니다.
- 시스템에는 iSCSI, 파이버 채널 또는 기타 공유 네트워크 블록 장치를 사용하여 클러스터의 노드에 대한 공유 스토리지가 포함됩니다.
- Pacemaker 클러스터에서 XFS 파일 시스템으로 LVM 볼륨 구성에 설명된 대로 XFS 파일 시스템으로 LVM 논리 볼륨을 구성했습니다.
- Apache HTTP 서버 구성에 설명된 대로 Apache HTTP 서버를 구성했습니다.
- 시스템에는 클러스터 노드를 펜싱하는 데 사용할 APC 전원 스위치가 포함되어 있습니다.
ha_cluster 시스템 역할은 지정된 노드의 기존 클러스터 구성을 대체합니다. 역할에 지정되지 않은 모든 설정은 손실됩니다.
절차
- ha_cluster 시스템 역할에 대한 인벤토리 지정에 설명된 대로 클러스터의 노드를 지정하는 인벤토리 파일을 생성합니다.
플레이북 파일(예:
http-cluster.yml)을 생성합니다.참고프로덕션용 플레이북 파일을 생성할 때 자격 증명 모음은 Ansible Vault로 콘텐츠 암호화에 설명된 대로 암호를 암호화합니다.
다음 예제 플레이북 파일은
firewalld및selinux서비스를 실행하는 활성/패시브 2-노드 HA 클러스터에 이전에 생성된 Apache HTTP 서버를 구성합니다.이 예에서는 호스트 이름이
zapc.example.com인 APC 전원 스위치를 사용합니다. 클러스터에서 다른 펜싱 에이전트를 사용하지 않는 경우, 이 예제와 같이 클러스터에ha_cluster_fence_agent_packages변수를 정의할 때 필요한 fence 에이전트만 나열할 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 파일을 저장합니다.
1단계에서 생성한 인벤토리 파일 인벤토리 의 경로를 지정하여 플레이북을 실행합니다.
ansible-playbook -i inventory http-cluster.yml
# ansible-playbook -i inventory http-cluster.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow apache리소스 에이전트를 사용하여 Apache를 관리하는 경우systemd를 사용하지 않습니다. 따라서 Apache를 다시 로드하는 데systemctl을 사용하지 않도록 Apache와 함께 제공된 10.0.0.1 스크립트를 편집해야 합니다.클러스터의 각 노드의
/etc/logrotate.d/httpd파일에서 다음 행을 제거합니다./bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow /var/run/httpd-website.pid를 website가 Apache 리소스의 이름인 PID 파일 경로로 지정하여 제거한 행을 다음 세 줄로 바꿉니다. 이 예에서 Apache 리소스 이름은website입니다./usr/bin/test -f /var/run/httpd-Website.pid >/dev/null 2>/dev/null && /usr/bin/ps -q $(/usr/bin/cat /var/run/httpd-Website.pid) >/dev/null 2>/dev/null && /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd-Website.pid" -k graceful > /dev/null 2>/dev/null || true
/usr/bin/test -f /var/run/httpd-Website.pid >/dev/null 2>/dev/null && /usr/bin/ps -q $(/usr/bin/cat /var/run/httpd-Website.pid) >/dev/null 2>/dev/null && /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd-Website.pid" -k graceful > /dev/null 2>/dev/null || trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증 단계
클러스터의 노드 중 하나에서 클러스터 상태를 확인합니다. 4개의 리소스 모두 동일한 노드
z1.example.com에서 실행되고 있습니다.구성한 리소스가 실행되고 있지 않은 경우
pcs resource debug-start resource명령을 실행하여 리소스구성을 테스트할 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클러스터가 가동되어 실행되면 브라우저에서
IPaddr2리소스로 정의한 IP 주소를 가리켜 간단한 단어 "Hello"로 구성된 샘플 디스플레이를 볼 수 있습니다.Hello
HelloCopy to Clipboard Copied! Toggle word wrap Toggle overflow z1.example.com에서 실행 중인 리소스 그룹이z2.example.com노드로 장애 조치(failover)되는지 여부를 테스트하려면 노드z1.example.com을 준비 모드로 배치한 후 노드가 더 이상 리소스를 호스팅할 수 없게 됩니다.pcs node standby z1.example.com
[root@z1 ~]# pcs node standby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 노드
z1을일괄모드로 전환한 후 클러스터의 노드 중 하나에서 클러스터 상태를 확인합니다. 이제 리소스가 모두z2에서 실행되어야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 정의된 IP 주소에 있는 웹 사이트는 중단 없이 계속 표시되어야 합니다.
CloudEvent 모드에서
z1을제거하려면 다음 명령을 입력합니다.pcs node unstandby z1.example.com
[root@z1 ~]# pcs node unstandby z1.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고reliability 모드에서 노드를
제거해도 리소스가 해당 노드로 다시 장애 조치되지 않습니다. 이는 리소스의resource-stickiness값에 따라 달라집니다.resource-stickinessmeta 속성에 대한 자세한 내용은 현재 노드를 선호하도록 리소스 구성을 참조하십시오.