Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

안정된 동기화(Stable

...

Resync)

1:N 복제 구성은 N 노드간의 복제를 위한 복제는 N 노드 간 연결을 모두 성립하기 때문에 노드의 개수가 증가할 수록 네트워크 토폴로지적으로 토폴로지 상 더욱 복잡한 메쉬 네트워크 구성형태를 가지게 됩니다. 이렇게 복잡한 구성 환경에서는 노드 간 복제 데이터와 동기화 데이터의 이동에 따른 방향성과 관련한 일관된 동작 정책을 필요로 합니다.다음의 그림은 복제와 네트워크를 구성합니다. 이와 같이 복잡한 연결 환경에서 필요한 일관성 있는 bsr의 동기화 정책에 대해 알아 보겠습니다.

다음 2개의 그림은 노드 간의 복제의 방향과 동기화의 방향이 같거나 또는 다른 경우를 표현합니다보여줍니다.

...

복제와 동기화의 방향이 같으면 문제될 것이 없습니다. 그러나 . 다른 경우 두 번째 경우가 문제 입니다. 복제 소스 노드와 동기화 소스노드가 다르고 이를 하나의 타깃 노드에서 수신한다면 노드 간의 데이터 정합성을 보장하지 못하는 잠재적 문제를 갖게 됩니다동기화 소스 노드가 다르다고 할 때, 복제와 동기화 데이터를 하나의 타깃에서 수신한다면 전체 노드의 데이터 정합성이 깨질 수 있습니다. Primary 로 부터 수신하는 복제 데이터는 항상 최신 데이터 이지만 다른 Secondary 동기화 소스로 부터 수신한 데이터 블럭은 예전 데이터일 수 있습니다. 서로 다른 소스로 부터 수신한 데이터가 겹치는 블럭 영역에 걸쳐있다면 일부는 최신이지만 일부는 예전 데이터로 기록될 수 있기 때문입니다.

우리는 이 문제를 노드들 간의 복제와 동기화의 방향이 일치되도록 강제하여 N 노드 강제하고 능동적으로 중재하여 메쉬 네트워크에서의 정합성을 보장하도록 하였습니다. 이러한 . 이것을 Stable 동기화 정책으로 명명합니다.

동기화 정책을 구현하기 위해 설명하기에 앞서 관련된 몇 가지 배경이 되는 개념을 설명합니다개념에 대해 이해가 필요합니다.

  • 안정(Stable) 노드는 Primary 노드 또는 Primary 노드와 연결되지 않은 SyncTarget이 아닌 Secondary 노드 입니다.

  • 불안정(Unstable) 노드는 primary 노드와 연결된 노드, 싱크타겟인 Secondary 노드 입니다. 자신의 데이터가 계속 변경됩니다.

  • 권한(Authoritative) 노드는 자신을 Unstable 노드로 만든 상대노드이며 Authoritative 노드는 동시에 안정(Stable) 노드 입니다.

...

이와 같은 개념 하에 아래 다음과 같은 동기화 정책이 bsr 에 구현됩니다작동합니다.

  • 안정 노드는 SyncSource 가 될 수 있으며, 불안정 노드는 SyncSource가 될 수 없습니다.

  • 상황에 따라 SyncSource 노드가 불안정 노드가 되면 진행 중이던 동기화가 중단됩니다. 이후 상황이 바뀌어서 바뀌어 불안정 노드가 안정노드 상태로 다시 안정노드로 전환되면 중지 되었던 동기화가 재개 됩니다.

  • 절체 등을 통해 한 노드가 Primary 가 Primary로 승격 되면 중단되었던 동기화가 Primary 노드를 SyncSource 로 하여 재개 됩니다. 여기서 동기화는 이전에 중단됬던 중단 됬던 블럭 이후 부터 이어서 동기화 합니다.

아래의 그림을 통해 위 과정을 도식화 하였습니다.

...

이와 같이 동기화와 복제의 방향을 일치시키는 정책을 Stable 동기화 정책으로 명명하였습니다.

재조정 동기화(reconciliation resync)

...

조정 동기화(Reconciliation Resync)


Primary 노드가 2개의 Secondary 노드로 실시간 복제를 수행하는 수행하던 도중 Primary 가 Crash 되어 Secondary 두 노드만 남겨진 경우, 남겨졌을 때 두 Secondary 노드는 정합성이 일치하는 같은 데이터가 있다고 보장되지 않습니다. UpToDate 임에도 서로 완전히 같은 데이터라고 보장할 수 없습니다. 각각의 노드는 Primary 와의 복제를 개별적으로 처리했기 때문입니다. 남겨진 두 노드가 별다른 조치 없이 UpToDate 인 상태로 운영된다면 이는 불일치한 데이터를 최신데이터로 간주하여 운영하게 되므로 정합성 문제가 발생합니다. bsr은 이 상황에서 Secondary 노드들 간에 가장 최신의 데이터를 보유하고 있는 노드를 정하고 이 최신노드를 기준으로 동기화하여 두 노드간의 데이터 정합성을 일치 시켜줄 필요가 있습니다데이터를 일치 시킵니다. 이를 재조정 동기화라고 합니다. 재조정 동기화는 각자가 가진 일련의 복제 데이터 순서 번호를 상호 확인하여 누가 더 최신인지를 비교하는 과정을 통해 최신 노드를 결정하고 동기화 합니다.

...

조정동기화라고 합니다.

이렇게 두 노드의 데이터를 맞춰두어야 Crash 되었던 Primary 노드가 나중에 재 기동하여 클러스터에 합류하거나 또는 그렇지 않은 운영상황에서도 노드들 간의 정합성을 보장할 수 있게 됩니다.

...