Corosync提供一种HA集群的解决方案,它使用Pacemaker可扩展的高可用集群资源管理器,配合heartbeat或OpenAIS监控节点之间健康状态,通过服务资源的流转,来保证集群向外提供服务的高可用性。
DRBD是一种块设备,可以被用于高可用(HA)之中,它类似于一个网络RAID-1功能。将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中本地(主节点)与远程主机(备节点)的数据可以保证实时同步,以提供数据的异地容灾。在高可用(HA)中使用DRBD功能,以代替昂贵的共享存储设备。
下面借用DRBD官网的一幅图简述其工作流程
本方案拓扑如下:
以下内容包括corosync、drbd的详尽安装及配置过程:
一、Corosync的安装及配置
1.要保证两台节点服务器基于ssl加密且能无障碍的监听heartbeat信号
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub node2
- #node1节点上生成rsa密钥对,并将公钥复制到node2节点
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub node1
- #node2节点上生成rsa密钥对,并将公钥复制到node1节点
2.安装相关软件包
- yum localinstall -y --nogpgcheck ./*
- #进入rpm目录下,全部安装
Ps:node2进行相同操作
3.配置corosync
- cd /etc/corosync
- cp corosync.conf.example corosync.conf
- #进入配置文件目录,从配置文件蓝本复制并修改内容
- vim corosync.conf
- bindnetaddr: 192.168.0.0
- #修改成集群节点所在网段
- service {
- ver: 0
- name: pacemaker
- }
- aisexec {
- user: root
- group: root
- }
- #添加这些字段,保存退出
- corosync-keygen
- #使用软件自带脚本生成通信加密认证文件
- scp -p corosync.conf authkey node2:/etc/corosync/
- #将corosync和authkey复制至node2
- mkdir /var/log/cluster
- ssh node2 mkdir /var/log/cluster
- #分别为两个节点创建corosync生成的日志所在的目录
4.在node1节点尝试启动corosync服务,并分析日志来获知其启动状态
- service corosync start
- #启动服务
- grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
- #查看服务是否正常启动
- grep TOTEM /var/log/messages
- #查看初始化成员节点通知是否正常发出
- grep pcmk_startup /var/log/messages
- #查看pacemaker是否正常启动
node1正常启动,启动node2
- ssh node2 service corosync start
- #启动node服务
- crm status
- #查看集群节点启动情况
5.配置集群的工作属性
- crm configure property stonith-enabled=false
- #关闭stonith设备检测
- crm configure property no-quorum-policy=ignore
- #关闭法定投票人数策略
- crm configure rsc_defaults resource-stickiness=100
- #定义全局资源粘性值
对于上述配置的几点说明:
1.由于没有stonith设备,故关闭检测;
2.由于是双节点HA集群,如果在启动法定投票人策略quorum后,将导致其中一台节点服务器宕机另一台由于获得不够半数的法定人投票而导致整个集群无法工作 ;
3.设置资源粘性值,目的在于防止定义的服务资源在两台性能相同的节点服务器上,因其中一台服务器当机状态恢复而回流,导致无谓的消耗集群系统资源 。
- crm configure show
- #查看配置信息
6.添加服务资源
- crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.73
- #添加VIP资源
- crm configure primitive WebServer lsb:httpd
- #添加web服务资源
- crm configure show
- #查看配置
- crm status
- #查看此时集群状态,资源已被均分在两节点上
corosync的配置基本完成,下面是安装、配置DRBD并将其定义为corosync资源,实现高可用。
二、DRBD的安装及配置
1.安装相关软件包
Ps:drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。(由于作者的内核版本较低,这里选用rpm包来安装drbd模块)
- yum localinstall -y --nogpgcheck drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
- #系在这两个rpm包,并安装
2.DRBD的配置
注意:在修改配置文件之前先给drbd创建一个供其使用的磁盘设备,可以是磁盘分区raid或者逻辑卷(这里作者就直接给其分配一块磁盘分区:使用fdisk命令)
- cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc
- #复制蓝本配置文件到指定目录下
- /etc/drbd.d/global-common.conf
- global {
- usage-count no;
- #修改此项到no
- }
- handler {
- fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
- #由于没有stonith设备需要开启此项,使用drbd的fence脚本来防止脑裂
- }
- startup {
- wfc-timeout 120;
- degr-wfc-timeout 120;
- }
- disk {
- on-io-error detach;
- fencing resource-only;
- }
- net {
- cram-hmac-alg "sha1";
- shared-secret "mydrbdlab";
- }
- syncer {
- rate 100M;
- }
- }
- #在对应位置添加以上内容
- vim /etc/drbd.d/web.res
- #创建资源文件
- resource web {
- on node1.a.org {
- device /dev/drbd0;
- disk /dev/sda5;
- address 192.168.0.71:7789;
- meta-disk internal;
- }
- on node2.a.org {
- device /dev/drbd0;
- disk /dev/sda5;
- address 192.168.0.72:7789;
- meta-disk internal;
- }
- }
- #添加这些内容
- scp /etc/drbd.conf node2:/etc/
- scp /etc/drbd.d/* node2:/etc/drbd.d/
- #将修改好的配置文件同步到node2
3.启动并测试DRBD
- drbdadm create-md web
- ssh node2 drbdadm create-md web
- #在两节点上初始化资源
- service drbd start
- ssh node2 service drbd start
- #在两节点上启动资源
- drbd-overview
- #查看运行状态状态
- drbdadm -- --overwrite-data-of-peer primary web
- #设置主节点
- drbd-overview
- #观察运行状态
Ps:您可以使用:watch -n1 'drbd-overview'以每秒一次的刷新频率动态观察运行状态
同步完成
4.创建文件系统,手动测试主从DRBD
- mke2fs -j -L DRBD /dev/drbd0
- mkdir /mnt/drbd
- mount /dev/drbd0 /mnt/drbd
- #node1挂载中出现lost+found目录
- echo ’test drbd by peacmaker’ > /mnt/drbd/index.html
手动将node2设成master
- drbdadm secondary web
- #在node1上将node1设置成从
- ssh node2 drbdadm primary web
- #在node1上将node2设置成主
- ssh node2 mount /dev/drbd0 /mnt/drbd
- #在node2上挂载
- ssh node2 ll /mnt/drbd
- #查看出现lost+found以及index.html文件
三、将DRBD整合成corosync资源,接受集群调度
先关闭两节点drbd服务,将其定义集群资源后由corosync控制其启动
- chkconfig drbd off
- service drbd stop
- ssh node2 chkconfig drbd off
- ssh node2 service drbd stop
- #在两节点上关闭服务
定义webdrbd资源
- crm 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 configure ms MS_Webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
查看状态
定义磁盘共享资源,并设置资源约束,规定启动顺序
- crm configure primitive WebFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/www/html" fstype="ext3"
- #定义文件系统资源,挂载信息
- crm configure colocation webserver-ip-FS-MS INFINITY: WebServer WebIP WebFS MS_Webdrbd
- #定义资源约束,将所有资源捆绑在一起,使其只能处于一个节点上
- crm configure order ip-fs- mandatory: WebIP MS_Webdrbd WebFS WebServer
- #定义启动顺序:IP资源,DRBD提升为主节点,挂载文件系统,web服务
查看资源状态
添加资源约束后,所有约束都在一个节点上,此时从浏览器输入地址
http://192.168.0.73出现drbd中index.html页面内容
现模拟node2宕机,查看资源状态
注意:由于drbd的crm-fence-peer.sh脚本存在,会自动在xml文件中生成如下语句,来保证一旦drbd的master宕机slaver不会顶上master,当master恢复之后出现脑裂或数据不同步等情况的发生。
所以在测试资源流转之前需要删除相关语句,从而实现通过corosync控制drbd资源的流转。
- crm configure edit
- #删除下图中标记字段,以实现pacemaker对drbd进行出从切换
- ssh node2 crm node standby
- #在node1上让node2处于standby待命状态
- crm status
- #查看资源状态
资源已经全部成功转移到node1上!
刷新浏览器页面,由于drbd主从受corosync控制发生切换,故web服务将正常访问且是相同内容:
至此Corosync/Pacemaker+heartbeat+drbd高可用集群具体实现流程已叙述完毕,以上内容在您实现过程中出现的任何问题,欢迎在此交流;并请各位高手前辈大神达人予以批评指正,谢谢!