...
bsr에서 복제(replication)와 (재)동기화(resynchronization)는 동작방식도 다르고 구분하는 개념입니다. 복제는 Primary 역할의 리소스의 모든 디스크 쓰기 동작을 Secondary 노드로 실시간 반영하는 동작이고, 동기화는 실기간 쓰기 I/O를 배제한 전체 블록 디바이스 관점에서 데이터를 일치시키는 처리과정 입니다. 복제와 동기화는 개별적으로 동작하지만 동시에 처리될 수도 있습니다.
...
물론 백그라운드에서 동기화가 진행되더라도 Active 노드의 응용 서비스는 중단되거나 하지 않고 계속 운영 가능 합니다.
고정 대역 동기화(Fixed-rate synchronization)
고정 대역 동기화에서는 초당 상대 노드로 동기화하는 데이터 속도를 상한선 내에서 조정할 수 있으며(이를 synchronization rate라고 합니다) 최소값(c-min-rate)과 최대값(c-max-rate)으로 지정할 수 있습니다.
가변 대역 동기화(Variable-rate synchronization)
가변 대역 동기화는 가용한 네트워크의 대역폭을 감지한 후 애플리케이션으로부터 수신된 I/O와 비교하여, 적절한 동기화 속도를 자동적으로 계산합니다. bsr은 가변대역 동기화를 기본 설정으로 합니다.
가변 대역 동기화에 관한 구성은 가변적인 동기화 속도의 설정(Variable sync rate configuration)을 참고하세요.
고정 대역 동기화(Fixed-rate synchronization)
고정 대역 동기화에서는 초당 상대 노드로 동기화하는 데이터 속도를 상한선 내에서 조정할 수 있으며(이를 synchronization rate라고 합니다) 최소값과 최대값을 지정할 수 있습니다.
이 상한선에 의거하여 , 아래와 같은 간단한 수식으로 동기화 시간을 추정할 수 있습니다.
...
tresync 는 동기화 예상 시간입니다.
D는 별다른 영향(복제 링크가 끊어진 상황에서 데이터가 수정되는 등)을 거의 받지 않는다는 가정하에서 동기화될 데이터의 크기를 말합니다.
R은 조정 가능한 동기화율이며 이는 복제 네트워크 환경 및 I/O 서브시스템의 처리능력에 따라 한계 값이 달라집니다.
고정 대역 동기화에 관한 구성은 고정적으로 동기화 속도를 설정하는 방법(Configuring the rate of synchronization)을 참고하세요.
체크섬 기반 동기화(Checksum-based synchronization)
체크섬 데이터 요약을 사용하면 동기화 알고리즘의 효율성을 더욱 개선할 수 있습니다. 체크섬 기반 동기화는 동기화하기 전에 블록을 읽고 현재 디스크에 있는 내용의 해시(hash) 요약을 구한 다음, 상대 노드로부터 같은 섹터를 읽어 구한 해쉬 요약 내용과 비교합니다. 해시 내용이 일치하면 해당 블럭에 대한 동기화 쓰기(re-write)를 생략합니다. 이 방식은 동기화 해야 될 블럭을 단순히 덮어쓰는 방식에 비해 성능에서 유리할 수 있으며 연결이 끊어진(disconnect 상태) 동안 파일 시스템이 섹터에 같은 내용을 다시 썼다면 해당 섹터에 대해선 재동기화를 생략하게 되므로 전체적으로 동기화 시간을 단축시킬 수 있습니다.
체크섬 동기화에 관한 구성은 체크섬 기반 동기화 구성(Configuring checksum-based synchronization)을 참고하세요.
혼잡 모드
bsr은 비동기 복제 시 복제 네트워크의 혼잡도를 감지하여 능동적으로 대처할 수 있는 혼잡모드 기능을 제공합니다. 혼잡모드는 Blocking, Disconnect, Ahead 의 3 가지 동작모드를 제공합니다.
아무 설정도 하지 않을 경우 기본적으로 Blocking 모드입니다. Blocking 모드에서는 TX 송신버퍼에 복제 데이터를 전송할 여유 공간이 생길 때 까지 대기(Blocking)합니다.
복제 연결을 단절하여 로컬 I/O 부하를 일시적으로 해소하도록 disconnect 모드로 설정할 수 있습니다.
복제 연결은 유지한 채 primary 노드의 I/O를 로컬 디스크에 우선 기록하고 해당 영역은 out-of-sync로 기록하여 혼잡이 해제될 경우 재동기화를 자동으로 수행하는 Ahead 모드로 설정할 수 있습니다. Ahead 상태가 된 Primary 노드는 Secondary 노드에 비해 앞서 있는(Ahead) 데이터 상태가 됩니다. 그리고 이 시점에 Secondary는 뒤 쳐진(Behind) 데이터 상태가 되지만 대기노드의 데이터는 일관성은 있는 가용한 상태입니다. 혼잡 상태가 해제되면, 세컨더리로의 복제는 자동으로 재개되고 Ahead 상태에서 복제되지 못했던 out-of-sync 블럭에 대해 백그라운드 동기화를 자동으로 수행합니다. 혼잡모드는 일반적으로 데이터센터 또는 클라우드 인스턴스간의 공유연결을 통한 광역 복제 환경과 같은 가변 대역폭을 가진 네크워크 링크 환경에서 유용합니다.
혼잡 모드 설정에 대한 자세한 내용은 "혼잡모드와 혼잡정책”을 참고하시기 바랍니다.
온라인 데이타 무결성 검사
온라인 무결성 검사는 장치 운영 중에 노드 간의 블록별 데이터의 무결성을 확인하는 기능입니다. 무결성 검사는 네트워크 대역폭을 효율적으로 사용하고 중복된 검사를 하지 않습니다.
온라인 무결성 검사는 한 쪽 노드에서(verification source) 특정 리소스 스토리지상의 모든 데이터 블럭을 순차적으로 암호화 요약(cryptographic digest)시키고, 요약된 내용을 상대 노드(verification target)로 전송하여 같은 블럭위치의 내용을 요약 비교 합니다. 만약 요약된 내용이 일치하지 않으면, 해당 블럭은 out-of-sync로 표시되고 나중에 동기화대상이 됩니다. 여기서 블럭의 전체 내용을 전송하는 것이 아니라 최소한의 요약본만 전송하기 때문에 네트워크 대역을 효과적으로 사용하게 됩니다.
리소스의 무결성을 검증하는 작업은 온라인 중에 검사하기 때문에 온라인 검사와 복제가 동시에 수행될 경우 약간의 복제성능 저하가 있을 수 있습니다. 하지만 서비스를 중단할 필요가 없고 검사를 하거나 검사 이후 동기화 과정 중에 시스템의 다운 타임이 발생하지 않는 장점이 있습니다. 그리고 bsr은 FastSync 를 기본 로직으로 수행하기 때문에 파일시스템이 사용하고 있는 디스크 영역에 대해서만 온라인 검사를 수행하여 보다 더 효율적입니다.
온라인 무결성 검사에 따른 작업은 OS 수준에서 예약된 작업으로 등록하여 운영 I/O 부하가 적은 시간 대에 주기적으로 수행하는 것이 일반적인 사용법입니다. 온라인 무결성 검사를 구성하는 법에 대한 자세한 내용은 온라인 디바이스 검증의 사용(Using on-line device verification)을 참고하세요.
복제 트래픽 무결성 검사
bsr은 암호화 메시지 요약 알고리즘을 사용하여 양 노드 간의 복제 트래픽에 대한 무결성을 실시간 검증할 수 있습니다.
이 기능을 사용하게 되면 Primary는 모든 데이터 블록의 메시지 요약본을 생성하고 그것을 Secondary 노드에게 전달하여 복제 트래픽의 무결성을 확인할 수 있습니다. 만약 요약된 블럭이 일치하지 않으면 재전송을 요청합니다. bsr은 이러한 복제 트래픽 무결성 검사를 통해 다음과 같은 에러 상황들에 대해 소스 데이터를 보호합니다. 만약 이러한 상황들에 대해 미리 대응하지 않는다면 복제 중 잠재적인 데이터 손상이 유발될 수 있습니다.
주 메모리와 전송 노드의 네트워크 인터페이스 사이에서 전달된 데이터에서 발생하는 비트 오류 (비트 플립) (최근 랜카드가 제공하는 TCP 체크섬 오프로드 기능이 활성화 될 경우 이러한 하드웨어적인 비트플립이 소프트웨어 적으로 감지되지 않을 수 있습니다).
네트워크 인터페이스에서 수신 노드의 주 메모리로 전송되는 데이터에서 발생하는 비트 오류(동일한 고려 사항이 TCP 체크섬 오프 로딩에 적용됩니다).
네트워크 인터페이스 펌웨어와 드라이버 내의 버그 또는 경합상태로 인한 손상.
노드간의 재조합 네트워크 구성 요소에 의해 주입 된 비트 플립 또는 임의의 손상(직접 연결, 백투백 연결을 사용하지 않는 경우).
복제 트래픽의 무결성 검사를 활성화하는 방법에 대한 자세한 내용은 복제 트래픽 무결성 검사 설정(Configuring replication traffic integrity checking)을 참고하세요.
스플릿 브레인 통지와 복구
스플릿 브레인(Split brain)은 클러스터 노드들 사이에 모든 네트워크가 단절된 일시적인 장애 상황에서 클러스터 관리 소프트웨어나 관리자의 수동 개입으로 인해 두 개 이상의 노드가 Primary 역할을 가졌던 상황을 말합니다. 이것은 데이터에 대한 수정이 상대 측으로 복제되지 않고 각각의 노드에서 이루어졌다는 것을 암시하며 잠재적인 문제를 발생시킬 수 있는 상황입니다. 이 때문에 데이터가 병합되지 못하고 두 개의 데이터 셋이 만들어질 수도 있습니다.
핫빗(Heartbeat)과 같은 클러스터 노드 간을 관리하는 관리 모듈에서 모든 연결이 끊어졌을 때 판단하는 일반적인 HA 클러스터의 스플릿 브레인과 복제 스플릿 브레인은 구별되어야 합니다. 혼란을 피하기 위하여 앞으로 설명에서는 다음과 같은 규칙을 사용합니다.
스플릿 브레인이라 하면 위의 단락에서 언급한대로 복제 스플릿 브레인을 의미합니다.
클러스터 환경에서의 스플릿 브레인은 클러스터 파티션(cluster partition)이란 용어로 사용합니다. 클러스터 파티션은 특정 노드에서 모든 클러스터 연결이 끊어졌음을 의미합니다.
bsr에서 스플릿 브레인을 감지하면(이메일 또는 다른 방법을 통해) 자동적으로 운영자에게 알릴 수 있습니다. 이 기능을 구성하기 위한 자세한 방법은 스플릿 브레인 동작 설정(split-brain notification)을 참고하세요.
스플릿 브레인이 발생하면 관리자에게는 스플릿 브레인 수동 복구(Manual split brain recovery)가 권장되지만, 경우에 따라서는 그 과정을 자동화하는 것이 좋을 수도 있습니다.
bsr은 스플릿 브레인을 자동 복구할 수 있는 몇 가지 알고리즘을 제공하고 있습니다.
Younger Primary 노드의 수정분 폐기 - 네트워크 연결이 다시 복구 되고 스플릿 브레인이 감지되면, bsr은 최근 Primary 역할로 전환한 노드의 수정분을 폐기합니다.
Older Primary 노드의 수정분 폐기 - 네트워크 연결이 다시 복구 되고 스플릿 브레인이 감지되면, bsr은 먼저 Primary 역할을 가졌던 노드의 수정분을 폐기합니다.
수정 내용이 적은 Primary 데이터 폐기 - bsr은 양쪽 노드에서 수정 내용이 더 적은 쪽 노드를 확인하여 그 노드의 내용을 폐기합니다.
데이터 변경 사항이 없는 호스트로 복구 - 스플릿 브레인 동안 데이터의 수정 이력이 없는 노드가 있다면 bsr은 해당 노드로 복구시키고 스플릿 브레인 해결을 선언합니다. 하지만 이것은 아주 드문 경우입니다. 양쪽 노드에서 리소스 볼륨을 파일시스템에 마운트(심지어 읽기전용)만 하더라도 볼륨 내용은 수정사항이 발생하기 쉬우며, 그 후에는 이 방식으로 자동 복구될 경우는 없을 것 입니다.
자동 스플릿 브레인 복구를 사용할 지 여부는 대체로 응용프로그램에 따라 달라집니다. 예를 들어 bsr에서 데이터베이스를 호스팅하는 경우를 생각해보면 사용자 인터페이스와 연관된 데이터 베이스를 사용하는 웹 응용프로그램에서는 폐기 해야 할 변경사항이 거의 없어서 자동 복구가 괜찮은 수단이 될 수 있지만 반대로 금융 데이터처럼 그 어떠한 데이터라도 함부로 폐기하기 힘든 성격을 가지고 있는 환경에서는 사람이 직접 수동 복구를 해야 할 것입니다.
자동 스플릿 브레인 복구를 활성화하기 전에 응용프로그램의 요구사항을 신중하게 고려해야 합니다.
...
체크섬 기반 동기화(Checksum-based synchronization)
체크섬 데이터 요약을 사용하면 동기화 알고리즘의 효율성을 더욱 개선할 수 있습니다. 체크섬 기반 동기화는 동기화하기 전에 블록을 읽고 현재 디스크에 있는 내용의 해시(hash) 요약을 구한 다음, 상대 노드로부터 같은 섹터를 읽어 구한 해쉬 요약 내용과 비교합니다. 해시 내용이 일치하면 해당 블럭에 대한 동기화 쓰기(re-write)를 생략합니다. 이 방식은 동기화 해야 될 블럭을 단순히 덮어쓰는 방식에 비해 성능에서 유리할 수 있으며 연결이 끊어진(disconnect 상태) 동안 파일 시스템이 섹터에 같은 내용을 다시 썼다면 해당 섹터에 대해선 재동기화를 생략하게 되므로 전체적으로 동기화 시간을 단축시킬 수 있습니다.
혼잡 모드
bsr은 비동기 복제 시 복제 네트워크의 혼잡도를 감지하여 능동적으로 대처할 수 있는 혼잡모드 기능을 제공합니다. 혼잡모드는 Blocking, Disconnect, Ahead 의 3 가지 동작모드를 제공합니다.
아무 설정도 하지 않을 경우 기본적으로 Blocking 모드입니다. Blocking 모드에서는 TX 송신버퍼에 복제 데이터를 전송할 여유 공간이 생길 때 까지 대기(Blocking)합니다.
복제 연결을 단절하여 로컬 I/O 부하를 일시적으로 해소하도록 disconnect 모드로 설정할 수 있습니다.
복제 연결은 유지한 채 primary 노드의 I/O를 로컬 디스크에 우선 기록하고 해당 영역은 out-of-sync로 기록하여 혼잡이 해제될 경우 재동기화를 자동으로 수행하는 Ahead 모드로 설정할 수 있습니다. Ahead 상태가 된 Primary 노드는 Secondary 노드에 비해 앞서 있는(Ahead) 데이터 상태가 됩니다. 그리고 이 시점에 Secondary는 뒤 쳐진(Behind) 데이터 상태가 되지만 대기노드의 데이터는 일관성은 있는 가용한 상태입니다. 혼잡 상태가 해제되면, 세컨더리로의 복제는 자동으로 재개되고 Ahead 상태에서 복제되지 못했던 out-of-sync 블럭에 대해 백그라운드 동기화를 자동으로 수행합니다. 혼잡모드는 일반적으로 데이터센터 또는 클라우드 인스턴스간의 공유연결을 통한 광역 복제 환경과 같은 가변 대역폭을 가진 네크워크 링크 환경에서 유용합니다.
온라인 데이타 무결성 검사
온라인 무결성 검사는 장치 운영 중에 노드 간의 블록별 데이터의 무결성을 확인하는 기능입니다. 무결성 검사는 네트워크 대역폭을 효율적으로 사용하고 중복된 검사를 하지 않습니다.
온라인 무결성 검사는 한 쪽 노드에서(verification source) 특정 리소스 스토리지상의 모든 데이터 블럭을 순차적으로 암호화 요약(cryptographic digest)시키고, 요약된 내용을 상대 노드(verification target)로 전송하여 같은 블럭위치의 내용을 요약 비교 합니다. 만약 요약된 내용이 일치하지 않으면, 해당 블럭은 out-of-sync로 표시되고 나중에 동기화대상이 됩니다. 여기서 블럭의 전체 내용을 전송하는 것이 아니라 최소한의 요약본만 전송하기 때문에 네트워크 대역을 효과적으로 사용하게 됩니다.
리소스의 무결성을 검증하는 작업은 온라인 중에 검사하기 때문에 온라인 검사와 복제가 동시에 수행될 경우 약간의 복제성능 저하가 있을 수 있습니다. 하지만 서비스를 중단할 필요가 없고 검사를 하거나 검사 이후 동기화 과정 중에 시스템의 다운 타임이 발생하지 않는 장점이 있습니다. 그리고 bsr은 FastSync 를 기본 로직으로 수행하기 때문에 파일시스템이 사용하고 있는 디스크 영역에 대해서만 온라인 검사를 수행하여 보다 더 효율적입니다.
온라인 무결성 검사에 따른 작업은 OS 수준에서 예약된 작업으로 등록하여 운영 I/O 부하가 적은 시간 대에 주기적으로 수행하는 것이 일반적인 사용법입니다. 온라인 무결성 검사를 구성하는 법에 대한 자세한 내용은 온라인 디바이스 검증의 사용(Using on-line device verification)을 참고하세요.
복제 트래픽 무결성 검사
bsr은 암호화 메시지 요약 알고리즘을 사용하여 양 노드 간의 복제 트래픽에 대한 무결성을 실시간 검증할 수 있습니다.
이 기능을 사용하게 되면 Primary는 모든 데이터 블록의 메시지 요약본을 생성하고 그것을 Secondary 노드에게 전달하여 복제 트래픽의 무결성을 확인할 수 있습니다. 만약 요약된 블럭이 일치하지 않으면 재전송을 요청합니다. bsr은 이러한 복제 트래픽 무결성 검사를 통해 다음과 같은 에러 상황들에 대해 소스 데이터를 보호합니다. 만약 이러한 상황들에 대해 미리 대응하지 않는다면 복제 중 잠재적인 데이터 손상이 유발될 수 있습니다.
주 메모리와 전송 노드의 네트워크 인터페이스 사이에서 전달된 데이터에서 발생하는 비트 오류 (비트 플립) (최근 랜카드가 제공하는 TCP 체크섬 오프로드 기능이 활성화 될 경우 이러한 하드웨어적인 비트플립이 소프트웨어 적으로 감지되지 않을 수 있습니다).
네트워크 인터페이스에서 수신 노드의 주 메모리로 전송되는 데이터에서 발생하는 비트 오류(동일한 고려 사항이 TCP 체크섬 오프 로딩에 적용됩니다).
네트워크 인터페이스 펌웨어와 드라이버 내의 버그 또는 경합상태로 인한 손상.
노드간의 재조합 네트워크 구성 요소에 의해 주입 된 비트 플립 또는 임의의 손상(직접 연결, 백투백 연결을 사용하지 않는 경우).
스플릿 브레인 통지와 복구
스플릿 브레인(Split brain)은 클러스터 노드들 사이에 모든 네트워크가 단절된 일시적인 장애 상황에서 클러스터 관리 소프트웨어나 관리자의 수동 개입으로 인해 두 개 이상의 노드가 Primary 역할을 가졌던 상황을 말합니다. 이것은 데이터에 대한 수정이 상대 측으로 복제되지 않고 각각의 노드에서 이루어졌다는 것을 암시하며 잠재적인 문제를 발생시킬 수 있는 상황입니다. 이 때문에 데이터가 병합되지 못하고 두 개의 데이터 셋이 만들어질 수도 있습니다.
핫빗(Heartbeat)과 같은 클러스터 노드 간을 관리하는 관리 모듈에서 모든 연결이 끊어졌을 때 판단하는 일반적인 HA 클러스터의 스플릿 브레인과 복제 스플릿 브레인은 구별되어야 합니다. 혼란을 피하기 위하여 앞으로 설명에서는 다음과 같은 규칙을 사용합니다.
스플릿 브레인이라 하면 위의 단락에서 언급한대로 복제 스플릿 브레인을 의미합니다.
클러스터 환경에서의 스플릿 브레인은 클러스터 파티션(cluster partition)이란 용어로 사용합니다. 클러스터 파티션은 특정 노드에서 모든 클러스터 연결이 끊어졌음을 의미합니다.
bsr에서 스플릿 브레인을 감지하면(이메일 또는 다른 방법을 통해) 자동적으로 운영자에게 알릴 수 있습니다.
디스크 에러 처리 정책
디스크 장비에서 장애가 발생할 경우 bsr은 디스크 장애 정책의 사전 설정을 통해 해당 I/O 에러를 상위 계층(대부분 파일시스템)으로 단순히 전달해서 처리하거나 복제 디스크를 detach 하여 복제를 중단하도록 합니다. 전자는 패스스루 정책, 후자는 분리 정책입니다.
...