Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 두 노드가 실제 클러스터의 멤버인지 결정할 때 (같은 클러스터 내의 노드가 아닌 우연한 연결에 대한 식별)

  • 노드 간 백그라운드 재동기화의 방향을 결정할 때

  • 전체 재동기화가 필요한지 혹은 부분 재동기화로 충분한지 결정할 때

  • 스플릿 브레인(이하 SB)을 식별할 때

생성 식별자

bsr은 다음의 경우에서 새로운 데이터 생성(Data Generation)이 시작되었음을 표시합니다.

...

따라서, 리소스가 Connected 연결 상태에 있고 양 노드의 디스크 상태가 UpToDate 이면 양 노드의 현재 GI는 동일하다 라고 할 수 있습니다. 반대의 경우도 마찬가지입니다.
모든 새로운 데이터 생성은 8 바이트의 UUID(universally unique identifier) 로 식별합니다. UUID의 최하위 비트는 노드의 역할을 표현하며 Primary는 1, Secondary는 0으로 설정됩니다. 

GI 튜플

bsr은 로컬 리소스 메타 데이타 내에 현재와 과거의 데이터 생성(data generation) 정보를 기본적으로 4개(Tuple)로 관리합니다.

...

이 4가지 모두를 묶어서 "generation identifier tuple" 또는 짧게 "GI 튜플" 이라고 합니다.

GI 변경 과정

새로운 데이터 생성 시작

  • 노드간 연결이 끊어 질 때 (네트워크 오류, 수동조작 포함)

  • 연결된 상태에서 상대 노드의 디스크가 복제 데이터를 반영할 수 없는 상태 일 경우(peer-disk:Outdated) 

...

UUID는 볼륨에 쓰기 I/O 가 발생 되었을 때 신규로 생성됩니다. 따라서 GI가 생성되는 보다 더 정확한 조건은 연결이 끊어지는 등의 기존 조건에 더해 볼륨의 쓰기 I/O 발생이 요구됩니다.

재동기화 시작

재동기화가 시작될 때 GI 튜플의 변화는 없습니다.

재동기화 완료

...

재동기화가 완료되면 동기화 소스는 비트맵 uuid 를 rotate 시키고 동기화 타겟은 동기화 소스의 GI 튜플 전체 셋을 수신하여 동일하게 반영합니다.

GI 상태 식별

노드간에 연결이 맺어지면 두 노드는 현재 사용할 수 있는 GI 를 교환하고, 거기에 맞춰서 적절한 동작을 진행하는데 여기엔 몇가지 동작이 존재합니다.

...