์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ ๋ด์ฉ:
drbd+ocfs2 ์๋ฃจ์
์ ๊ธฐ๋ฐ์ผ๋ก ๋ ์๋ฒ์ ๋ํ ๊ณต์ ์คํ ๋ฆฌ์ง๋ฅผ ์ ์ํ๊ฒ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ.
๋๊ตฌ์๊ฒ ์ ์ฉํ ๊น์?
์ด ํํ ๋ฆฌ์ผ์ ์์คํ
๊ด๋ฆฌ์์ ์คํ ๋ฆฌ์ง ๊ตฌํ ๋ฐฉ๋ฒ์ ์ ํํ๊ฑฐ๋ ์๋ฃจ์
์ ์๋ํ๋ ค๋ ๋ชจ๋ ์ฌ๋์๊ฒ ์ ์ฉํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ค ๊ฒฐ์ ์ ๊ฑฐ๋ถํ์ผ๋ฉฐ ๊ทธ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ข ์ข ์ฐ๋ฆฌ๋ ์๊ท๋ชจ ์น ํด๋ฌ์คํฐ์์ ์ฐ์ํ ์ฝ๊ธฐ-์ฐ๊ธฐ ์ฑ๋ฅ์ ๊ฐ์ถ ๊ณต์ ์คํ ๋ฆฌ์ง๋ฅผ ๊ตฌํํด์ผ ํ๋ ์ํฉ์ ์ง๋ฉดํฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ก์ ํธ์ ๊ณต์ ์คํ ๋ฆฌ์ง๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ค์ํ ์ต์ ์ ์๋ํ์ง๋ง ์ฌ๋ฌ ์งํ์์ ๋์์ ์ฐ๋ฆฌ๋ฅผ ๋ง์กฑ์ํฌ ์ ์๋ ๊ฒ์ ๊ฑฐ์ ์์์ต๋๋ค. ์ด์ ๊ทธ ์ด์ ๋ฅผ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
- Glusterfs๋ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์ฑ๋ฅ์ด ๋ง์กฑ์ค๋ฝ์ง ๋ชปํ์ผ๋ฉฐ, ๋ง์ ์์ ํ์ผ์ ๋์์ ์ฝ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์๊ณ CPU ๋ถํ๋ ๋์์ต๋๋ค. ํ์ผ ์ฝ๊ธฐ ๋ฌธ์ ๋ ๋ธ๋ฆญ์์ ํ์ผ์ ์ง์ ์ก์ธ์คํ์ฌ ํด๊ฒฐํ ์ ์์ง๋ง ํญ์ ์ ์ฉ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค.
- Ceph๋ 2~4๊ฐ์ ์๋ฒ๊ฐ ์๋ ํ๋ก์ ํธ, ํนํ ํ๋ก์ ํธ๊ฐ ์ดํ์ ์ ์ง ๊ด๋ฆฌ๋๋ ๊ฒฝ์ฐ ํด๋ก์ธ ์ ์๋ ๊ณผ๋ํ ๋ณต์ก์ฑ์ ์ข์ํ์ง ์์์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, glusterfs์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ๋์ ์คํ ๋ฆฌ์ง ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํด์ผ ํ๋ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ์ด ์์ต๋๋ค.
- ํ๋์ NFS ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต์ ์คํ ๋ฆฌ์ง๋ฅผ ๊ตฌํํ๋ฉด ๋ด๊ฒฐํจ์ฑ ์ธก๋ฉด์์ ์๋ฌธ์ด ์ ๊ธฐ๋ฉ๋๋ค.
- s3๋ ํน์ ๋ฒ์์ ์์ ์ ๋ํด ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ์ํ ์๋ฃจ์ ์ด์ง๋ง ๋ฒ์๋ฅผ ์ขํ๋ ํ์ผ ์์คํ ์ ์๋๋๋ค.
- lsyncd. ์ด๋ฏธ "๋นํ์ผ ์์คํ "์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ ์์ํ๋ค๋ฉด ์ด ์ธ๊ธฐ ์๋ ์๋ฃจ์ ์ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฐฉํฅ ๊ตํ์ ์ ํฉํ์ง ์์ ๋ฟ๋ง ์๋๋ผ(์ ๋ง ์ํ๋ค๋ฉด ๊ฐ๋ฅํฉ๋๋ค), ๋ง์ ์์ ํ์ผ์์๋ ์์ ์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ๋ํ ์ข์ ์ถ๊ฐ ์ฌํญ์ ๋จ์ผ ์ค๋ ๋๋ผ๋ ๊ฒ์ ๋๋ค. ๊ทธ ์ด์ ๋ ํ๋ก๊ทธ๋จ์ ์ํคํ ์ฒ์ ์์ต๋๋ค. ์ฆ, inotify๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ๋ฐ ์ฌ๊ฒ์ ์ค์ ํ ๋นํ๋ ์์ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ํฐ๋งํฉ๋๋ค. rsync๋ ์ ์ก ๋งค์ฒด๋ก ์ฌ์ฉ๋ฉ๋๋ค.
ํํ ๋ฆฌ์ผ: drbd+ocfs2๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณต์ ์คํ ๋ฆฌ์ง๋ฅผ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ
์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ํธ๋ฆฌํ ์๋ฃจ์ ์ค ํ๋๋ ๋งํฌ์์ต๋๋ค. ocfs2+drbd. ์ด์ ์๋ฃจ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ์๋ฒ์ ๊ณต์ ์คํ ๋ฆฌ์ง๋ฅผ ์ ์ํ๊ฒ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. ํ์ง๋ง ๋จผ์ ๊ตฌ์ฑ ์์์ ๋ํด ์กฐ๊ธ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
DRBD - ๋ธ๋ก ๋จ์๋ก ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ ์ ์๋ ํ์ค Linux ๋ฐฐํฌํ์ ์คํ ๋ฆฌ์ง ์์คํ ์ ๋๋ค. ์ฃผ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ด๊ฒฐํจ์ฑ ์คํ ๋ฆฌ์ง๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค.
OCFS2 - ์ฌ๋ฌ ์์คํ ์์ ๋์ผํ ์ ์ฅ์๋ฅผ ๊ณต์ ํ์ฌ ์ฌ์ฉํ๋ ํ์ผ ์์คํ ์ ๋๋ค. Linux ๋ฐฐํฌํ์ ํฌํจ๋์ด ์์ผ๋ฉฐ FS ์์ ์ ์ํ ์ปค๋ ๋ชจ๋ ๋ฐ ์ฌ์ฉ์ ๊ณต๊ฐ ๋๊ตฌ์ ๋๋ค. OCFS2๋ DRBD๋ฟ๋ง ์๋๋ผ ๋ค์ค ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ iSCSI์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์์์๋ DRBD๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ชจ๋ ์์ ์ ์ฐ๋ถํฌ ์๋ฒ 18.04์์ ์ต์ ๊ตฌ์ฑ์ผ๋ก ์ํ๋ฉ๋๋ค.
1๋จ๊ณ. DRBD ๊ตฌ์ฑ:
/etc/drbd.d/drbd0.res ํ์ผ์์ ๊ฐ์ ๋ธ๋ก ์ฅ์น /dev/drbd0์ ์ค๋ช
ํฉ๋๋ค.
resource drbd0 {
syncer { rate 1000M; }
net {
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
startup { become-primary-on both; }
on drbd1 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.192:7789;
}
on drbd2 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.193:7789;
}
}
๋ฉํ๋์คํฌ ๋ด๋ถ โ ๋์ผํ ๋ธ๋ก ์ฅ์น๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ
์ฅ์น /dev/drbd0 โ drbd ๋ณผ๋ฅจ์ ๋ํ ๊ฒฝ๋ก๋ก /dev/drbd0์ ์ฌ์ฉํฉ๋๋ค.
๋์คํฌ /dev/vdb1 - /dev/vdb1์ ์ฌ์ฉํ์ธ์.
๋๊ธฐํ ์ฅ์น {์๋ 1000M; } โ ๊ธฐ๊ฐ๋นํธ ์ฑ๋ ๋์ญํญ์ ์ฌ์ฉํฉ๋๋ค.
๋ ๊ฐ์ ๊ธฐ๋ณธ ํ์ฉ - ๋ ๊ฐ์ ๊ธฐ๋ณธ ์๋ฒ์์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ์ค์ํ ์ต์
์
๋๋ค.
์ดํ-sb-0pri, ์ดํ-sb-1pri, ์ดํ-sb-2pri โ ์คํ๋ฆฟ๋ธ๋ ์ธ์ด ๊ฐ์ง๋ ๋ ๋
ธ๋์ ์์
์ ๋ด๋นํ๋ ์ต์
์
๋๋ค. ์์ธํ ๋ด์ฉ์ ์ค๋ช
์์์ ํ์ธํ ์ ์์ต๋๋ค.
๋ ๋ค์์ ๊ธฐ๋ณธ์ด ๋จ โ ๋ ๋
ธ๋๋ฅผ ๋ชจ๋ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ํฉ๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ฒ๋ฆฌ๋์ด 10๊ธฐ๊ฐ๋นํธ์ธ ์ ์ฉ ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ๊ฐ์ถ ๋ ๊ฐ์ ์์ ํ ๋์ผํ VM์ด ์์ต๋๋ค.
์ด ์์์ ๋ ํด๋ฌ์คํฐ ๋ ธ๋์ ๋คํธ์ํฌ ์ด๋ฆ์ drbd1 ๋ฐ drbd2์ ๋๋ค. ์ฌ๋ฐ๋ฅธ ์๋์ ์ํด์๋ /etc/hosts์ ์๋ ํธ์คํธ์ ์ด๋ฆ๊ณผ IP ์ฃผ์๋ฅผ ์ผ์น์์ผ์ผ ํฉ๋๋ค.
10.10.10.192 drbd1
10.10.10.193 drbd2
2๋จ๊ณ. ๋ ธ๋ ์ค์ :
๋ ์๋ฒ ๋ชจ๋์์ ๋ค์์ ์คํํฉ๋๋ค.
drbdadm create-md drbd0
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
์ฐ๋ฆฌ๋ ๋ค์์ ์ป์ต๋๋ค:
๋๊ธฐํ๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋
ธ๋์์ ๋ค์์ ์คํํด์ผ ํฉ๋๋ค.
drbdadm primary --force drbd0
์ํ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
cat /proc/drbd
์ข์ต๋๋ค. ๋๊ธฐํ๊ฐ ์์๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์ฌ์ง์ ๋ด
๋๋ค.
3๋จ๊ณ. ๋ ๋ฒ์งธ ๋
ธ๋์์ ๋๊ธฐํ๋ฅผ ์์ํฉ๋๋ค.
drbdadm primary --force drbd0
์ฐ๋ฆฌ๋ ๋ค์์ ์ป์ต๋๋ค:
์ด์ ๋ ์๋ฒ์์ drbd์ ์ธ ์ ์์ต๋๋ค.
4๋จ๊ณ. ocfs2๋ฅผ ์ค์นํ๊ณ ๊ตฌ์ฑํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋งค์ฐ ๊ฐ๋จํ ๊ตฌ์ฑ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค:
cluster:
node_count = 2
name = ocfs2cluster
node:
number = 1
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.192
name = drbd1
node:
number = 2
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.193
name = drbd2
์ ์ ์ด์ผ ํฉ๋๋ค. /etc/ocfs2/cluster.conf ๋ ๋ ธ๋ ๋ชจ๋์์.
๋ชจ๋ ๋ ธ๋์ drbd0์ FS๋ฅผ ์์ฑํฉ๋๋ค.
mkfs.ocfs2 -L "testVol" /dev/drbd0
์ฌ๊ธฐ์๋ ๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ drbd0์ testVol์ด๋ผ๋ ๋ ์ด๋ธ์ด ์๋ ํ์ผ ์์คํ ์ ๋ง๋ค์์ต๋๋ค.
/etc/default/o2cb์์ ์ค์ ํด์ผ ํฉ๋๋ค(๊ตฌ์ฑ ํ์ผ์์์ ๊ฐ์ด).
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster
๊ฐ ๋ ธ๋์์ ์คํํฉ๋๋ค.
o2cb register-cluster ocfs2cluster
๊ทธ๋ฐ ๋ค์ ์๋ ์คํ์ ํ์ํ ๋ชจ๋ ์ฅ์น๋ฅผ ์ผ๊ณ ์ถ๊ฐํฉ๋๋ค.
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2
์ด ์ค ์ผ๋ถ๋ ์ค์ ํ๋ก์ธ์ค ์ค์ ์ด๋ฏธ ์คํ ์ค์ ๋๋ค.
5๋จ๊ณ. ๋ ๋ ธ๋ ๋ชจ๋์์ fstab์ ๋ง์ดํธ ์ง์ ์ ์ถ๊ฐํฉ๋๋ค.
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0
์๋ฐฐ ๊ท์น์ /๋ฏธ๋์ด/๊ณต์ ์ฌ์ ์ ์์ฑ๋์ด์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์๋ noauto ์ต์ ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์์ ์ ํ์ผ์ด ๋ง์ดํธ๋์ง ์์์ ์๋ฏธํ๋ฉฐ(์ ๋ systemd๋ฅผ ํตํด ๋คํธ์ํฌ ํ์ผ์ ๋ง์ดํธํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค) heartbeat=local์ ๊ฐ ๋ ธ๋์์ ํํธ๋นํธ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ ๋๋ค. ๋๊ท๋ชจ ํด๋ฌ์คํฐ์ ๋ ์ ํฉํ ๊ธ๋ก๋ฒ ํํธ๋นํธ๋ ์์ต๋๋ค.
๋ค์์ผ๋ก ๋ง์ดํธํ ์ ์์ต๋๋ค. /๋ฏธ๋์ด/๊ณต์ ์ฝํ ์ธ ๋๊ธฐํ๋ฅผ ํ์ธํ์ธ์.
์๋ฃ! ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ํ์ฅ์ฑ๊ณผ ์ ์ ํ ์ฑ๋ฅ์ ๊ฐ์ถ ์ด๋ ์ ๋ ๋ด๊ฒฐํจ์ฑ ์คํ ๋ฆฌ์ง๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค.
์ถ์ฒ : habr.com