DRBD (Distributed Replicated Block Device) 실습
DRBD 이중화는 두 대 이상의 서버 간에 데이터 복제를 통해 고가용성(HA, High Availability) 환경을 구축하는 기술이다. DRBD(Distributed Replicated Block Device)는 네트워크를 통해 서로 다른 서버의 디스크를 실시간으로 복제하여 장애 발생 시에도 데이터 손실 없이 빠르게 서비스를 복구할 수 있도록 지원해준다.
DRBD 이중화에서 중요한 개념은 마스터-슬레이브 구조이며, 하나의 서버(Primary)가 데이터를 처리하고, 다른 서버(Secondary)가 그 데이터를 실시간으로 복제받아 대기하는 구조이다. 만약 Primary 서버에 문제가 발생하면, Secondary 서버가 Primary로 승격되어 서비스 중단 없이 운영이 가능하다.
———————————————————————————————————————————
- Rocky 9.4
- node1(Active) / 192.168.0.23
- node2(Standby) / 192.168.0 24
- port / 7788
———————————————————————————————————————————
- elrepo 설치
dnf -y install elrepo-*
- drbd, kmod-drbd 설치
dnf -y install kmod-drbd*
- hostname 설정
# master 서버(Active)
node1
# standby 서버
node2
- /etc/hosts 파일 설정 (Active, Standby 모두 동일하게 설정)
192.168.0.23 node1
192.168.0.24 node2
- 파티션 생성 (drbd 는 기존에 있던 디스크(파티션)에 적용이 안됨, 디스크 새로 추가)
fdisk /dev/sdb
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x689bf112.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039):
Created a new partition 1 of type 'Linux' and of size 20 GiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
- 설정 파일 생성 (Master, Standby 모두 동일)
vim /etc/drbd.d/drbddate.res
resource drbddate {
startup {
wfc-timeout 30;
degr-wfc-timeout 30;
}
net {
cram-hmac-alg sha1;
shared-secret sync_disk;
allow-two-primaries;
}
syncer {
# rate 100M;
al-extents 257;
on-no-data-accessible io-error;
}
on node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.23:7788;
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.24:7788;
meta-disk internal;
}
}
- 메타데이터 생성 (Master, Standby 모두 동일)
cd /etc/drbd.d/
drbdadm create-md drbddate
- drbd 구동 (마스터 서버 구동 완료 후 스탠바이도 구동)
systemctl start drbd
systemctl enable drbd
- 구동 확인 (마스터 서버, 스탠바이 서버 확인)
cat /proc/drbd
- Master 설정 (Master 서버에서만 실행)
cd /etc/drbd.d/
drbdadm primary --force drbddate
- 파일 시스템 포멧 (마스터, 스탠바이)
mkfs.ext4 /dev/drbd0
- 디렉토리 생성 및 파티션 마운트 (액티브 서버)
mkdir /data
mount /dev/drbd0 /data
- 마운트 확인
df
[root@node1 min]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 888M 0 888M 0% /dev/shm
tmpfs tmpfs 356M 6.0M 350M 2% /run
/dev/sda5 xfs 84G 3.0G 82G 4% /
/dev/sda3 xfs 10G 687M 9.3G 7% /home
/dev/sda2 xfs 960M 289M 672M 31% /boot
/dev/sda1 vfat 1022M 7.1M 1015M 1% /boot/efi
tmpfs tmpfs 178M 0 178M 0% /run/user/0
/dev/drbd0 ext4 20G 425M 19G 3% /data
tmpfs tmpfs 178M 0 178M 0% /run/user/1000

- 마스터 상태 확인
drbdadm status
[root@node1 data]# drbdadm status
drbddate role:Primary
disk:UpToDate
node2 role:Secondary
peer-disk:UpToDate

- 스탠바이 상태 확인
drbdadm status
[root@node2 data]# drbdadm status
drbddate role:Primary
disk:UpToDate
node1 role:Primary
peer-disk:UpToDate

#액티브, 스탠바이로 활성시에는 마스터 서버에서만 마운트 적용해야한다. 스탠바이 서버도 마운트시에 액티브=액티브로 활성화 된다.
- 스탠바이 상태를 액티브로 변경
drbdadm primary drbddate
MariaDB 한글(utf8mb4) 설정
1. 서버(my.cnf)에서 utf8mb4 기본 문자셋 지정
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
2. MariaDB 재시작
sudo systemctl restart mariadb
# 또는
sudo systemctl restart mysql
3. 새로 만드는 DB/테이블/컬럼에는 자동 적용
CREATE DATABASE mydb
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
CREATE TABLE mytbl (
col1 VARCHAR(20),
col2 TEXT
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci;
4. 기존 DB/테이블/컬럼도 적용, 기존 데이터베이스 문자셋/콜레이션 변경
ALTER DATABASE mydb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
5. 기존 테이블 문자셋/콜레이션 변경
ALTER TABLE mytbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
6. 컬럼별 문자셋/콜레이션까지 확실히 변경
ALTER TABLE mytbl
MODIFY col1 VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
MODIFY col2 TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- (컬럼이 CHAR, VARCHAR, TEXT 등 문자 타입일 때만 해당)
7. 최종 확인 명령어
SHOW CREATE TABLE mytbl;
SHOW FULL COLUMNS FROM mytbl;
SHOW VARIABLES LIKE 'char%';
→ Collation/Charset이 모두 utf8mb4_general_ci, utf8mb4로 나오면 성공