Versions Compared

Key

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

...

  • When deciding whether two nodes are members of a same cluster (identification of accidental connections, not nodes in the same cluster)

  • When determining the direction of background resynchronization between nodes

  • When deciding whether full resynchronization is necessary or partial resynchronization

  • When identifying the split brain

Generation Identifiers

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

  • 초기 전체 동기화 시

  • disconnected 된 리소스가 Primary 역할로 승격할 때

  • Primary 역할의 리소스가 disconnecting 될 때

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

GI 튜플

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

  • Current UUID - 로컬노드의 현재 data generation에 대한 GI(생성 식별자)입니다. 리소스가 Connected 상태이고 동기화가 된 상태라면 이 Current UUID 는 양 노드 동일합니다.

  • Bitmap UUID - 디스크상의 동기화 비트맵의 변화를 추적하는 UUID입니다. 디스크의 동기화 비트맵 자체를 보면, 이 식별자는 disconnected 모드 상태에서만 관련이 있습니다. 만일 리소스가 Connected 라면 이 UUID는 항상 비어(zero)있게 됩니다.

  • Two Historical UUIDs - 현재의 Current UUID의 이전의 상태였던 data generation 식별자들이며 2개를 기억하고 있습니다. 

이 4가지 모두를 묶어서 "generation identifier tuple" 또는 짧게 "GI 튜플" 이라고 합니다bsr considers that new data generation has started in the following cases and creates a new GI.

  • At initial full sync

  • When a disconnected resource is promoted to the primary role

  • When the primary role resource is disconnected

    • The time when a new GI is created is when write I/O occurs on the disk and the actual data is changed.

So, if the resource is in a Connected state and the disk status of both nodes is UpToDate, then the current GI of both nodes is the same. The opposite is also true. all new data generation is identified by an 8-byte universally unique identifier (UUID). The least significant bit of the UUID represents the role of the node, Primary is set to 1, Secondary is set to 0.

GI tuple

bsr basically manages current and past data generation information in local resource metadata as four (Tuple).

  • Current UUID - Generation identifier (GI) for the current data generation of the local node. If the resource is Connected and synchronized, this Current UUID is the same for both nodes.

  • Bitmap UUID - A UUID that tracks changes to the sync bitmap on disk. The sync bitmap identifier of the disk is only relevant in disconnected mode. If the resource is Connected, this UUID is always zero.

  • Two Historical UUIDs - These are the data generation identifiers that were in the previous state of the Current UUID, and remember two.

All four are collectively called "generation identifier tuple" or "GI tuple" for short.

GI 변경 과정

새로운 데이터 생성 시작

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

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

...