꼬반 Blog

CentOS 7 에서 Corosync 2 와 pacemaker 로 filesystem HA 구성하기.

1.사전구성

두대의 서버에 하나의 스토리지를 공유 마운트 하고

한대는 Active 다른 한대는 Stanby로 구성하여

Active 가 Fail 이 발생하면 Stanby로 마운트가 변경되어 서비스를 안정적으로 지속하기 위하여 위 구성을 사용합니다.

기준은 CentOS7

R730 2대 (동일 사양)

MD3820f

우선 두대의 서버가 공유 스토리지를 마운트 가능하도록 MD3820f 설정에서 서버 2대를 공유 가능한 그룹으로 생성하여

볼륨에 Access 설정을 해줍니다.

이후 각 서버에서 멀티패스로 해당 스토리지가 마운트가 잘 되는지 확인 후 다음 내용을 진행합니다.

2.설치

출처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

3.클러스터구성

그리고 구성에 앞서 서비스를 등록해 줍니다.

#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.리소스등록

출처4 : http://www.programkr.com/blog/MEjMxEDMwYT5.html

출처5 : https://everydayminder.wordpress.com/2014/05/21/drbd-pacemaker-corosync-%EA%B8%B0%EB%B0%98-postgresql-ha-%EA%B5%AC%EC%84%B1%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95/

출처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/

출처8 : http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Clusters_from_Scratch/_configure_the_cluster_for_the_filesystem.html

우선 해당 클러스터 간 리소스는 파일 시스템을 등록 합니다.

파일 시스템은 공유 스토리지로 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]#

정상적으로 리소스가 추가된 것을 확인 할 수 있습니다.

5.테스트

리소스 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 부분을 확인할 예정

6.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

이후 핑을 날려보면 정상적으로 동작 됨을 확인할 수 있다.

7.추가

테스트를 위해 계속 재부팅 테스트를 해보다보니 multipath 파티션이 정상적으로 인식 되지 않은 경우가 종종 발생했다.

때문에 filesystem 이 정상적으로 리소스에서 관리가 안되는 문제가 나타나서

재부팅시 partprobe 를 강제적으로 한번 실행 시켜 주도록 스크립트를 등록 시켜 주었다.

관련 내용은 크게 어려운 부분은 아니므로 참조 주소만 첨부 한다.

출처9 : http://wychoi.tistory.com/102

출처10 : http://originalchoi.tistory.com/44

8.Apache/Tomcat설정

이 부분은 고려 중이다.

현재 서비스가 이중화 되어 failover ha 구성을 한 것인데 공유 마운트되는 부분에 어떤 데이터를 저장할지 정해지지 않았고

(주로 이미지가 될 것으로 예상됨) 이 경우 참조 경로 문제나 정적 파일의 경우 tomcat 보다는 apache가 성능이 좋고

그렇다면 apache - tomcat 연동을 하고 이미지주소를 아파치쪽에서 받아서 tomcat 웹 에서 로딩 하면 될 것으로 생각되나

아직 개발쪽이 어떤지 확인이 되지 않는다.

따라서 일단 위까지 설정을 하고 개발팀의 상황을 본뒤 추가 apache - tomcat 부분 설정을 추가 할 예정

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post