본문 바로가기

RedHat Product/High Availablility

RHEL Clustering(RHCS) Heartbeat이란?

아래글은 RHCS CLUstering(RHCS)에서의 Heartbeat Networking의 개념에 대해서 하나씩 나열해보며,
몇몇 failure senario 에 대한 테스트 결과를 통해 클러스터가 어떻게 동작하는지 살펴본다.



* Failure of Network Connection
Switch loss, cable disconnected 와 같은 이유로 VIP resource 로 사용되는 네트워크에 장애가 발생하였을 경우 클러스터는 해당 장애를 감지하고 클러스터 서비스를 standby node로 failover 한다. 장애 감지와 failover process 는 완료되는데 30초 미만의 시간이 소요 된다.
Passive 노드에서의 네트워크 장애는 클러스터 서비스에 영향을 주지 않습니다. 하지만 해당 노드로의 failover 동작은 실패 된다.
노드의 네트워크 장애의 복구 또한 클러스터 서비스에 영향을 주지 않고 클러스터서비스는 여전히 active 노드에서 서비스 된다.(No fail-back)


* Failure of ISCSI Connection
iSCSI 로 사용되는 네트워크 장애 발생의 경우 클러스터는 loss 를 감지하고 클러스터서비스를 standy 노드로 failover 한다. 이런 상황에서는 multipath 데몬이 모든 vailid iSCSI path 에 대해 장애를 감지하고 SCSI stack이 disk 에 장애를 감지하는 것이 필요하며 이런 모든 장애 감지와 failover process 는 2~3분의 시간이 소요된다.
감지 시간을 줄이는 설정이 기술적으로는 가능하지만 더 짧은 failover 시간이 필요하지 않는다면 기본 설정을 사용하도록 Redhat support 에서는 권고하고 있습니다. 왜냐하면 이런 timer 의 시간 변경은 네트워크의 interruption 이나 iSCSI path 의 loss 발생의 원인이 될 가능성이 있기 때문입니다. 
이런 경우 클러스터의 premature failover 가 발생합니다.
Passive 노드의 iSCSI connection 장애는 클러스터에 영향을 주지 않습니다. 하지만 해당 노드로의 failover 시도는 실패됩니다.
ISCSI 네트워크의 장애 복구 또한 클러스터에 영향을 주지 않습니다. 클러스터 서비스는 현재의 active 노드에서 유지 됩니다.


* Failure of Heartbeat Connection
Heartbeat 네트워크의 장애 발생 경우 파트너 노드는 failed 된 파트너 노드를 fence 합
니다. 한 예로, 만약 active 노드가 heartbeat 연결을 잃으면 Passive 노드는 현재 실행중
인 active 노드를 fence 합니다. 반면에 passive 노드가 heartbeat 연결을 잃으면 active 노
드가 passive 노드를 fence 합니다. Active 노드가 fence 된 경우에 passive 노드는 클러
스터 서비스를 take over 합니다. 이와 같은 동작의 감지와 failover process 는 30초 내
에 완료 됩니다.
Fence된 노드는 재부팅이 됩니다. 만약 reboot 을 통해 해당 노드의 heartbeat 연결이
복구되면 재부팅 된 노드는 다시 클러스터에 join 하고 passive 노드가 됩니다. 만약
heartbeat 연결이 복구되지 않으면 노드는 클러스터에 rejoin 되지 않습니다.
Heartbeat connection 이 복구되지 않은 상황에서 노드가 올라오고 클러스터 데몬
(cman) 이 실행되는 상황에서 heartbeat 이 복구되면 두 노드는 클러스터 환경을 재구
성하려고 동작합니다. 이런 경우 race condition 이 발생하여 두 노드가 서로를 fence
하려고 합니다. 이런 동작을 통해 passive 노드가 active 노드를 fence 하게 되면 30초
내에 서비스가 failover 됩니다.


* Complete Failover of a Node
active 노드의의 완전한 장애의 경우 (노드의 전원 fault 등) 클러스터 서비스의 manual조정이 수행되어야 합니다. 이는 passive 노드가 failure 노드에 대해 fence를 성공적으로 수행하지 못했기 때문에 발생합니다.
이런 경우 남아있는 passive 노드는 파트너 노드의 failure 를 감지하지만 클러스터 서비스를 시작하지 않습니다. 이는 클러스터가 split-brain 상황에서 data corruption 되지않도록 하기 위함 입니다.
클러스터 서비스를 failover 하기 위해서 관리자는 passive 노드에 접속하여 “fence_ack_manual” 명령을 실행 해야 합니다. 이 명령어는 passive 노드에게 수동으로파트너 노드가 fence 되었다는 것을 알려줍니다. 
그 후 클러스터 서비스가 시작됩니다.
위 상황은 한 노드가 fence port 와 heartbeat port 연결에 대해 모두 장애가 발생하였을경우와 동일합니다. 남아있는 노드는 장애난 파트너 노드를 fence port 연결 불가로 fence 하지 못하기 때문입니다. 
이런 경우 장애난 노드는 지속적으로 스토리지로 접근 할 수 있습니다. 이런 상황의 가능성 때문에 관리자가 장애난 노드를 검증하여 스토리지로 마운트된 경로가 없는지 확인한 후에 “fence_ack_manual”을 수행해야 합니다.