drbd+corosync+pacemaker实现web应用的高可用

时间:2021-11-23 03:20:43

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 webWriting meta data...initializing activity logNOT initializing bitmap--------可以忽略这个错误lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directoryNew 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/drbdversion: 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/drbdversion: 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/drbdversion: 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/drbdversion: 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 stopStopping all DRBD resources: .[root@node2 ~]# chkconfig drbd off
修改corosync配置文件,启动服务:
[root@node1 ~]# crm statusLast updated: Tue Apr 22 23:56:27 2014Last change: Tue Apr 22 23:54:31 2014 via crmd on node1.nyist.comStack: classic openais (with plugin)Current DC: node1.nyist.com - partition with quorumVersion: 1.1.10-14.el6-368c7262 Nodes configured, 2 expected votes----两个节点已经到位0 Resources configuredOnline: [ node1.nyist.com node2.nyist.com ]
修改一些默认参数。
crm(live)configure# property no-quorum-policy=ignorecrm(live)configure# property stonith-enabled=falsecrm(live)configure# rsc_defaults resource-stickiness=100crm(live)configure# shownode node1.nyist.comnode node2.nyist.comproperty $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=30scrm(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# shownode node1.nyist.comnode node2.nyist.comprimitive 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 webdrbdcrm(live)# status2 Nodes configured, 2 expected votes2 Resources configuredOnline: [ 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_webdrbdcrm(live)configure# shownode node1.nyist.comnode 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