CentOS 7 에서 Corosync 2 와 pacemaker 로 filesystem HA 구성하기.
- 꼬반
- 2015. 6. 2. 09:35
두대의 서버에 하나의 스토리지를 공유 마운트 하고
한대는 Active 다른 한대는 Stanby로 구성하여
Active 가 Fail 이 발생하면 Stanby로 마운트가 변경되어 서비스를 안정적으로 지속하기 위하여 위 구성을 사용합니다.
기준은 CentOS7
R730 2대 (동일 사양)
MD3820f
우선 두대의 서버가 공유 스토리지를 마운트 가능하도록 MD3820f 설정에서 서버 2대를 공유 가능한 그룹으로 생성하여
볼륨에 Access 설정을 해줍니다.
이후 각 서버에서 멀티패스로 해당 스토리지가 마운트가 잘 되는지 확인 후 다음 내용을 진행합니다.
출처1 : http://clusterlabs.org/quickstart-redhat.html
출처2 : http://rivald.blogspot.com/2015/01/simple-clustering-on-centos-7rhel-7-for.html
[ALL] yum install pacemaker pcs resource-agents
옵션 부분에 보면 -no-quorum-policy=ignore 설정 부분이 있는데 이 옵션은
- no-quorum-policy=ignore 설정 안할 경우 cluster 간 failover가 부자연스러울 수 있음.
라는 검색 결과 참고
출처3 : http://dec9.tistory.com/182
그리고 구성에 앞서 서비스를 등록해 줍니다.
#enable the services
systemctl enable pcsd
systemctl enable corosync
systemctl enable pacemaker
systemctl start pcsd.service
이후
퀵 스타트 부분을 참고하여 셋팅하여 주면
[root@dmz_kobis_1 /]# pcs status
Cluster name: dmz_kobis
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Last updated: Tue Jun 2 10:46:20 2015
Last change: Tue Jun 2 10:41:53 2015
Stack: corosync
Current DC: dmz_kobis_1 (1) - partition with quorum
Version: 1.1.12-a14efad
2 Nodes configured
0 Resources configured
Online: [ dmz_kobis_1 dmz_kobis_2 ]
Full list of resources:
PCSD Status:
dmz_kobis_1 (192.168.1.1): Online
dmz_kobis_2 (192.168.1.2): Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
[root@dmz_kobis_1 /]#
클러스터 설정이 끝납니다.
출처4 : http://www.programkr.com/blog/MEjMxEDMwYT5.html
출처6 : http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Clusters_from_Scratch/_perform_a_failover.html
출처7 : http://www.tokiwinter.com/building-a-highly-available-apache-cluster-on-centos-7/
우선 해당 클러스터 간 리소스는 파일 시스템을 등록 합니다.
파일 시스템은 공유 스토리지로 multipathd에 의해 서버에 연결 되어 있습니다.
이 상태에서 fstab은 정의하지 않고 mpath 장치명이 다르다면 일치시켜 줍니다.
http://initrd.org/wiki/Device_Mapper_Multipath
장치명이 동일하다면 아래와 같이 리소스를 추가하여 줍니다.
[root@dmz_kobis_1 /] #pcs resource create fs_dmz_kobis Filesystem device="/dev/mapper/mpatha1" directory="/BiO" fstype="ext4" --group dmz_kobis_group
이후 확인하여 보면
[root@dmz_kobis_1 mapper]# pcs status
Cluster name: dmz_kobis
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Last updated: Tue Jun 2 13:10:17 2015
Last change: Tue Jun 2 12:36:27 2015
Stack: corosync
Current DC: dmz_kobis_1 (1) - partition with quorum
Version: 1.1.12-a14efad
2 Nodes configured
1 Resources configured
Online: [ dmz_kobis_1 dmz_kobis_2 ]
Full list of resources:
Resource Group: dmz_kobis_group
fs_dmz_kobis (ocf::heartbeat:Filesystem): Started dmz_kobis_1
PCSD Status:
dmz_kobis_1 (192.168.1.1): Online
dmz_kobis_2 (192.168.1.2): Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
[root@dmz_kobis_1 mapper]#
정상적으로 리소스가 추가된 것을 확인 할 수 있습니다.
리소스 HA 가 정상적으로 동작하는지 테스트 하여 줍니다.
강제 이동
[root@dmz_kobis_2 mapper]# pcs resource move fs_dmz_kobis
[root@dmz_kobis_2 mapper]# pcs status
Cluster name: dmz_kobis
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Last updated: Tue Jun 2 13:11:37 2015
Last change: Tue Jun 2 13:11:35 2015
Stack: corosync
Current DC: dmz_kobis_1 (1) - partition with quorum
Version: 1.1.12-a14efad
2 Nodes configured
1 Resources configured
Online: [ dmz_kobis_1 dmz_kobis_2 ]
Full list of resources:
Resource Group: dmz_kobis_group
fs_dmz_kobis (ocf::heartbeat:Filesystem): Started dmz_kobis_2
PCSD Status:
dmz_kobis_1 (192.168.1.1): Online
dmz_kobis_2 (192.168.1.2): Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
[root@dmz_kobis_2 mapper]#
클러스트 종료 시 상황 테스트
[root@dmz_kobis_1 mapper]# pcs cluster stop
Stopping Cluster (pacemaker)... Stopping Cluster (corosync)...
[root@dmz_kobis_2 mapper]# pcs status
Cluster name: dmz_kobis
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Last updated: Tue Jun 2 13:13:20 2015
Last change: Tue Jun 2 13:12:32 2015
Stack: corosync
Current DC: dmz_kobis_2 (2) - partition with quorum
Version: 1.1.12-a14efad
2 Nodes configured
1 Resources configured
Online: [ dmz_kobis_2 ]
OFFLINE: [ dmz_kobis_1 ]
Full list of resources:
Resource Group: dmz_kobis_group
fs_dmz_kobis (ocf::heartbeat:Filesystem): Started dmz_kobis_2
PCSD Status:
dmz_kobis_1 (192.168.1.1): Online
dmz_kobis_2 (192.168.1.2): Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
[root@dmz_kobis_2 mapper]#
서버 하드웨어 장애 테스트 ( reboot 테스트 ) - 2에 마운트 되어 있는 상황에서 2 reboot 실행
[root@dmz_kobis_1 ~]# pcs status
Cluster name: dmz_kobis
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Last updated: Tue Jun 2 13:18:41 2015
Last change: Tue Jun 2 13:17:41 2015
Stack: corosync
Current DC: dmz_kobis_2 (2) - partition with quorum
Version: 1.1.12-a14efad
2 Nodes configured
1 Resources configured
Online: [ dmz_kobis_1 dmz_kobis_2 ]
Full list of resources:
Resource Group: dmz_kobis_group
fs_dmz_kobis (ocf::heartbeat:Filesystem): Started dmz_kobis_2
PCSD Status:
dmz_kobis_1 (192.168.1.1): Online
dmz_kobis_2 (192.168.1.2): Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
[root@dmz_kobis_1 ~]#
[root@dmz_kobis_2 ~]# reboot
[root@dmz_kobis_1 ~]# pcs status
Cluster name: dmz_kobis
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Last updated: Tue Jun 2 13:18:58 2015
Last change: Tue Jun 2 13:17:41 2015
Stack: corosync
Current DC: dmz_kobis_1 (1) - partition with quorum
Version: 1.1.12-a14efad
2 Nodes configured
1 Resources configured
Online: [ dmz_kobis_1 ]
OFFLINE: [ dmz_kobis_2 ]
Full list of resources:
Resource Group: dmz_kobis_group
fs_dmz_kobis (ocf::heartbeat:Filesystem): Started dmz_kobis_1
PCSD Status:
dmz_kobis_1 (192.168.1.1): Online
dmz_kobis_2 (192.168.1.2): Offline
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
[root@dmz_kobis_1 ~]#
테스트 중 느낀점은 리소스를 강제로 이동 후 리부트 테스트 및 클러스터 임의 정지 시 리소스가 정상적으로 자동이동이 잘 되지 않는다.
이때는
pcs resource clear "resource name" 을 해주면 잘 동작 된다.
이렇게 파일시스템 리소스 까지 정리 되었고 이후 톰캣 vip 부분을 확인할 예정
vip 설정도 간단하다.
[root@dmz_kobis_1 /]# pcs resource create vip_dmz_kobis IPaddr2 ip=ip주소 cidr_netmask=24 nic=eth0 op monitor interval=20s --group dmz_kobis_group
이후 확인
[root@dmz_kobis_1 /]# pcs status
Cluster name: dmz_kobis
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Last updated: Thu Jun 4 13:03:14 2015
Last change: Thu Jun 4 12:43:59 2015
Stack: corosync
Current DC: dmz_kobis_2 (2) - partition with quorum
Version: 1.1.12-a14efad
2 Nodes configured
2 Resources configured
Online: [ dmz_kobis_1 dmz_kobis_2 ]
Full list of resources:
Resource Group: dmz_kobis_group
vip_dmz_kobis (ocf::heartbeat:IPaddr2): Started dmz_kobis_1
fs_dmz_kobis (ocf::heartbeat:Filesystem): Started dmz_kobis_1
PCSD Status:
dmz_kobis_1 (192.168.1.1): Online
dmz_kobis_2 (192.168.1.2): Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
이후 핑을 날려보면 정상적으로 동작 됨을 확인할 수 있다.
테스트를 위해 계속 재부팅 테스트를 해보다보니 multipath 파티션이 정상적으로 인식 되지 않은 경우가 종종 발생했다.
때문에 filesystem 이 정상적으로 리소스에서 관리가 안되는 문제가 나타나서
재부팅시 partprobe 를 강제적으로 한번 실행 시켜 주도록 스크립트를 등록 시켜 주었다.
관련 내용은 크게 어려운 부분은 아니므로 참조 주소만 첨부 한다.
출처9 : http://wychoi.tistory.com/102
출처10 : http://originalchoi.tistory.com/44
이 부분은 고려 중이다.
현재 서비스가 이중화 되어 failover ha 구성을 한 것인데 공유 마운트되는 부분에 어떤 데이터를 저장할지 정해지지 않았고
(주로 이미지가 될 것으로 예상됨) 이 경우 참조 경로 문제나 정적 파일의 경우 tomcat 보다는 apache가 성능이 좋고
그렇다면 apache - tomcat 연동을 하고 이미지주소를 아파치쪽에서 받아서 tomcat 웹 에서 로딩 하면 될 것으로 생각되나
아직 개발쪽이 어떤지 확인이 되지 않는다.
따라서 일단 위까지 설정을 하고 개발팀의 상황을 본뒤 추가 apache - tomcat 부분 설정을 추가 할 예정