Loading...
MySQL 9.5 Reference Manual 9.5의 20.5.4 Distributed Recovery의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
20.5.4.1 Connections for Distributed Recovery
20.5.4.2 Cloning for Distributed Recovery
20.5.4.3 Configuring Distributed Recovery
20.5.4.4 Fault Tolerance for Distributed Recovery
20.5.4.5 How Distributed Recovery Works
멤버가 replication group에 가입하거나 다시 가입할 때마다, 해당 멤버는 자신이 가입하기 전에, 또는 자리를 비운 동안 group 멤버들이 적용한 트랜잭션들을 따라잡아야 합니다. 이 과정을 distributed recovery라고 합니다.
가입 중인 멤버는 먼저 자신의 group_replication_applier 채널용 릴레이 로그를 확인하여, 이미 group으로부터 수신했지만 아직 적용하지 않은 트랜잭션이 있는지 확인합니다. 만약 가입 중인 멤버가 이전에 group에 속해 있었던 경우, 떠나기 전에 남아 있던 미적용 트랜잭션들을 발견할 수 있으며, 이 경우 이를 첫 번째 단계로 적용합니다. group에 새로 합류하는 멤버는 적용할 것이 없습니다.
그 다음에, 가입 중인 멤버는 상태 전송을 수행하기 위해 온라인 상태인 기존 멤버에 연결합니다. 가입 중인 멤버는 기존 멤버(_donor_라고 함)가 제공하는, 자신이 가입하기 전이나 자리를 비운 동안 group에서 발생한 모든 트랜잭션들을 전송받습니다.
이어서, 상태 전송이 진행되는 동안 group에서 발생한 트랜잭션들을 가입 중인 멤버가 적용합니다. 이 과정이 완료되면, 가입 중인 멤버는 group 내 나머지 서버들과 동일한 수준으로 따라잡게 되며, 이후 group에 정상적으로 참여하기 시작합니다.
Group Replication은 distributed recovery 중 상태 전송을 위해 다음 방법들을 조합하여 사용합니다:
clone 플러그인의 기능을 사용하는 원격 클로닝 작업. 이 상태 전송 방법을 활성화하려면, group 멤버들과 가입 중인 멤버에 clone 플러그인을 설치해야 합니다. Group Replication은 필요한 clone 플러그인 설정을 자동으로 구성하고 원격 클로닝 작업을 관리합니다.
donor의 바이너리 로그로부터 복제하고, 해당 트랜잭션들을 가입 중인 멤버에서 적용하는 방법. 이 방법은 donor와 가입 중인 멤버 사이에 설정되는 group_replication_recovery라는 이름의 표준 비동기 복제 채널을 사용합니다.
Group Replication은 가입 중인 멤버에서 START GROUP_REPLICATION을 실행한 후, 상태 전송을 위한 이러한 방법들의 최적 조합을 자동으로 선택합니다. 이를 위해 Group Replication은 어떤 기존 멤버가 donor로 적합한지, 가입 중인 멤버가 donor로부터 얼마나 많은 트랜잭션을 필요로 하는지, 그리고 필요한 트랜잭션 중 어떤 것이든 어떤 group 멤버의 바이너리 로그 파일에도 더 이상 존재하지 않는지 여부를 확인합니다.
가입 중인 멤버와 적합한 donor 사이의 트랜잭션 격차가 크거나, 필요한 트랜잭션 일부가 어떤 donor의 바이너리 로그 파일에도 존재하지 않는 경우, Group Replication은 원격 클로닝 작업으로 distributed recovery를 시작합니다. 트랜잭션 격차가 크지 않거나, clone 플러그인이 설치되어 있지 않은 경우, Group Replication은 donor의 바이너리 로그로부터의 상태 전송으로 바로 진행합니다.
원격 클로닝 작업 동안, 가입 중인 멤버에 존재하던 데이터는 제거되고 donor의 데이터 복사본으로 대체됩니다. 원격 클로닝 작업이 완료되고 가입 중인 멤버가 재시작되면, 원격 클로닝 작업이 진행되는 동안 group이 적용한 트랜잭션들을 가져오기 위해 donor의 바이너리 로그로부터 상태 전송이 수행됩니다.
donor의 바이너리 로그로부터의 상태 전송 동안, 가입 중인 멤버는 donor의 바이너리 로그에서 필요한 트랜잭션들을 복제 및 적용하며, joining 멤버가 group에 합류했다는 내용이 바이너리 로그에 기록된 지점(view change event)까지, 트랜잭션을 수신하는 대로 적용합니다. 이 과정이 진행되는 동안, 가입 중인 멤버는 group이 새로 적용하는 트랜잭션들을 버퍼링합니다. 바이너리 로그로부터의 상태 전송이 완료되면, 가입 중인 멤버는 버퍼링된 트랜잭션들을 적용합니다.
가입 중인 멤버가 group의 모든 트랜잭션과 동기화되면, 온라인으로 선언되고 일반 멤버로서 group에 참여할 수 있으며, distributed recovery는 완료됩니다.
참고
바이너리 로그로부터의 상태 전송은 distributed recovery를 위한 Group Replication의 기본 메커니즘이며, replication group 내 donor와 joining 멤버가 클로닝을 지원하도록 구성되어 있지 않은 경우, 사용할 수 있는 유일한 옵션입니다. 바이너리 로그로부터의 상태 전송은 고전적인 비동기 복제를 기반으로 하기 때문에, group에 합류하는 서버에 group의 데이터가 전혀 없거나, 매우 오래된 백업 이미지에서 가져온 데이터만 있는 경우 매우 오래 걸릴 수 있습니다.
이러한 상황에서는 서버를 group에 추가하기 전에, 이미 group에 속해 있는 서버 중 하나의 비교적 최신 스냅샷을 전송하여 해당 서버를 group의 데이터로 미리 설정하는 것이 권장됩니다. 이렇게 하면 distributed recovery에 소요되는 시간이 최소화되고, donor 서버가 보관하고 전송해야 하는 바이너리 로그 파일 수가 줄어들어 donor 서버에 대한 영향이 감소합니다.
20.5.3 Transaction Consistency Guarantees
20.5.5 Support For IPv6 And For Mixed IPv6 And IPv4 Groups