Pacemaker With RHEL7 Part 10 - Configure Redundant Corosync Links on Fly
원본출처 : http://www.unixarena.com/2016/01/rhel-7-pacemaker-define-the-resource-behaviour.html
Corosync 클러스터 엔진은 클러스터 노드간에 안정적인 클러스터 간 통신을 제공합니다. 항상 클러스터 노드간에 클러스터 구성을 동기화 합니다. 또한 클러스터 멤버쉽을 유지 관리하고 쿼럼이 성취 또는 손실되었을 때 이를 알려줍니다. 클러스터 내의 메시징 계층을 제공하여 시스템 및 자원 가용성을 관리합니다. Veritas 클러스터에서 이 기능은 LLT + GAB (Low Latency Transport + Global Atomic Broadcast)에 의해 제공되었습니다. 베리타스 클러스터와 달리 Corosync는 기존 네트워크 인터페이스를 사용하여 클러스터 노드와 통신합니다.
redundant corosync 링크가 필요한 이유는 무엇입니까?
기본적으로 기본 노드 IP에 대한 실제 네트워크 인터페이스 몇 개를 집계하여 네트워크 본딩을 구성합니다. Corosync는 기본 구성에서 heartbeat 링크로 이 인터페이스를 사용합니다. 네트워크에 문제가 있고 두 노드 사이의 네트워크 연결이 끊어지면 클러스터가 Split-Brain 상황에 직면 할 수 있습니다. Split-Brain을 피하기 위해 추가 네트워크 링크를 구성하고 있습니다. 이 네트워크 링크는 다른 네트워크 스위치로 구성되어야하며 두 노드 사이에서 직접 네트워크 케이블을 사용할 수도 있습니다.
참고 : 튜토리얼을 간소화하기 위해 corosync에 유니 캐스트 (멀티 캐스트 아님)를 사용합니다. 유니 캐스트 방법은 두 개의 노드 클러스터에 적합해야합니다.
추가 corosync 링크를 구성하는 것은 온라인 작업이며 서비스에 영향을 주지 않고 수행 할 수 있습니다.
기존 구성을 탐색 해 보겠습니다.
1. pcs 명령을 사용하여 corosync 구성을 확인 하십시오.
[root@UA-HA ~]# pcs cluster corosync totem { version: 2 secauth: off cluster_name: UABLR transport: udpu } nodelist { node { ring0_addr: UA-HA nodeid: 1 } node { ring0_addr: UA-HA2 nodeid: 2 } } quorum { provider: corosync_votequorum two_node: 1 } logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes } [root@UA-HA ~]#
2. Corosync는 mcastport (mcast 수신 용) 및 mcastport-1 (mcast 전송 용)의 두 UDP 포트를 사용합니다.
- mcast 수신 : 5405
- mcast 발신 : 5404
[root@UA-HA ~]# netstat -plantu | grep 54 |grep corosync udp 0 0 192.168.203.134:5405 0.0.0.0:* 34363/corosync [root@UA-HA ~]#
3. Corosync 구성 파일은 /etc/corosync
에 있습니다.
[root@UA-HA ~]# cat /etc/corosync/corosync.conf totem { version: 2 secauth: off cluster_name: UABLR transport: udpu } nodelist { node { ring0_addr: UA-HA nodeid: 1 } node { ring0_addr: UA-HA2 nodeid: 2 } } quorum { provider: corosync_votequorum two_node: 1 } logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes } [root@UA-HA ~]#
4. corosync-cfgtool을 사용하여 현재 링 상태를 확인합니다.
[root@UA-HA ~]# corosync-cfgtool -s Printing ring status. Local node ID 1 RING ID 0 id = 192.168.203.134 status = ring 0 active with no faults [root@UA-HA ~]# ssh UA-HA2 corosync-cfgtool -s Printing ring status. Local node ID 2 RING ID 0 id = 192.168.203.131 status = ring 0 active with no faults [root@UA-HA ~]#
Corosync 용으로 하나의 링 만 구성되었으며 각 노드에서 다음 인터페이스를 사용함을 알 수 있습니다.
[root@UA-HA ~]# ifconfig br0 br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.203.134 netmask 255.255.255.0 broadcast 192.168.203.255 [root@UA-HA ~]# ssh UA-HA2 ifconfig br0 br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.203.131 netmask 255.255.255.0 broadcast 192.168.203.255 [root@UA-HA ~]#
새 링 구성
5. corosync 링크에 중복을 추가하려면 두 노드에서 다음 인터페이스를 사용합니다.
[root@UA-HA ~]# ifconfig eno33554984 eno33554984: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.0.3 netmask 255.255.255.0 broadcast 172.16.0.255 [root@UA-HA ~]# ssh UA-HA2 ifconfig eno33554984 eno33554984: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.0.2 netmask 255.255.255.0 broadcast 172.16.0.255 [root@UA-HA ~]#
Corosync 전용 사설 주소 링크 :
172.16.0.3 - UA-HA-HB2
172.16.0.2 - UA-HA2-HB2
6. corosync 구성을 변경하기 전에 클러스터를 유지 관리 모드로 이동해야합니다.
[root@UA-HA ~]# pcs property set maintenance-mode=true [root@UA-HA ~]# pcs property show maintenance-mode Cluster Properties: maintenance-mode: true [root@UA-HA ~]#
결과적으로 리소스가 관리되지 않는 상태가됩니다.
[root@UA-HA ~]# pcs resource Resource Group: WEBRG1 vgres (ocf::heartbeat:LVM): Started UA-HA (unmanaged) webvolfs (ocf::heartbeat:Filesystem): Started UA-HA (unmanaged) ClusterIP (ocf::heartbeat:IPaddr2): Started UA-HA (unmanaged) webres (ocf::heartbeat:apache): Started UA-HA (unmanaged) Resource Group: UAKVM2 UAKVM2_res (ocf::heartbeat:VirtualDomain): Started UA-HA2 (unmanaged) [root@UA-HA ~]#
7. 두 노드 모두에서 /etc/hosts
를 다음 항목으로 업데이트합니다.
[root@UA-HA corosync]# cat /etc/hosts |grep HB2 172.16.0.3 UA-HA-HB2 172.16.0.2 UA-HA2-HB2 [root@UA-HA corosync]#
8. corosync.conf를 rrp_mode & ring1_addr로 갱신하십시오.
[root@UA-HA corosync]# cat corosync.conf totem { version: 2 secauth: off cluster_name: UABLR transport: udpu rrp_mode: active } nodelist { node { ring0_addr: UA-HA ring1_addr: UA-HA-HB2 nodeid: 1 } node { ring0_addr: UA-HA2 ring1_addr: UA-HA2-HB2 nodeid: 2 } } quorum { provider: corosync_votequorum two_node: 1 } logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes } [root@UA-HA corosync]#
이전 구성 파일과 새로운 구성 파일의 차이점은 다음과 같습니다.
[root@UA-HA corosync]# sdiff -s corosync.conf corosync.conf_back rrp_mode: active < ring1_addr: UA-HA-HB2 < ring1_addr: UA-HA2-HB2 < [root@UA-HA corosync]#
9. 두 노드 모두에서 corosync 서비스를 다시 시작합니다.
[root@UA-HA ~]# systemctl restart corosync [root@UA-HA ~]# ssh UA-HA2 systemctl restart corosync
10. corosync 서비스 상태를 확인하십시오.
[root@UA-HA ~]# systemctl status corosync ● corosync.service - Corosync Cluster Engine Loaded: loaded (/usr/lib/systemd/system/corosync.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2015-10-19 02:38:16 EDT; 16s ago Process: 36462 ExecStop=/usr/share/corosync/corosync stop (code=exited, status=0/SUCCESS) Process: 36470 ExecStart=/usr/share/corosync/corosync start (code=exited, status=0/SUCCESS) Main PID: 36477 (corosync) CGroup: /system.slice/corosync.service └─36477 corosync Oct 19 02:38:15 UA-HA corosync[36477]: [QUORUM] Members[2]: 2 1 Oct 19 02:38:15 UA-HA corosync[36477]: [MAIN ] Completed service synchronization, ready to provide service. Oct 19 02:38:16 UA-HA systemd[1]: Started Corosync Cluster Engine. Oct 19 02:38:16 UA-HA corosync[36470]: Starting Corosync Cluster Engine (corosync): [ OK ] Oct 19 02:38:24 UA-HA corosync[36477]: [TOTEM ] A new membership (192.168.203.134:3244) was formed. Members left: 2 Oct 19 02:38:24 UA-HA corosync[36477]: [QUORUM] Members[1]: 1 Oct 19 02:38:24 UA-HA corosync[36477]: [MAIN ] Completed service synchronization, ready to provide service. Oct 19 02:38:25 UA-HA corosync[36477]: [TOTEM ] A new membership (192.168.203.131:3248) was formed. Members joined: 2 Oct 19 02:38:26 UA-HA corosync[36477]: [QUORUM] Members[2]: 2 1 Oct 19 02:38:26 UA-HA corosync[36477]: [MAIN ] Completed service synchronization, ready to provide service. [root@UA-HA ~]#
11. pcs 명령을 사용하여 corosync 구성을 확인하십시오.
[root@UA-HA ~]# pcs cluster corosync totem { version: 2 secauth: off cluster_name: UABLR transport: udpu rrp_mode: active } nodelist { node { ring0_addr: UA-HA ring1_addr: UA-HA-HB2 nodeid: 1 } node { ring0_addr: UA-HA2 ring1_addr: UA-HA2-HB2 nodeid: 2 } } quorum { provider: corosync_votequorum two_node: 1 } logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes } [root@UA-HA ~]#
12. 링 상태를 확인하십시오.
[root@UA-HA ~]# corosync-cfgtool -s Printing ring status. Local node ID 1 RING ID 0 id = 192.168.203.134 status = ring 0 active with no faults RING ID 1 id = 172.16.0.3 status = ring 1 active with no faults [root@UA-HA ~]# ssh UA-HA2 corosync-cfgtool -s Printing ring status. Local node ID 2 RING ID 0 id = 192.168.203.131 status = ring 0 active with no faults RING ID 1 id = 172.16.0.2 status = ring 1 active with no faults [root@UA-HA ~]#
다음 명령을 사용하여 링 상태를 확인할 수도 있습니다.
[root@UA-HA ~]# corosync-cmapctl |grep member runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(192.168.203.134) r(1) ip(172.16.0.3) runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.1.status (str) = joined runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(192.168.203.131) r(1) ip(172.16.0.2) runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.2.status (str) = joined [root@UA-HA ~]#
corosync에 대한 중복 링을 성공적으로 구성했습니다.
13. 클러스터 유지 보수 모드를 지우십시오.
[root@UA-HA ~]# pcs property unset maintenance-mode
또는
[root@UA-HA ~]# pcs property set maintenance-mode=false [root@UA-HA ~]# pcs resource Resource Group: WEBRG1 vgres (ocf::heartbeat:LVM): Started UA-HA webvolfs (ocf::heartbeat:Filesystem): Started UA-HA ClusterIP (ocf::heartbeat:IPaddr2): Started UA-HA webres (ocf::heartbeat:apache): Started UA-HA Resource Group: UAKVM2 UAKVM2_res (ocf::heartbeat:VirtualDomain): Started UA-HA2 [root@UA-HA ~]#
테스트
구성된 인터페이스 중 하나에서 네트워크 케이블을 당겨 rrp_mode를 쉽게 테스트 할 수 있습니다. 방금 “ifconfig br0 down”명령을 사용하여 UA-HA2 노드에서이 테스트를 시뮬레이션했습니다. 응용 프로그램 / DB가 다른 인터페이스를 사용한다고 가정합니다.
[root@UA-HA ~]# ping UA-HA2 PING UA-HA2 (192.168.203.131) 56(84) bytes of data. ^C --- UA-HA2 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 1002ms [root@UA-HA ~]#
링 상태를 확인하십시오. 링 0 에 결함이 있음을 알 수 있습니다.
[root@UA-HA ~]# corosync-cfgtool -s Printing ring status. Local node ID 1 RING ID 0 id = 192.168.203.134 status = Marking ringid 0 interface 192.168.203.134 FAULTY RING ID 1 id = 172.16.0.3 status = ring 1 active with no faults [root@UA-HA ~]#
클러스터가 아무 문제없이 완벽하게 실행되고 있음을 알 수 있습니다.
[root@UA-HA ~]# pcs resource Resource Group: WEBRG1 vgres (ocf::heartbeat:LVM): Started UA-HA webvolfs (ocf::heartbeat:Filesystem): Started UA-HA ClusterIP (ocf::heartbeat:IPaddr2): Started UA-HA webres (ocf::heartbeat:apache): Started UA-HA Resource Group: UAKVM2 UAKVM2_res (ocf::heartbeat:VirtualDomain): Started UA-HA2 [root@UA-HA ~]#
ifconfig br0 up
을 사용하여 br0 인터페이스를 시작하십시오. 링 0 가 온라인 상태로 돌아갑니다.
[root@UA-HA ~]# corosync-cfgtool -s Printing ring status. Local node ID 1 RING ID 0 id = 192.168.203.134 status = ring 0 active with no faults RING ID 1 id = 172.16.0.3 status = ring 1 active with no faults [root@UA-HA ~]#