การทำ REPLICATION ข้อมูลด้วย DRBD

การทำ REPLICATION ข้อมูลด้วย DRBD

 

 

DRBD (Distributed Replicated Block Device) คือซอฟต์แวร์ที่สามารถทำสำเนาข้อมูลให้กับฮาร์ดดิสก์ (หรืออุปกรณ์เก็บข้อมูลอื่นๆ) สองลูกให้ข้อมูลเหมือนกันทุกประการผ่านทางเครือข่าย การสำเนาข้อมูลไม่ใช่แค่ไฟล์แต่ลึกลงไปถึงระดับ block ของฮาร์ดดิสก์ บางคนอาจใช้คนว่า RAID1 ผ่านทางเครือข่าย จุดประสงค์ก็เพื่อสำรองข้อมูลไปยังสถานที่ปฏิบัติงานสำรอง (disaster recovery site – DR site) ถ้าสถานที่ทำงานหลักมีปัญหาสามารถย้ายไปทำในที่สำรองได้เพื่อให้การปฏิบัติงานทำได้อย่างต่อเนื่อง

ในการทดลองนี้ผมจะใช้ 2 เครื่องนะครับและจำลอง Harddisk ไว้ 2 ลูกทั้ง 2 เครื่อง (sda + sdb)

ตรวจสอบความพร้อมของ Disk

ทำให้ทั้ง 2 เครื่องรู้จักกันด้วย hostname (ในขั้นตอนการ config ผมจะอ้าง hostname แทน IP นะครับ)


ขั้นตอนการติดตั้ง DRBD

All Server

1 > ติดตั้ง Epel Packages

rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

2 > อัพเดท repo

yum -y update

3 > ติดตั้ง DRBD

[root@host1 ~]# yum -y install drbd83-utils kmod-drbd83
[root@host2 ~]# yum -y install drbd83-utils kmod-drbd83

4 > สร้างพาทิชั่นสำหรับ DRBD

[root@host1 ~]# fdisk -cu /dev/sdb
[root@host2 ~]# fdisk -cu /dev/sdb

5 > สร้าง ไฟล์  clusterdb_res.res

[root@host1 ~]# vi /etc/drbd.d/clusterdb_res.res
resource clusterdb_res {
	protocol C;
	handlers {
	pri-on-incon-degr “/usr/lib/drbd/notify-pri-on-incon-degr.sh;/usr/lib/drbd/notifyemergency-reboot.sh;echo b > /proc/sysrq-trigger; reboot -f”;
	pri-lost-after-sb “/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notifyemergency-reboot.sh; echo b > /proc/sysrq-trigger ;reboot -f”;
	local-io-error “/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergencyshutdown.sh; echo o > /proc/sysrq-trigger ; halt -f”;fence-peer “/usr/lib/drbd/crm-fence-peer.sh”;
	}

	startup {
	degr-wfc-timeout 120; # 2 minutes.
	outdated-wfc-timeout 2; # 2 seconds.
	}

	disk {
	on-io-error detach;
	}

	net {
	cram-hmac-alg “sha1”;
	shared-secret “clusterdb”;
	after-sb-0pri disconnect;
	after-sb-1pri disconnect;
	after-sb-2pri disconnect;
	rr-conflict disconnect;
	}

	syncer {
	rate 10M;
	al-extents 257;
	on-no-data-accessible io-error;
	}

	on host1 {
	device /dev/drbd0;
	disk /dev/sdb1;
	address 192.168.0.221:7788;
	flexible-meta-disk internal;
	}

	on host2 {
	device /dev/drbd0;
	disk /dev/sdb1;
	address 192.168.0.222:7788;
	meta-disk internal;
	}
}

6 > ทำการคัดลอกไฟล์ไปที่ host2

[root@host1 ~]# scp /etc/drbd.d/clusterdb_res.res host2:/etc/drbd.d/clusterdb_res.res

7 > สร้าง drbd partition

[root@host1 ~]# drbdadm create-md clusterdb_res
[root@host2 ~]# drbdadm create-md clusterdb_res

8 > เปิดใช้งาน drbd

[root@host1 ~]# service drbd start
[root@host2 ~]# service drbd start

สามารถตรวจสอบความพร้อมใช้

service drbd status

9 > สังเกตุว่าในตอนนี้ สถานะจะเป็น Secondaty/Secondary ซึ่งเราจำเป็นต้องทำให้เครื่องใดเครื่องหนึ่งเป็น Primary เพื่อที่จะ Mount มาใช้งาน

[root@host1 ~]# drbdadm primary –force data
[root@host1 ~]# drbdadm — –overwrite-data-of-peer primary all

สังเกตุว่าสถานะตอนนี้จะเป็น Primary/Secondary แล้วนะครับ

10 > ทำการ Format partition

[root@host1 ~]# mkfs -t ext4 /dev/drbd0

Screen Shot 2556-08-21 at 2.10.45 PM

ทดสอบ Mount เพื่อใช้งาน

[root@host1 ~]# mkdir -p /home/putter
[root@host1 ~]# mount /dev/drbd0 /home/putter/

เราจะสามารถ Mount ได้เฉพาะเครื่องที่เป็น Primary เท่านั้นหากต้องการเปลี่ยนจาก Primary เป็น Secondary

[root@host1 ~]# drbdadm secondary clusterdb_res
[root@host2 ~]# drbdadm — –overwrite-data-of-peer primary all

** หากใครได้เปิดใช้ firewall ก็เปิด port tcp 7788 ด้วยครับ

ข้อมูลเพิ่มเติม
http://www.drbd.org/
http://www.raspberrypithai.com/2013/01/10/drbd-raspberry-pi/