
DataKeeper Sync 아키텍처 구조에 따라 mdadm 으로 구성된 Software RAID Device 를 확인할 수 있다.
# mdadm --detail /dev/md0
/dev/md0:
Version :
Creation Time : Fri Jan 27 13:34:39 2023
Raid Level : raid1
Array Size : 3145728 (3.00 GiB 3.22 GB)
Used Dev Size : 3145728 (3.00 GiB 3.22 GB)
Raid Devices : 2
Total Devices : 2
Intent Bitmap : /opt/LifeKeeper/bitmap_data-sync1
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Number Major Minor RaidDevice State
0 253 2 0 active sync /dev/dm-2
2 43 1 1 active sync writemostly /dev/nbd1
# lcdstatus -q
LOCAL TAG ID STATE PRIO PRIMARY
jh-dk-01 httpd-80 httpd-80 ISP 1 jh-dk-01
jh-dk-01 /sync1 /sync1 ISP 1 jh-dk-01
jh-dk-01 data-sync1 /dev/mapper/syncVG-syncLV1 ISP 1 jh-dk-01
jh-dk-01 /sync2 /sync2 ISP 1 jh-dk-01
jh-dk-01 data-sync2 /dev/mapper/syncVG-syncLV2 ISP 1 jh-dk-01
jh-dk-01 /sync3 /sync3 ISP 1 jh-dk-01
jh-dk-01 data-sync3 /dev/mapper/syncVG-syncLV3 ISP 1 jh-dk-01
jh-dk-01 vip-172.16.15.95 IP-172.16.15.95 ISP 1 jh-dk-01
MACHINE NETWORK ADDRESSES/DEVICE STATE PRIO
jh-dk-02 TCP 1.1.1.91/1.1.1.92 ALIVE 1
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 10G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 9G 0 part
├─rhel-root 253:0 0 8G 0 lvm /
└─rhel-swap 253:1 0 1G 0 lvm [SWAP]
vdb 252:16 0 20G 0 disk
└─vdb1 252:17 0 20G 0 part
├─syncVG-syncLV1 253:2 0 3G 0 lvm
│ └─md0 9:0 0 3G 0 raid1 /sync1
├─syncVG-syncLV2 253:3 0 4G 0 lvm
│ └─md1 9:1 0 4G 0 raid1 /sync2
└─syncVG-syncLV3 253:4 0 5G 0 lvm
└─md2 9:2 0 5G 0 raid1 /sync3
nbd1 43:1 0 3G 0 disk
└─md0 9:0 0 3G 0 raid1 /sync1
nbd9 43:9 0 4G 0 disk
└─md1 9:1 0 4G 0 raid1 /sync2
loop0 7:0 0 386.3M 0 loop /image
nbd17 43:17 0 5G 0 disk
└─md2 9:2 0 5G 0 raid1 /sync3
# mdadm --detail --scan
ARRAY /dev/md2 metadata= bitmap=/opt/LifeKeeper/bitmap_data-sync3
ARRAY /dev/md1 metadata= bitmap=/opt/LifeKeeper/bitmap_data-sync2
ARRAY /dev/md0 metadata= bitmap=/opt/LifeKeeper/bitmap_data-sync1
# mirror_status data-sync1
Mirror Configuration:
[ ] jh-dk-01 -> jh-dk-02 (1.1.1.92)
Status: Fully Operational
[===================>] 100%
Type: Synchronous
Bitmap: 12288 bits (chunks), 0 dirty (0.0%)
# mirror_status data-sync2
Mirror Configuration:
[ ] jh-dk-01 -> jh-dk-02 (1.1.1.92)
Status: Fully Operational
[===================>] 100%
Type: Synchronous
Bitmap: 16384 bits (chunks), 0 dirty (0.0%)
# mirror_status data-sync3
Mirror Configuration:
[ ] jh-dk-01 -> jh-dk-02 (1.1.1.92)
Status: Fully Operational
[===================>] 100%
Type: Synchronous
Bitmap: 20480 bits (chunks), 0 dirty (0.0%)
DataKeeper 는 NetRAID 장치를 생성하고 보호한다.
NetRAID 장치는 로컬 디스크 또는 NBD(네트워크 블록 장치)로 구성된 RAID1 장치이다.
NetRAID 장치는 DataKeeper 리소스로 생성한다.
NetRAID 장치를 스탠바이 서버로 확장하면 NBD 장치가 생성되고 두 서버 간에 네트워크 연결이 설정된다.
(리눅스 소프트웨어 RAID 기술을 사용하여 액티브 서버 Disk와 스탠바이 서버 Disk를 네트워크를 통해 RAID1 으로 묶어준다.)
DataKeeper는 NBD가 연결되는 즉시 데이터 복제를 시작한다.
동기화되지 않는 블록(Dirty block)을 bitmap으로 관리하여 full resync를 방지한다.
양 쪽의 데이터가 어느 데이터가 어느 블록에 써져있는지 지도로 만들어 놓은 파일이다.
엑티브 서버의 비트맵 파일에 변동이 생기면 스탠바이 서버의 비트맵 파일이 변경되면서 동기화되는 방식이다.
데이터 동기화가 블록파일 형식으로 진행되기 때문에 직접적으로 복제된 데이터 확인이 불가능하다.
초기 프로세스를 진행할 때 해당 디스크 데이터의 사용률과 관련없이 사용되는 블록 및 빈 블록을 모두 복제한다.
동기화가 모두 완료되면 그 이후 변경되는 데이터가 있을 경우 실시간으로 변경된다.
서비스 중 스탠바이 서버가 Down 된 후 스탠바이 서버가 복구 될 때 까지 쌓인 데이터는 복구된 후 변경된 데이터에 대해서만 동기화한다.
현재 서비스중인 DB 서버에서 DataKeeper 를 신규 구축할 경우 파일 시스템 리소스를 생성할 때 Data Volume umount/mount 작업을 반복적으로 진행하게 되면서 서비스를 중단해야 하는 상황이 발생하므로 무중단이 불가능하다.