DRBD介紹
DRBD是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲復制解決方案。 DRBD Logo數據鏡像:實時、透明、同步(所有服務器都成功後返回)、異步(本地服務器成功後返回)。DBRD的核心功能通過Linux的內核實現,最接近系統的IO棧,但它不能神奇地添加上層的功能比如檢測到EXT3文件系統的崩潰。DBRD的位置處於文件系統以下,比文件系統更加靠近操作系統內核及IO棧。
DRBD編譯安裝
安裝所需依賴:
yum -y install gcc kernel-devel kernel-headers flex
開始安裝drbd,下載地址:http://oss.linbit.com/drbd/
安裝用戶空間工具:
cd /tmp wget http://oss.linbit.com/drbd/8.4/drbd-8.4.1.tar.gz tar xzf drbd-8.4.1.tar.gz cd drbd-8.4.1 ./configure --prefix=/usr/local/drbd --with-km make KDIR=/usr/src/kernels/2.6.18-274.18.1.el5-i686/ make install mkdir -p /usr/local/drbd/var/run/drbd cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d chkconfig --add drbd chkconfig drbd on
安裝drbd模塊:
cd drbd make clean make KDIR=/usr/src/kernels/2.6.18-274.18.1.el5-i686/ cp drbd.ko /lib/modules/`uname -r`/kernel/lib/ depmod
注:usr/src/kernels/2.6.18-274.18.1.el5-i686/這個內核源碼樹路徑需要根據自己的系統修改。
DRBD配置
建立分區
假如現在有第二塊硬盤hdb,兩個node都要分區。
#fdisk /dev/hdb //准備為 hdb 建立分區 The number of cylinders for this disk is set to 20805. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): n //鍵入 n 表示要建立分區 Command action e extended p primary partition (1-4) p //鍵入 p 表示建立主要分區 Partition number (1-4): 1 //鍵入 1 為此主要分區代號 First cylinder (1-20805, default 1): //開始磁柱值,按下 enter 即可 Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-20805, default 20805): //結束磁柱值,按下 enter 即可 Using default value 20805 Command (m for help): w //鍵入 w 表示確定執行剛才設定 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@node1 yum.repos.d]# partprobe //使剛才的 partition table 變更生效
建立分區完成後使用指令 fdisk -l 確定 partition talbe 狀態
#fdisk -l Disk /dev/hda: 21.4 GB, 21474754560 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 13 104391 83 Linux /dev/hda2 14 2610 20860402+ 8e Linux LVM Disk /dev/hdb: 10.7 GB, 10737377280 bytes 16 heads, 63 sectors/track, 20805 cylinders Units = cylinders of 1008 * 512 = 516096 bytes Device Boot Start End Blocks Id System /dev/hdb1 1 20805 10485688+ 83 Linux
建立分區完成後請建立 /db 目錄。 (Node1 及 Node2 都必須建立)
#mkdir /db
建立Drbd配置文件
主要定義兩塊global和resource。
vi /usr/local/drbd/etc/drbd.conf
寫入: include "drbd.d/global_common.conf"; include "drbd.d/*.res"; vi /usr/local/drbd/etc/drbd.d/global_common.conf 寫入 global { usage-count yes; } common { net { protocol C; } } vi /usr/local/drbd/etc/drbd.d/r0.res 寫入 resource r0 { on node1 { device /dev/drbd1; disk /dev/hdb1; address 192.168.1.101:7789; meta-disk internal; } on node2 { device /dev/drbd1; disk /dev/hdb1; address 192.168.1.103:7789; meta-disk internal; }
設置Hostname
根據上面的resource配置文件,需要對192.168.1.101和192.168.1.103分別設置hostname為node1和node2,設置方法如下:
vi /etc/sysconfig/network 修改HOSTNAME為node1
vi /etc/hosts 寫入 192.168.1.101 node1 192.168.1.103 node2
使node1 hostnmae臨時生效
hostname node1
node2機器設置類似。
設置Resource
以下操作需要在node1和node2操作。
#modprobe drbd //載入 drbd 模塊 #lsmod|grep drbd //確認 drbd 模塊是否載入 drbd 228528 0 #dd if=/dev/zero of=/dev/hdb1 bs=1M count=100 //把一些資料塞到 hdb 內 (否則 create-md 時有可能會出現錯誤) #drbdadm create-md r0 //建立 drbd resource #drbdadm up r0 //啟動 resource r0
查看node1和node2的狀態應該類似下面的:
cat /proc/drbd version: 8.4.1 (api:1/proto:86-100) GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by [email protected], 2012-02-12 06:05:36 m:res cs ro ds p mounted fstype 0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent C
表明現在已經啟動服務,但還沒有設置同步(即需要設置Primary Node)
設置Primary Node
以下操作僅在node1執行。
設置node1為primary node:
drbdadm primary --force r0
drbdadm primary --force r0
再次查看node1的狀態:
#cat /proc/drbd version: 8.4.1 (api:1/proto:86-100) GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by [email protected], 2012-02-12 06:47:37 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:52892 nr:0 dw:0 dr:52892 al:0 bm:10 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
我們看到狀態已經變成Primary/Secondary,即設置primary node成功。
創建DRBD文件系統
以下操作僅在node1執行。
上面已經完成了/dev/drbd1的初始化,現在來把/dev/drbd1格式化成ext3格式的文件系統。
#mkfs.ext3 /dev/drbd1
然後將/dev/drbd1掛載到之前創建的/db目錄。
#mount /dev/drbd1 /db
現在你只要把數據寫入/db目錄,drbd即會立刻把數據同步到備機192.168.1.103的/dev/hdb1分區上。
Drbd同步測試
當在備機node2啟動drbd時,它是無法掛載/dev/hdb1分區的,我們可以嘗試寫些數據到node1的目錄/db上,然後停止node2的drbd。
drbdadm down r0
之後就可以把node2的/dev/hdb1掛載到目錄/db
mount -t ext3 /dev/hdb1 /db
我們就可以查看node2的/db目錄是否有node1的數據。
手動切換主備機
我們可以把node1改變為備機,而node2改變為主機。
在node1上操作:
umount /dev/drbd1 drbdadm secondary r0
在node2上操作:
drbdadm primary r0
此時應該已經切換成功。