Drdb,簡介
DRDB是一種分佈式磁盤塊設備,可以在兩個主機間共用同步的存儲空間,但是由於其是以一個一個的數據位存儲數據的(有別與nfs),所以兩個節點不能同時掛載使用。當然,在集羣文件系統中個,如若配置了分佈式文件鎖來統一管理對數據的讀寫,DRDB仍是非常不錯的選擇。比較適用於在小型企業中,應用到需要保持數據一致的共享存儲環境中。
Dridb的安裝
drdb分爲兩個部分,內核模塊和用戶空間的管理工具。下載地址爲ftp://rpmfind.net/linux/atrpms/。請確保你的主機版本適用。
安裝配置步驟;
這裏使用ansible來統一部署。確保兩節點時間同步。
1、安裝包下載。請用uname -n查看你的主機內核版本下載合適的包。
drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
drbd-8.4.3-33.el6.x86_64.rpm
2、爲兩個節點提供一個用於drbd的磁盤。
fdisk /dev/sd#
3.配置配置文件和定義一個你需要的資源。
resource web { on node1.nyist.com { device /dev/drbd0; disk /dev/sd5; address 172.16.20,31:7789; meta-disk internal; } on node2.nyist.com { device /dev/drbd0;---設備編號 disk /dev/sd5;---磁盤位置 address 172.16.20,32:7789;---共享出去的掛載點 meta-disk internal; } }
4、將配置文件和資源文件CP到另外一個節點
5、先初始化資源然後啓動服務,查看主節點位置
[root@node2 drbd.d]# drbdadm create-md web Writing meta data... initializing activity log NOT initializing bitmap--------可以忽略這個錯誤 lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory New drbd meta data block successfully created. lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory [root@node1 drbd.d]# cat /proc/drbd version: 8.4.3 (api:1/proto:86-101) GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00 0: cs:Connected ro:Secondary/Secondary ds:Diskless/Diskless C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
6、提升爲node1主節點,同步成後就可以掛載格式化使用了。
[root@node1 drbd.d]# drbdadm primary --force web [root@node1 drbd.d]# cat /proc/drbd version: 8.4.3 (api:1/proto:86-101) GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:55156 nr:0 dw:0 dr:55316 al:0 bm:4 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 [root@node1 drbd.d]# mke2fs -t ext4 /dev/drbd0
7、主節點掛載使用,然後降級,卸載。
[root@node1 ~]# mkdir /mydata [root@node1 ~]# mount /dev/drbd0 /mydata [root@node1 ~]# cp /etc/issue /mydata/ [root@node1 ~]# umount /mydata [root@node1 ~]# drbdadm secondary web [root@node1 ~]# cat /proc/drbd version: 8.4.3 (api:1/proto:86-101) GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:61405 nr:0 dw:6249 dr:55793 al:2 bm:4 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 [root@node1 ~]#
8、從節點升級爲primary,查看數據是否存在。
[root@node2 drbd.d]# drbdadm primary web [root@node2 drbd.d]# cat /proc/drbd version: 8.4.3 (api:1/proto:86-101) GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:61405 dw:61405 dr:160 al:0 bm:4 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 [root@node2 drbd.d]# mkdir /mydata [root@node2 drbd.d]# mount /dev/drbd0 /mydata/ [root@node2 drbd.d]# ls /mydata/ issue lost+found [root@node2 drbd.d]#
drbd並不能自動完成角色切換,所以用起來是非不便,可以使用pacemaker把drbd定義成高可用資源,這樣使用drbd就方便實用多了。
用ansible給各節點安裝corosync和pacemaker
root@xuqimin ~]# ansible all -m yum -a "name=pacemaker state=present" [root@xuqimin ~]# ansible all -m yum -a "name=corosync state=present" [root@node2 ~]# yum install crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm -y
把drbd的主降級,停止服務,切不能開機自啓動
[root@node2 ~]# umount /dev/drbd0 [root@node2 ~]# drbdadm secondary web [root@node2 ~]# service drbd stop Stopping all DRBD resources: . [root@node2 ~]# chkconfig drbd off
修改corosync配置文件,啓動服務:
[root@node1 ~]# crm status Last updated: Tue Apr 22 23:56:27 2014 Last change: Tue Apr 22 23:54:31 2014 via crmd on node1.nyist.com Stack: classic openais (with plugin) Current DC: node1.nyist.com - partition with quorum Version: 1.1.10-14.el6-368c726 2 Nodes configured, 2 expected votes----兩個節點已經到位 0 Resources configured Online: [ node1.nyist.com node2.nyist.com ]
修改一些默認參數。
crm(live)configure# property no-quorum-policy=ignore crm(live)configure# property stonith-enabled=false crm(live)configure# rsc_defaults resource-stickiness=100 crm(live)configure# show node node1.nyist.com node node2.nyist.com property $id="cib-bootstrap-options" \ dc-version="1.1.10-14.el6-368c726" \ cluster-infrastructure="classic openais (with plugin)" \ expected-quorum-votes="2" \ stonith-enabled="false" \ default-resource-stickiness="100" \ no-quorum-policy="ignore" rsc_defaults $id="rsc-options" \ resource-stickiness="100"
開始定義資源,將drbd設備定義成集羣服務(確保drbd服務爲開啓切開機不自動啓動)
drbd工作要想兩個節點數據一致,需要一個節點在其數據修改的時候同時按位同步到對方節點,所以將其定義成集羣服務的時候需要兩個節點同時運行drbd。但是爲了防止兩個節點同時對數據修改造成數據文件系統崩潰的情況,需要將其定義成主從模型。也就是說服務剛剛啓動的時候,兩個節點都處於slave狀態,而後將其中一個節點提升爲master。
crm(live)configure# primitive webdrbd ocf:linbit:drbd params drbd_resource=web op monitor role=Master interval=50s timeout=30s op monitor role=Slave interval=60s timeout=30s crm(live)configure# master MS_webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" scrm(live)configure# show node node1.nyist.com node node2.nyist.com primitive webdrbd ocf:linbit:drbd \ params drbd_resource="web" \ op monitor role="Master" interval="50s" timeout="30s" \ op monitor role="Slave" interval="60s" timeout="30s" ms MS_webdrbd webdrbd \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" target-role="Started" property $id="cib-bootstrap-options" \ dc-version="1.1.10-14.el6-368c726" \ cluster-infrastructure="classic openais (with plugin)" \ expected-quorum-votes="2" \ stonith-enabled="false" \ default-resource-stickiness="100" \ no-quorum-policy="ignore" rsc_defaults $id="rsc-options" \ resource-stickiness="100" crm(live)resource# start webdrbd crm(live)# status 2 Nodes configured, 2 expected votes 2 Resources configured Online: [ node1.nyist.com node2.nyist.com ] Master/Slave Set: MS_webdrbd [webdrbd] Masters: [ node2.nyist.com ] Slaves: [ node1.nyist.com ]
drbd服務已經啓動,而且也會根據節點的故障與否自動切換drbd角色的主和從。接着就可以primary節點上的web資源創建自動掛載的集羣服務了。
crm(live)configure# primitive WebFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/www" fstype="ext3" 定義排列約束 crm(live)configure# order WebFS_after_webdrbd inf: WebFS MS_webdrbd crm(live)configure# show node node1.nyist.com node node2.nyist.com \ attributes standby="off" primitive WebFS ocf:heartbeat:Filesystem \ params device="/dev/drbd0" directory="/www" fstype="ext3" primitive webdrbd ocf:linbit:drbd \ params drbd_resource="web" \ op monitor role="Master" interval="50s" timeout="30s" \ op monitor role="Slave" interval="60s" timeout="30s" ms MS_webdrbd webdrbd \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" target-role="Started" order WebFS_after_webdrbd inf: WebFS MS_webdrbd