转
接下来开始做关于HA的配置
我是在实验中途创建的仲裁,这里先将仲裁盘的创建记录下来。仲裁的作用裁定两个以上节点到底由谁来接管服务,以投票的形式来决定最终服务节点,算是一种较民主地概念在IT环境的应用。当某个提供服务的节点出现问题时,其它两个节点由配置好的仲裁探测法来测试另外哪个节点的性能更好,票数也就更多,就由该节点来接管服务。我在配之前还在想如果设定不同的故障域是不是就不用配了,后为发现如果是双节点以上不配仲裁的话,cman服务根本起不来,呵呵(看来不能太天真)。
在三节点的任意一个节点都可以,就用s1吧。格式化仲裁盘
mkqdisk -c /dev/sda1 -l qdiskWeb //qdiskWeb是仲裁盘的标识,这个十分重要
如果怕sda1在某些情况下会变,可以固定盘符
udevadm info -q all -n /dev/sda1//查看sda1设备在被内核识别时候的信息
从众多信息中找到ID_SCSI_SERIAL=beaf11,修改/etc/udev/rules.d/99-iscsi.rules文件,添加信息
KERNEL=="sd[a-z]",ENV{ID_SCSI_SERIAL}=="beaf11",NAME="disk_fs"
上述的NAME功能是,设置生效后,会发现/dev/sda1变成了/dev/disk_fs
保存退出,使设置生效udevadm trigger,不过这个我没做,就是说说方法而已。
格式化完仲裁盘后,可以在三节点上都可以查看仲裁盘信息
mkqdisk -L
再有就是在配HA之前要为fence设备做些准备,如果要在KVM使用fence设备,必须要用虚拟化层去执行每次的fence动作。RHCS对虚拟机默认的fence设备是fence_virtsh,KVM支持的设备是fence_apc,所以根据开始提到的CSDN博客的指导,我将fence设备“偷龙转凤”
mv /usr/sbin/fence_apc /usr/sbin/fence_apc.bak
ln -s /usr/sbin/fence_virsh /usr/sbin/fence_apc//其实就做个软链接
从这里可以看出,是三节点共用一个fence设备
接下来将三个节点的ricci服务启用,并设置为开机自启,创建ricci用户密码
/etc/init.d/ricci start & chkconfig ricci on
passwd ricci//密码我填的是123456
在s1上用命令行正式创建HA(其它节点也行)
ccs -h s1 --createcluster web_cluster//创建集群,名字是web_cluster
ccs -h s1 --addnode s1.example.com//添加集群节点
ccs -h s1 --addnode s2.example.com
ccs -h s1 --addnode s3.example.com
ccs -h s1 --lsnodes//查看创建的节点
s1.example.com: nodeid=1
s2.example.com: nodeid=2
s3.example.com: nodeid=3
//nodeid是创建时集群为每个节点创建的ID号
ccs -h s1 --addfencedev virsh_fence//virsh_fence是fence设备的名称
ccs -h s1 --addfencedev virsh_fence agent=fence_apc ipaddr=192.168.122.1 login=root passwd=123456
//fence_apc就是"偷龙转凤"所做的fence设备,IP填写server6的地址,用户名填root,密码填root用户密码,其实这里有个默认参数action,即fence动作,默认是重启
ccs -h s1 --addmethod fence_01 s1.example.com//为三节点创建fence设备,fence_0x为节点fence设备名称
ccs -h s1 --addmethod fence_02 s2.example.com
ccs -h s1 --addmethod fence_03 s3.example.com
将节点与fence设备做关联
ccs -h s1 --addfenceinst virsh_fence s1.example.com fence_01 port=RHEL6.3-HA1
ccs -h s1 --addfenceinst virsh_fence s2.example.com fence_02 port=RHEL6.3-HA2
ccs -h s1 --addfenceinst virsh_fence s3.example.com fence_03 port=RHEL6.3-HA3
//这里要注意的是port参数内容要填KVM创建的虚拟机名称
ccs -h s1 --lsfenceinst//查看刚刚创建的fence设备
s1.example.com
fence_01
virsh_fence: port=RHEL6.3-HA1
s2.example.com
fence_02
virsh_fence: port=RHEL6.3-HA2
s3.example.com
fence_03
virsh_fence: port=RHEL6.3-HA3
ccs -h s1 --addfailoverdomain web_doamin restricted ordered=0 nofailback
//创建故障域web_doamin,有限制无序,且失效节点重新加入集群后服务无需返回该节点
ccs -h s1 --addfailoverdomainnode web_doamin s1.example.com 1
ccs -h s1 --addfailoverdomainnode web_doamin s2.example.com 1
ccs -h s1 --addfailoverdomainnode web_doamin s3.example.com 1
//创建故障域节点,因为是无序,所以后边的排序号码都是1
ccs -h s1 --lsfailoverdomain//查看创建的故障域
web_domain: restricted=1, ordered=0, nofailback=1
s1.example.com: priority=1
s2.example.com: priority=1
s3.example.com: priority=1
ccs -h s1 --addresource ip address=192.168.122.253 monitor_link=1//创建VIP资源,且需监控资源
ccs -h s1 --addresource fs name=web_share fstype=ext4 device=/dev/sda2 mountpoint=/mnt force_unmount=1 self_fence=1
//创建文件系统资源,即挂载含有站点文件的ISCSI盘,force_unmount表示节点失效后强制卸载,self_fence表示强制卸载无效后对该节点做fence动作
ccs -h s1 --addresource script name=web_script file=/etc/init.d/httpd
//创建apache2服务的启动脚本资源
ccs -h s1 --addservice web_service domain=web_doamin recovery=relocate
//web_service表示服务名称,relocate表示若节点失效先尝试在该节点重启服务再切换节点重启服务
ccs -h s1 --addsubservice web_service ip ref=192.168.122.253//创建服务的子服务
ccs -h s1 --addsubservice web_service ip:fs ref=web_share//创建子服务的子服务
ccs -h s1 --addsubservice web_service ip:fs:script ref=web_script//同上
最后的结构是web_service服务先启VIP,再挂载iscsi,最后启动apache2
ccs -h s1 --lsservices//查看创建的所有服务与资源
service: name=web_service
ip: ref=192.168.122.253
fs: ref=web_share
script: ref=web_script
resources:
ip: monitor_link=1, address=192.168.122.253
fs: name=web_share, self_fence=1, force_unmount=1, fstype=ext4, device=/dev/sda2, mountpoint=/mnt
script: name=web_script, file=/etc/init.d/httpd
ccs -h s1 --setquorumd label=qdiskWeb//设置仲裁盘
ccs -h s1 --addheuristic interval=1 program="ping -c 1 192.168.122.1" tko=3
//创建仲裁探测法,以每秒ping 本地虚拟机为探测方法,成功一次能1票,最多3次ping不通节点失效,其实还有一个参数score表示每成功一次得票多少,默认为1,所以没做设置;还有 min_score,表示最小得票数,默认为0,也没做设置
ccs -h s1 --lsquorum//查看创建的仲裁盘与仲裁探测法
Quorumd: label=qdiskWeb
heuristic: program=ping -c 1 192.168.122.1, interval=1, tko=3
本来以为到这里算是设置成功,结果发现少了一样
ccs -h s1 --setcman expected_votes=5
//总票数为5,三节点在启动后各占一票,若有节点失效,哪个节点的得票数能超过5的一半即启动服务
按自己理解的说的,有可能不对,呵呵
所有配置完成,三台节点一起启动cman服务。注意,是一起
/etc/init.d/cman start
查看集群状态
clustat
看到三台与仲裁盘启动成功,若是不配仲裁,CMAN服务启动会报错
再启动服务
/etc/init.d/rgmanager start
可以看到,现在服务是在s3节点启动的。现在来看看页面能否正常显示
页面显示正常,这个浏览器我是在server6 虚拟机上打开的。现在来将s3的网卡当掉,看看fence与服务切换情况
ssh到s3上,ifdown eth0
s3已经是离线状态,正在重启。再来看看服务
我截图速度较慢,可以看到服务已经切到s2上,而s3这时已经重启完了,这时再次浏览VIP能够成功看到页面内容。之后我试过停apache2服务,发现只要节点不重启,就会在原节点重新启动服务。由于只有一个网卡,心跳即业务线,所以测试到此结束!