비트맵은 bsr이 내부적으로 사용하는 데이터 구조이며, 양 측 노드의 리소스가 동기화 되었거나 동기화가 맞지 않는 블럭을 추적하는 데 사용됩니다. 이것은 리소스가 disconnected 모드에 있을 때만 해당 됩니다.
비트맵에서 1 bit는 디스크 상의 4KiB 데이터를 표현합니다. 비트가 깨끗하다면(0 이라면) 해당 블록이 상대 노드와 아직 동기화 됬거나 동기화 진행 중 임을 의미합니다. 아니면 연결이 끊어진 이후에도 해당 블럭에 쓰이지 않았다는 것을 의미합니다. 반대로 비트가 설정되어 있다면(1 이라면), 그 블록은 수정되었으며 연결이 다시 될 때 재동기화가 필요하다는 것을 의미합니다.
복제 연결이 끊긴 상태에서 bsr이 쓰기 I/O를 감지하면 비트맵의 비트 설정을 메모리(RAM)에 저장합니다. 메타 데이터에 쓰는 것은 쓰기 I/O에 대한 비용으로 인해(성능이 떨어짐) 바로 수행하진 않습니다. 해당 블록 기록이 액티비티 로그로부터 만료된 경우에만 비트맵의 내용을 디스크로 반영합니다. 그리고 네트워크가 끊어진 상태에서 리소스를 중지 시키면(down 명령) 비트맵의 내용을 모두 디스크에 기록합니다.
상대 노드가 복구되거나 상대와 연결이 다시 되면, bsr은 재동기화를 할 전체 데이터 셋(total data set)을 결정하기 위해 양 노드로부터 비트맵 정보를 취합하고 확인합니다. 그와 동시에 동기화의 방향을 결정하기 위해 Generation identifiers를 검사합니다.
동기화의 소스 역할을 하는 노드에서는 동기화 요청된 블럭을 상대 노드에게 전송하고 동기화 타겟 노드에서는 변경사항을 적용하여 비트맵에 있는 sync 비트를 지웁니다. 재동기화가 중단(네트워크 중단 같은 경우)되었다가 다시 재개된다면, 중단되었던 동안에 수정된 내용들은 재동기화 데이터 셋에 추가됩니다.
...
Bitmaps are data structures used internally by bsr, and are used to track blocks in which resources on both nodes are synchronized or out of sync. This is only relevant when the resource is in disconnected mode.
One bit in the bitmap represents 4KiB data on the disk. If the bit is clean (if it is 0), it means that the block is still synchronized with the other node or is in progress. Or it means that it was not written to the block even after the connection was lost. Conversely, if the bit is set (if 1), it means that the block has been modified and resynchronization is required when the connection is re-established.
When bsr detects write I/O while the connection is disconnected, it stores the bit setting of the bitmap in memory(RAM). Writing to metadata is not done immediately due to the cost of write I/O (low performance). Bitmap contents are reflected to disk only when the corresponding block record has expired from the activity log. And if the resource is stopped (down command) while the network is disconnected, the contents of the bitmap are all written to disk.
When the peer node is restored or the connection to the peer is re-established, bsr collects and checks bitmap information from both nodes to determine the total data set to resynchronize. At the same time, the generation identifiers are checked to determine the direction of synchronization.
The node acting as the source of synchronization sends the requested block to the other node, and the synchronization target node applies the changes to clear the sync bit in the bitmap. If resynchronization is interrupted (such as a network failure) and then resumed, the modifications made during the interruption are added to the resynchronization data set.
Info |
---|
Resynchronization can be paused and resumed directly with bsradm's pause-sync / resume-sync command. However, it is not recommended to use this command frequently. Stopping resynchronization for no apparent reason is undesirable because the data on the secondary node remains inconsistent for longer than necessary. |