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