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 ~]#
로그인하면 댓글을 남길 수 있습니다.
  • pacemaker_with_rhel7_part_10_-_configure_redundant_corosync_links_on_fly.txt
  • 마지막으로 수정됨: 2017/03/17 17:34
  • 저자 koov