DataKeeper 데이터 동기화

김재현·2023년 8월 1일

SIOS Steeleye

목록 보기
4/6
post-thumbnail

Q: DataKeeper 로컬 볼륨 데이터 동기화의 동작 원리가 궁금합니다.

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 의 데이터 흐름도는 다음과 같다.
  1. HA VIP (Active Node)
  2. Database Listener
  3. Filesystem Mount Point (/sync1)
  4. Kernel Software RAID Device (RAID 0 - /dev/mdN)
  5. Local Disk (/dev/syncVG/syncLV1) / NBD Device (/dev/nbdN)
  6. Standby Node NBD Server (Data sync)

NetRAID

DataKeeper 는 NetRAID 장치를 생성하고 보호한다.
NetRAID 장치는 로컬 디스크 또는 NBD(네트워크 블록 장치)로 구성된 RAID1 장치이다.
NetRAID 장치는 DataKeeper 리소스로 생성한다.
NetRAID 장치를 스탠바이 서버로 확장하면 NBD 장치가 생성되고 두 서버 간에 네트워크 연결이 설정된다.
(리눅스 소프트웨어 RAID 기술을 사용하여 액티브 서버 Disk와 스탠바이 서버 Disk를 네트워크를 통해 RAID1 으로 묶어준다.)
DataKeeper는 NBD가 연결되는 즉시 데이터 복제를 시작한다.
동기화되지 않는 블록(Dirty block)을 bitmap으로 관리하여 full resync를 방지한다.

Bitmap 파일

양 쪽의 데이터가 어느 데이터가 어느 블록에 써져있는지 지도로 만들어 놓은 파일이다.
엑티브 서버의 비트맵 파일에 변동이 생기면 스탠바이 서버의 비트맵 파일이 변경되면서 동기화되는 방식이다.
데이터 동기화가 블록파일 형식으로 진행되기 때문에 직접적으로 복제된 데이터 확인이 불가능하다.

디스크 복제

초기 프로세스를 진행할 때 해당 디스크 데이터의 사용률과 관련없이 사용되는 블록 및 빈 블록을 모두 복제한다.
동기화가 모두 완료되면 그 이후 변경되는 데이터가 있을 경우 실시간으로 변경된다.
서비스 중 스탠바이 서버가 Down 된 후 스탠바이 서버가 복구 될 때 까지 쌓인 데이터는 복구된 후 변경된 데이터에 대해서만 동기화한다.

Full-resync

현재 서비스중인 DB 서버에서 DataKeeper 를 신규 구축할 경우 파일 시스템 리소스를 생성할 때 Data Volume umount/mount 작업을 반복적으로 진행하게 되면서 서비스를 중단해야 하는 상황이 발생하므로 무중단이 불가능하다.

0개의 댓글