[Linux] Ansible Playbook 을 이용한 EC2 인스턴스 PCS Cluster 환경 생성
ansible.ha-cluster-pacemaker 플레이북과 fence_aws를 이용해 EC2 인스턴스 2대로 Pacemaker Cluster 테스트 환경을 자동으로 구성하는 방법을 정리합니다.
요약
ansible.ha-cluster-pacemaker플레이북으로 EC2 인스턴스 2대에 fence_aws STONITH를 포함한 Pacemaker Cluster를 자동 구성할 수 있습니다.- RHEL-HA AMI로 인스턴스를 만들고
cluster.yml에cluster_configure_fence_aws: true와fence_aws_region을 지정하면 AWS용 펜싱 장치가 함께 설정됩니다. - 인스턴스 프로파일이 정상 연결되어 있으면
fence_aws -o status명령으로 stonith 장치를 테스트할 수 있습니다.
테스트 환경 RHEL-HA AMI 기반 EC2 인스턴스 2대 (Pacemaker 2.1.5-9.el9_2.3), OndrejHome.pcs-modules-2 28.0.0
Ansible Playbook 을 이용한 EC2 인스턴스 Pacemaker Cluster 환경 생성
AWS 에서 Pacemaker 테스트 환경을 구성 할 때, 여러 작업을 Ansible Playbook 을 통해 테스트 환경 구축을 자동화 할 수 있습니다.
ansible.ha-cluster-pacemaker 플레이북을 이용하여 자동화가 되며, 해당 플레이북에 Add support for fence_aws PR 을 진행했고, AWS 에서도 사용이 가능한 Playbook 이 되어서 빠른 테스트 환경 구축에 활용 할 수 있게 되었습니다.
테스트 환경
- EC2 인스턴스를 준비 합니다.
RHEL-HA AMI 를 이용하여 인스턴스를 생성합니다.
- 참고 : ansible.fast-ec2 playbook 을 이용하여 EC2 배포를 자동화합니다.
- Ansible Role setup
아래와 같이
ansible.cfg를 설정하고roles경로를 생성합니다.$ mkdir roles $ cat ansible.cfg [defaults] roles_path=roles -
install pcs role 아래와 같이 Pacemaker 구축에 사용할 ansible role 을 설치합니다.
ansible.pcs-modules-2를 설치합니다.$ ansible-galaxy role install OndrejHome.pcs-modules-2 Starting galaxy role install process - downloading role 'pcs-modules-2', owned by OndrejHome - downloading role from https://github.com/OndrejHome/ansible.pcs-modules-2/archive/28.0.0.tar.gz - extracting OndrejHome.pcs-modules-2 to /home/ec2-user/roles/OndrejHome.pcs-modules-2 - OndrejHome.pcs-modules-2 (28.0.0) was installed successfullyansible.ha-cluster-pacemaker를 설치합니다.$ cd roles/ $ git clone https://github.com/OndrejHome/ansible.ha-cluster-pacemaker.git $ ln -s ./OndrejHome.pcs-modules-2 ondrejhome.pcs-modules-2 -
cluster.yml을 작성합니다.$ cat cluster.yml - hosts: cluster roles: - { role: 'ansible.ha-cluster-pacemaker', cluster_name: 'aws-cluster', cluster_configure_fence_xvm: false, cluster_configure_fence_aws: true, cluster_configure_stonith_style: 'one-device-per-cluster', enable_repos: false, fence_aws_region: 'ap-northeast-2' } inventory를 작성합니다.$ cat inventory [cluster] 172.31.0.252 instance_id="i-AAAAAAAAAAAAAAAAA" 172.31.5.226 instance_id="i-BBBBBBBBBBBBBBBBB" [cluster:vars] ansible_ssh_user="ec2-user" ansible_ssh_private_key_file="~/.ssh/id_rsa" ansible_ssh_common_args='-o StrictHostKeyChecking=no'- Playbook 을 실행합니다.
$ ansible-playbook -i inventory cluster.yml -v -b ... PLAY RECAP ******************************************************************************************************************** 172.31.0.252 : ok=27 changed=11 unreachable=0 failed=0 skipped=40 rescued=0 ignored=1 172.31.5.226 : ok=20 changed=9 unreachable=0 failed=0 skipped=28 rescued=0 ignored=0 -
설치가 완료된 Cluster 상태를 확인합니다.
$ ssh ec2-user@172.31.0.252 "sudo pcs status" Cluster name: aws-cluster Status of pacemakerd: 'Pacemaker is running' (last updated 2023-11-14 05:20:23Z) Cluster Summary: * Stack: corosync * Current DC: ip-172-31-0-252 (version 2.1.5-9.el9_2.3-a3f44794f94) - partition with quorum * Last updated: Tue Nov 14 05:20:23 2023 * Last change: Tue Nov 14 05:20:07 2023 by hacluster via crmd on ip-172-31-0-252 * 2 nodes configured * 1 resource instance configured Node List: * Online: [ ip-172-31-0-252 ip-172-31-5-226 ] Full List of Resources: * fence-aws (stonith:fence_aws): Started ip-172-31-0-252 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
추가로 아래와 같이 인스턴스 프로파일이 정상적으로 연결이 되어 있으면 fence_aws 명령어를 통해 stonith (fence device) 테스트가 가능합니다.
```
$ sudo fence_aws -o status -r ap-northeast-2 -n i-AAAAAAAAAAAAAAAAA
Status: ON
```
참고 문서
- https://github.com/chhanz/ansible.fast-ec2
- https://github.com/OndrejHome/ansible.ha-cluster-pacemaker
- https://github.com/OndrejHome/ansible.pcs-modules-2
자주 묻는 질문
EC2에서 Pacemaker 클러스터를 Ansible로 구성하려면 어떤 role이 필요한가요?
ansible-galaxy role install OndrejHome.pcs-modules-2로 pcs-modules-2를 설치하고, ansible.ha-cluster-pacemaker를 roles 경로에 git clone합니다. 이후 ondrejhome.pcs-modules-2 이름으로 심볼릭 링크를 만들어 둡니다.
ansible.ha-cluster-pacemaker에서 fence_aws를 사용하려면 어떻게 설정하나요?
cluster.yml에 cluster_configure_fence_aws: true, cluster_configure_fence_xvm: false, fence_aws_region을 지정하고, inventory의 각 호스트에 instance_id 변수를 넣습니다.
구성된 Pacemaker 클러스터와 펜싱 장치 상태는 어떻게 확인하나요?
sudo pcs status로 노드가 Online인지와 fence-aws (stonith:fence_aws) 리소스가 Started인지 확인합니다. 인스턴스 프로파일이 연결되어 있다면 sudo fence_aws -o status -r ap-northeast-2 -n <인스턴스 ID>로 펜싱 테스트도 할 수 있습니다.