반응형
OS : CentOS7.x
0) Pacemaker, corosync 란?
pacemaker를 사용할 때는 corosync라는 도구와 함께 쓰인다.
corosync : 저수준의 인프라를 관리해주는 역할, 구체적으로 "노드 간의 멤버쉽, 쿼럼, 메시징" 정도가 될 수 있다.
즉, corosync는 클러스터 내의 노드 간 Discovery, 통신, 동기화 작업 등을 담당한다.
한 가지 특이한 점은, etcd같은 분산 코디네이터 없이 Mesh 형태로 동작하는 것으로 보인다.
pacemaker : corosync의 기능을 이용해 클러스터의 리소스 제어 및 관리를 수행하며,
사용자 입장에서 클러스터의 특정 기능을 사용할 때는 대부분 pacemaker를 호출하게 된다.
예를 들어, Virtual IP 리소스를 생성하려면 pacemaker의 CLI를 사용하지만,
pacemaker는 Virtual IP 리소스 할당을 위해 내부적으로 corosync의 인프라 정보를 사용한다.
pacemaker와 corosync와는 별개로 pcs (pacemaker/corosync configuration system) 이라는 도구가 따로 존재하는데,
pcs는 pacemaker와 corosync를 좀 더 쉽게 설정할 수 있도록 도와주는 CLI 명령어 도구이다.
역으로 말하자면 굳이 pcs를 사용하지 않아도 pacemaker 클러스터를 구축하고 사용할 수는 있지만,
대부분의 레퍼런스가 pcs를 기준으로 설명하고 있으므로 웬만하면 pcs를 사용하는 것이 권장된다.
1) Cluster 패키지 설치 (Node1,2)
[root@pcs ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@pcs ~]# yum -y install pacemaker pcs fence-agents-all
2) Cluster 데몬 시작 (Node1,2)
[root@pcs ~]# systemctl start pcsd; systemctl enable pcsd
3) hacluster 비밀번호 설정 (Node1,2)
[root@pcs ~]# echo "123123" | passwd --stdin hacluster
4) Cluster 생성 (Node1)
[root@pcs ~]# pcs cluster auth node1 node2
Username: hacluster
[root@pcs ~]# pcs cluster setup --name cluster node1 node2
[root@pcs ~]# pcs cluster start --all
[root@pcs ~]# pcs cluster enable --all
5) 멤버쉽, 쿼럼 확인
[root@pcs ~]# corosync-cmapctl | egrep -i members
[root@pcs ~]# pcs status corosync
Membership information
----------------------
Nodeid Votes Name
1 1 node1 (local)
2 1 node2
6) STONITH 비활성화
[root@pcs ~]# pcs property set stonith-enabled=false
[root@pcs ~]# crm_verify -L
7) Stickiness 제어
[root@pcs ~]# pcs resource defaults resource-stickiness=60
8) VIP 생성
[root@pcs ~]# pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.0.10 cidr_netmask=24 op monitor interval=30s
[root@pcs ~]# pcs status
Cluster name: cluster
Stack: corosync
Current DC: node1 (version 1.1.20-5.el7-3c4c782f70) - partition with quorum
Last updated: Wed Mar 31 10:19:19 2021
Last change: Tue Mar 30 12:57:05 2021 by hacluster via crmd on node1
2 nodes configured
1 resources configured
Online: [ node1 node2 ]
Full list of resources:
VirtualIP (ocf::heartbeat:IPaddr2): Started node1
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
[root@pcs ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:9c:95:dc brd ff:ff:ff:ff:ff:ff
inet 192.168.0.7/24 brd 192.168.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.0.10/24 brd 192.168.0.255 scope global secondary ens33
valid_lft forever preferred_lft forever
inet6 fe80::aabb:cc6a:267e:53e5/64 scope link noprefixroute
valid_lft forever preferred_lft forever
9) Apache 구축 (/var/www/html/index.html 에 아래 내용을 삽입한다. (Node1,2)
[root@pcs ~]# yum -y install httpd
[root@pcs ~]# ssh root@192.168.0.8 yum -y install httpd
[root@pcs ~]# cat /etc/httpd/conf.d/status.conf
<Location /server-status>
SetHandler server-status
Require local
</Location>
10) Apache Resource 생성
[root@pcs ~]# pcs resource create Apache ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=1min
[root@pcs ~]# pcs resource op defaults
No defaults set
[root@pcs ~]# pcs resource op defaults timeout=60s
pcs resource op defaults
11) constraint 설정 ( Apache와 VirtualIP를 묶어 하나의 Node 에 실행)
[root@pcs ~]# pcs constraint colocation add Apache with VirtualIP INFINITY
[root@pcs ~]# pcs status
Cluster name: cluster
Stack: corosync
Current DC: cnode1 (version 1.1.20-5.el7-3c4c782f70) - partition with quorum
Last updated: Wed Mar 31 10:46:45 2021
Last change: Wed Mar 31 10:26:35 2021 by root via cibadmin on cnode1
2 nodes and
2 resources configured
Online: [ node1 node2 ]
Full list of resources:
VirtualIP (ocf::heartbeat:IPaddr2): Started node1
Apache (ocf::heartbeat:apache): Started node1
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
12) Failover test (node1 -> node2)
#Node1
[root@pcs ~]# pcs node standby
#Node2
[root@pcs ~]# pcs status
Cluster name: cluster
Stack: corosync
Current DC: node1 (version 1.1.20-5.el7-3c4c782f70) - partition with quorum
Last updated: Wed Mar 31 11:04:08 2021
Last change: Wed Mar 31 11:04:00 2021 by root via cibadmin on node1
2 nodes configured
14 resources configured
Node cnode1: standby
Online: [ node2 ]
Full list of resources:
VirtualIP (ocf::heartbeat:IPaddr2): Started node2
Apache (ocf::heartbeat:apache): Started node2
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
현재처럼 Active-Stanby 구조가 아닌, Active-Active CrossHA 구성도 가능합니다.
이외에 추가Resource 는 굉장히 많기에, 개념정도는 여기까지 작성하겠습니다.
질문 사항 댓글 남겨주세요.
반응형
'👨🏻💻Infra > 📡HA' 카테고리의 다른 글
CentOS6 GFS2 (0) | 2021.04.13 |
---|---|
CentOS7 DRBD (0) | 2021.03.29 |
CentOS6 Heartbeat (0) | 2019.10.22 |