차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

pacemaker_with_rhel7_part_10_-_configure_redundant_corosync_links_on_fly [2017/03/17 17:34] (현재)
koov 만듦
줄 1: 줄 1:
 +====== 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 구성을 확인 하십시오.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +2. Corosync는 mcastport (mcast 수신 용) 및 mcastport-1 (mcast 전송 용)의 두 UDP 포트를 사용합니다.
 +
 +  * mcast 수신 : 5405
 +  * mcast 발신 : 5404
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 + 
 +
 +3. Corosync 구성 파일은 ''/​etc/​corosync''​에 있습니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 +
 +4. corosync-cfgtool을 사용하여 현재 링 상태를 확인합니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +Corosync 용으로 하나의 링 만 구성되었으며 각 노드에서 다음 인터페이스를 사용함을 알 수 있습니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +===== 새 링 구성 =====
 +
 +5. corosync 링크에 중복을 추가하려면 두 노드에서 다음 인터페이스를 사용합니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 +Corosync 전용 사설 주소 링크 : 
 +172.16.0.3 - UA-HA-HB2 ​
 +172.16.0.2 - UA-HA2-HB2
 +
 + 
 +
 +6. corosync 구성을 변경하기 전에 클러스터를 유지 관리 모드로 이동해야합니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 +결과적으로 리소스가 관리되지 않는 상태가됩니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +7. 두 노드 모두에서 ''/​etc/​hosts''​를 다음 항목으로 업데이트합니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +8. corosync.conf를 rrp_mode & ring1_addr로 갱신하십시오.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +이전 구성 파일과 새로운 구성 파일의 차이점은 다음과 같습니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +9. 두 노드 모두에서 corosync 서비스를 다시 시작합니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[root@UA-HA ~]# systemctl restart corosync
 +[root@UA-HA ~]# ssh UA-HA2 systemctl restart corosync
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +10. corosync 서비스 상태를 확인하십시오.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +11. pcs 명령을 사용하여 corosync 구성을 확인하십시오.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +12. 링 상태를 확인하십시오.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +다음 명령을 사용하여 링 상태를 확인할 수도 있습니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 +corosync에 대한 중복 링을 성공적으로 구성했습니다.
 +
 + 
 +
 +13. 클러스터 유지 보수 모드를 지우십시오.
 +
 +<WRAP prewrap>
 +<code bash>
 +[root@UA-HA ~]# pcs property unset maintenance-mode
 +</​code>​
 +</​WRAP>​
 +
 +
 +또는 ​
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 +
 +===== 테스트 =====
 +
 +구성된 인터페이스 중 하나에서 네트워크 케이블을 당겨 rrp_mode를 쉽게 테스트 할 수 있습니다. 방금 "​ifconfig br0 down"​명령을 사용하여 UA-HA2 노드에서이 테스트를 시뮬레이션했습니다. 응용 프로그램 / DB가 다른 인터페이스를 사용한다고 가정합니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +링 상태를 확인하십시오. 링 0 에 결함이 있음을 알 수 있습니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 + 
 +
 +클러스터가 아무 문제없이 완벽하게 실행되고 있음을 알 수 있습니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
 +''​ifconfig br0 up''​을 사용하여 br0 인터페이스를 시작하십시오. 링 0 가 온라인 상태로 돌아갑니다.
 +
 +<WRAP prewrap>
 +<code bash>
 +[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 ~]#
 +</​code>​
 +</​WRAP>​
 +
  
  • pacemaker_with_rhel7_part_10_-_configure_redundant_corosync_links_on_fly.txt
  • 마지막으로 수정됨: 2017/03/17 17:34
  • 저자 koov