코딩공부/백엔드개발 공부

[Hazelcast] Split-Brain Protection이란

내일의기대 2023. 12. 21. 00:55

본 글에서는 Hazelcast의 Split-Brain Protection에 개념에 대해서 다룹니다. 요약하면 클러스터에 참여하고 있는 구성원 수가 특정 수 아래로 떨어지면 transaction을 막는 기능입니다.

1. Split-Brain Protection 개념

공식 문서에서는 다음과 같이 소개하고 있습니다.
" Hazelcast에서 제공하는 Split-Brain Protection는 클러스터 구성원 수가 지정된 구성원 수 아래로 떨어지는 경우 클러스터를 보호합니다. Split-Brain Protection 시나리오에 대응하는 방법은 데이터의 Consistency가 중요한지 애플리케이션의 Availability가 중요한지에 따라 달라집니다. 두 경우 모두 분할 브레인 시나리오는 네트워크 오류로 인해 발생하므로 네트워크 오류를 식별하고 수정하기 위한 노력을 시작해야 합니다. 네트워크 오류가 수정될 때까지 클러스터를 안정적인 상태로 돌릴 수 없습니다. Consistency가 주요 관심사라면 Hazelcast의 Split-Brain Protection 기능을 사용할 수 있습니다."
즉 Cluster에 참여 구성원 수가 지정된 값 이하로 떨어지면 Transaction을 수행하지 않고 Exception을 발생시키는 기능입니다. 문서에 의하면 SplitBrainProtectionException를 발생시킨다고 합니다.

 

2. Split-Brain Protection Function

공식 문서에서는 Hazelcast에서 제공하는 Split-Brain Protection의 두 가지 방법을 소개하고 있는데요, 각각은 다음과 같습니다.

- Member Count Split-Brain Protection
Cluster membership manager에서 판단하는 Member의 숫자로 판단하는 방법입니다. 예제 코드는 다음과 같습니다. 아래와 같이 설정하였다면 Cluster member가 4명 이하로 떨어질 경우 Transaction이 불가능하게 됩니다.

SplitBrainProtectionConfig splitBrainProtectionConfig = new SplitBrainProtectionConfig();
splitBrainProtectionConfig.setName("splitBrainProtectionRuleWithFourMembers")
                .setEnabled(true)
                .setMinimumClusterSize(4);

MapConfig mapConfig = new MapConfig();
mapConfig.setSplitBrainProtectionName("splitBrainProtectionRuleWithFourMembers");

Config config = new Config();
config.addSplitBrainProtectionConfig(splitBrainProtectionConfig);
config.addMapConfig(mapConfig);

- Probabilistic Split-Brain Protection Function
Cluster membership manager를 사용하지 않고 Phi Accrual Cluster Failure Detector를 사용하는 방법입니다. 참고로 Phi Accrual Failure Detector는 Heartbeat을 사용하여 node failure를 발견하는 방법으로 다음 링크에서 자세한 설명을 보실 수 있습니다. 

SplitBrainProtectionConfig splitBrainProtectionConfig =
        SplitBrainProtectionConfig.newProbabilisticSplitBrainProtectionConfigBuilder("probabilist-splitBrainProtection", 3)
                .withAcceptableHeartbeatPauseMillis(5000)
                .withMaxSampleSize(500)
                .withSuspicionThreshold(10)
                .build();
splitBrainProtectionConfig.setProtectOn(SplitBrainProtectionOn.READ_WRITE);
SetConfig setConfig = new SetConfig("split-brain-protected-set");
setConfig.setSplitBrainProtectionName("probabilist-splitBrainProtection");
Config config = new Config();
config.addSplitBrainProtectionConfig(splitBrainProtectionConfig);
config.addSetConfig(setConfig);
  • acceptable-heartbeat-pause-millis: 이상으로 간주되기 전에 허용되는 잠재적으로 손실/지연된 Heartbeats 수에 해당하는 Miliseconds 기간입니다. 이 값은 Garbage Collection이나 네트워크 Failure 등으로 인해 Heartbeats 도착이 갑자기 혹은 간헐적으로 중단되는 상황을 해결하는데 중요합니다. 이 값은 [Heartbeats Interval, 최대 Heartbeats 가 없을 수 있는 Interval] 범위에 있어야 합니다. 그렇지 않으면 Hazelcast가 구동되지 않습니다. 기본값은 60000 milliseconds입니다.
  • suspicion-threshold: suspiction에 대한 Threshold(ψ) 수준입니다. Threshold가 낮으면 잘못된 Suspiction이 많이 발생하기 쉽지만 실제 Failure가 발생한 경우 빠른 감지가 가능합니다. 반대로 Threshold 이 높으면 오탐이 낮지만 실제 Failure를 감지하는 데 더 많은 시간이 필요합니다. 기본값은 10 입니다.
  • max-sample-size: Heartbeats의 도착 시간간의 평균 및 표준 편차를 계산하는 데 사용할 샘플 수입니다. 기본값은 200 입니다.
  • heartbeat-interval-millis: 처음에는 환경을 알 수 없기 때문에 표준 편차가 다소 높은 기간에 해당하는 기간을 생략하는 Bootstrap 기간입니다. 기본값은 5000 Milliseconds입니다.
  • min-std-deviation-millis: phi를 계산할 때 사용되는 정규 분포에 사용할 최소 표준 편차(milliseconds)입니다. 표준 편차가 너무 낮으면 Heartbeats 간 도착 시간의 편차에 대한 민감도가 너무 높아질 수 있습니다. 기본값은 100 milliseconds입니다.

 

3. 결론

본 글에서는 Split-Brain Protection 개념에 대해서 알아보고 Hazelcast에서 제공하는 두 가지 Function에 대해서 알아보았습니다. 제가 구축하고자 하는 환경은 Transaction을 제공하는게 더 좋은 Availability가 더 중요한 환경이라 해당 기능을 안쓸것 같지만 추후 Data Consistency가 중요한 환경에서는 사용할 것 같습니다. 다만 Phi Accrual Cluster Failure Detector의 사용을 위해서는 정확한 알고리즘에 대한 이해가 추후 필요할 것 같습니다. 

 

참고자료

https://docs.hazelcast.com/hazelcast/latest/network-partitioning/split-brain-protection

 

Split-Brain Protection

Split-brain protection mechanism provided in Hazelcast protects your cluster in case the number of cluster members drops below the specified one. How to respond to a split-brain scenario depends on whether consistency of data or availability of your applic

docs.hazelcast.com