비트맵

비트맵은 bsr이 내부적으로 사용하는 데이터 구조이며, 양 측 노드의 리소스가 동기화 되었거나 동기화가 안 된 블럭을 추적하는 데 사용됩니다. 이것은 리소스가 disconnected 모드에 있을 때 만 해당 됩니��.

비트맵에서 1 bit는 디스크 상의 4KiB 데이터를 표현합니다. 비트가 깨끗하다면(0 이라면) 해당 블록이 상대 노드와 동기화 됬거나 아니면 아직 동기화 진행 중 임을 의미합니다. 아니면 연결이 끊어진 이후에도 해당 블럭에 쓰이지 않았다는 것을 의미합니다. 반대로 비트가 설정되어 있다면(1 이라면), 그 블록은 수정되었으며 연결이 다시 될 때 재동기화가 필요하다는 것을 의미합니다.

복제 연결이 끊긴 상태에서 bsr이 쓰기 I/O를 감지하면 비트맵의 비트 설정을 메모리(RAM)에 저장합니다. 메타 데이터에 쓰는 것은 쓰기 I/O에 대한 비용으로 인해(성능이 떨어짐) 바로 수행하진 않습니다. 해당 블록 기록이 액티비티 로그로부터 만료된 경우에만 비트맵의 내용을 디스크로 반영합니다. 그리고 네트워크가 끊어진 상태에서 리소스를 중지 시키면(down 명령) 비트맵의 내용을 모두 디스크에 기록합니다.

상대 노드가 복구되거나 상대와 연결이 다시 되면, bsr은 재동기화를 할 전체 데이터 셋(total data set)을 결정하기 위해 양 노드로부터 비트맵 정보를 취합하고 확인합니다. 그와 동시에 동기화의 방향을 결정하기 위해 Generation identifiers를 검사합니다.

동기화의 소스 역할을 하는 노드에서는 동기화 요청된 블럭을 상대 노드에게 전송하고 동기화 타겟 노드에서는 변경사항을 적용하여 비트맵에 있는 sync 비트를 지웁니다. 재동기화가 중단(네트워크 중단 같은 경우)되었다가 다시 재개된다면, 중단되었던 동안에 수정된 내용들은 재동기화 데이터 셋에 추가됩니다.

재동기화는 bsradm의 pause-sync / resume-sync 명령으로 직접 일시중지 및 재개할 수 있습니다. 하지만 이 명령을 자주 사용하는것은 권장하지 않습니다. 별 이유없이 재동기화를 중지하게 되면 필요 이상으로 오랫동안 Secondary 노드의 데이터가 불일치한 상태로 남아있게 되어 바람직하지 않습니다.