펜싱(컴퓨터)
Fencing (computing)펜싱은 컴퓨터 클러스터의 노드를 분리하거나 노드가 오작동하는 것으로 보일 때 공유 리소스를 보호하는 과정이다.[1][2]
클러스터의 노드 수가 증가함에 따라 노드 중 하나가 어느 시점에 실패할 가능성도 증가한다. 장애가 발생한 노드는 회수해야 하는 공유 자원에 대한 제어권을 가질 수 있으며, 노드가 비정상적으로 동작하는 경우 시스템의 나머지 부분을 보호해야 한다. 따라서 펜싱은 노드를 비활성화하거나 공유 스토리지 액세스를 허용하지 않으므로 데이터 무결성을 보장할 수 있다.
기본개념
노드 펜스(또는 I/O fence)는 공유 리소스에 액세스할 수 없는 노드를 해당 리소스와 분리하는 가상 "fence"이다. 백업에서 활성 노드를 분리할 수 있다. 예를 들어 백업이 Fence를 통과하여 기본 디스크와 동일한 디스크 어레이를 제어하려고 하면 데이터 위험이 발생할 수 있다. STONITS와 같은 메커니즘은 이러한 상태를 방지하도록 설계되었다.
노드를 분리하는 것은 I/O가 더 이상 노드로부터 수행되지 않도록 하는 것을 의미한다. 펜싱은 일반적으로 노드 장애 시 리소스를 수정하는 다른 활성 노드로부터 프로세스를 보호하기 위해 공유 Disk 파일 시스템과 같은 클러스터 인프라에 의해 자동으로 수행된다. SCSI의 예비/해제 메커니즘과 같은 펜싱을 지원하는 메커니즘은 적어도 1985년부터 존재해왔다.[3]
실제 실패와 일시적 교수형을 구분할 수 없기 때문에 펜싱이 필요하다. 오작동 노드가 정말로 다운되면 손상을 입힐 수 없으므로 이론적으로는 아무런 조치가 필요하지 않을 것이다(일반적인 결합 프로세스를 통해 간단히 클러스터로 다시 가져올 수 있다). 그러나 오작동하는 노드 자체가 클러스터의 나머지 부분을 오작동하는 것으로 간주할 가능성이 있기 때문에 분할된 뇌 상태가 이어지며 데이터 손상이 발생할 수 있다. 대신 시스템은 최악의 시나리오를 상정하고 문제가 발생할 경우 항상 울타리를 쳐야 한다.
펜싱 접근법
펜싱 방법에는 두 가지 등급이 있는데, 하나는 노드 자체를 비활성화하는 것이고, 다른 하나는 공유 디스크와 같은 자원에 대한 접근을 허용하지 않는 것이다.[1] 어떤 경우에는, 노드가 일정한 시간 유지 후에 응답하지 않는 경우, 예를 들어, 긴 페이징 광란의 경우, 백배수가 있기는 하지만, 비작용으로 가정할 수 있다고 가정한다.[1]
STONITS 방법은 "Shoot The Other Node In The Head"를 의미하며, 이는 의심스러운 노드가 비활성화되거나 전원이 꺼짐을 의미한다. 예를 들어, 파워 펜싱은 작동 불가능한 노드를 끄기 위해 파워 컨트롤러를 사용한다. 그런 다음 노드가 자체적으로 재시작하고 나중에 클러스터에 가입할 수 있다. 그러나, 운영자에게 노드에 대한 수동 재시작의 필요성을 알리는 접근방식이 있다.[1]
리소스 펜싱 접근방식은 노드 전원을 끄지 않고 리소스에 대한 액세스를 허용하지 않는다. 여기에는 다음이 포함될 수 있다.
- 영구 예약 펜싱은 SCSI3 영구 예약을 사용하여 공유 스토리지에 대한 액세스를 차단한다.
- 파이버 채널 펜싱이 파이버 채널 포트를 비활성화함
- GNBD 서버에 대한 액세스를 비활성화하는 GNBD(Global Network Block Device) 펜싱
클러스터에 두 개의 노드만 있는 경우, 예약/해제 방법을 두 개의 노드 STONITS로 사용할 수 있으며, 여기서 노드 B가 '실패'한 것을 감지하면 노드 A가 예약을 발급하고 자체에서 모든 리소스(예: 공유 디스크)를 얻는다. 노드 B는 I/O를 시도하면 비활성화된다(일시적으로 걸려 있는 경우). 노드 B에서 I/O 실패는 노드를 제거하기 위해 일부 코드를 트리거한다.
영구 예약은 기본적으로 키와 일치하므로 올바른 키를 가진 노드가 I/O를 수행할 수 있으며 그렇지 않으면 I/O가 실패한다. 따라서 고장 시 올바른 동작을 보장하기 위해 고장에 대한 키를 변경하면 충분하다. 그러나 실패한 노드에서 키를 항상 변경할 수 있는 것은 아닐 수 있다.
STONITS는 여러 클러스터에서 보다 쉽고 간단하게 구현할 수 있는 방법이지만, 리소스 펜싱에 대한 다양한 접근방식은 각 클러스터 구현에 대한 구체적인 구현 접근방식이 필요하다.[1]
참고 항목
참조
- ^ a b c d e "Alan Robertson Resource fencing using STONITH" (PDF). IBM Linux Research Center. Archived from the original (PDF) on 2021-01-05.
- ^ Sun Cluster 환경: Sun Cluster 2.2 by Enrique Vargas, Joseph Bianco, David Deets 2001 ISBN 페이지 58
- ^ "Small Computer Standards Interface". ANSI X3.131-1986.