高可用集群HA之双机集群
HA:High Availability 高可用性:主要目的就是让运行在服务器上的服务尽可能减少的中断的技术,保证服务运行的连续性;原理如上图所示,本文实现双机集群系统,首先通关管理虚拟机LUCI服务对ClusterVM1、ClusterVM2进行管理,维护等工作,而他们之间沟通的桥梁是RICCI服务,所以ClusterVM1、ClusterVM2均安装RICCI服务。主要工作原理是ClusterVM1、ClusterVM2构成集群的双机,将其中一台作为活动机,也就是运行服务的主机(ClusterVM1),另外一台作为备份机(ClusterVM2),两台服务器主机共用一个网络存储服务器。
当ClusterVM1出于某种原因突然坏掉了,无法运行服务,则备份机ClusterVM2立即接管ClusterVM1上面运行的服务,从而保证服务运行的连续性,且不影响用户对数据的读取和存储。从而达到高可靠性的目的。
原理图
准备工作:启动三台虚拟机:vm1 vm2 vm3使用vm1作为管理机,vm2 vm3做双机集群,vim /etc/hosts vm1 vm2 vm3 需要相互解析,然后需要配置yum源文件,此时源文件与以往的不同,需要指定特定的包目录。
步骤:vm2 vm3:
#yum install -y ricci #安装ricci软件
#echo westos | passwd --stdin ricci #给ricci设定密码
#chkconfig ricci on #开机自启
#/etc/init.d/ricci start #启动服务
步骤:vm2 vm3:
#yum install -y ricci #安装ricci软件
#echo westos | passwd --stdin ricci #给ricci设定密码
#chkconfig ricci on #开机自启
#/etc/init.d/ricci start #启动服务
注:ricci服务是manager机vm3对两个集群机(vm1、vm2)进行管理和维护的服务,而在manager机上安装luri软件通过web界面对集群的两台虚拟机进行配置;
Vm1:管理机
#yum install -y luci
# /etc/init.d/luci start
#会出现一个网址,在浏览器中输入该网址,进行访问;
先加入两个虚拟机作为集群。
点击:Nodes-->create-->添加两个节点
注意:因为之前没有过节点,所以此处用create进行添加,若是之前有过节点,则此处用add进行添加;
两台虚拟机中输入:# clustat 可以查看这两个节点连机状态;
添加fence机制,本身fence分为内部fence和外部fence,他是一个物理硬件设备,能够对一台虚拟机进行跳电,这是集群的一个机制,外部fence作为仲裁,若高可靠集群中的一台主机出现问题,还没有完全坏透,外部fence会让他彻底坏掉。
此处没有真的外部fence,因此只有进行模拟,而对虚拟机能管理的只有virt-manager了,所以在web界面添加fence。
首先在真机安装fence-virtd等相关软件服务:
Root#yum install -y fence-virt.x86_64 fence-virtd.x86_64
fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64
#fence_virtd -c 创建并配置fence使用的backend后台,multicast多波,端口,ip,接口interface,以及key文件fence_xvm.key,不过这文件需要自己创建。
#mkdir /etc/cluster
#dd if=/dev/urandom of=fence_xvm.key bs=128 count=1
#systemctl restart fence_virtd
#netstat -anulpe| grep 1229 检测该服务端口有没有开启,
#scp fence_xvm.key [email protected]:/etc/cluster/
#scp fence_xvm.key [email protected]:/etc/cluster/
然后在web界面进行操作模拟fence添加;
点击:Fence Devices -->add
在点击Nodes中的两个主机,分别添加fence的设置;
添加一个fence实例:
Server32.example.com虚拟机也是如此操作;
在两个节点进行fence测试:
vm1 #fence_node server32.example.com #连接另一台虚拟机succes.然后另一台虚拟机就会关机重起,这也是fence的工作机制。
vm2# fence_node server31.example.com 同上;
在web界面添加双机集群策略以及相应的运行服务;
添加集群策略prioritized 设置优先级,restricted仅限制在下面列出的主机;no Failback 表示当优先级高server31.examle.com的主机坏了,server32.example.com主机直接接管,然后当server31.examle.com好了不再回切回去;
添加resource资源,也就是需要在主机上运行的服务;
首先添加虚拟ip,此ip是对外公布的,客户使用此ip就可以访问服务,而看不到双机的切换;对客户来说是透明的;
添加apache服务;
此时需要在两个虚拟机上安装apache,但是不用启动服务,创建index.html放在/var/www/html; 内容分别写上主机名,以示区别;
添加服务组;把前面加的服务直接加入;
在FIREFOX里面进行输入虚拟ip:172.25.10.100可以查看网页的内容;
在vm1 vm2输入命令:clustat查看apache服务哪个主机上,比如运行在server1.example.com上,测试:用命令:clusvcadm -r apache server2.example.com主机接管服务过来;通过查看网页可以看见不同的内容输出;
接下来实现双机集群与存储结合起来;存储使用iscsi网络存储块;
用vm3作为存储服务器,对外提供网络存储;
vm3
先添加一块虚拟硬盘;大概给8G
#yum install -y scsi-target-utils.x86_64 存储服务器端
# rpm -qa |grep scsi 查询是否安装且查看版本号;
#vim /etc/tgt/targets.conf 编辑配置文件;
38
39 backing-store /dev/vdc1 ##对外共享的设备
40 initiator-address 172.25.10.31
41 initiator-address 172.25.10.32
#只允许这两个ip地址的主机能进行访问挂载;
42
#/etc/init.d/tgtd restart 使ISCSI存储服务重起;
#tgt-admin -s 查看配置产生的效果,查看共享路径及允许哪些ip主机可以进行访问;
在集群的双机上面安装iscsi的客户端服务;vm1 vm2
#yum install -y iscsi-initiator-utils.x86_64
注:这个服务有一个特点,不需要手工启动,只要发现可用网络存储块就会自己启动;
#iscsiadm -t st -m discovery -p 172.25.10.30 发现网络存储设备 (发现和连接设备两台主机均要进行操作)
#iscsiadm -m node -l ##对发现的设备进行连接;
(iscsiadm -m node -u :断开连接的设备
iscsiadm -m node -o delete :将断开的设备删除;
)
发现了设备进行LVM,方便以后在线扩容;
fdisk -l --> fdisk /dev/vdc --> 新建一个lvm格式的主分区/dev/sda1;
#pvcreate /dev/sda1 -->pvs
#vgcreate vgcluster1 /dev/sda1 -->vgs
#lvcreate -L +2G -n lv0/dev/vgcluster1 --- lvs
#mkfs.ext4 /dev/vgcluster/lv0 #制作为ext4文件格式
注:上面的步骤只能在集群中一个虚拟机进行操作;并且每操作一步结束,另外一台主机均能同步过来,均可以查看,如果无法查看,则说明有问题,我今天就碰到了这个问题,解决这个问题的方法是:在web界面上选中server31.example.com和 server32.example.com 进行重新启动(reboot),然后再进行lvm制作,就好了;
{# /etc/init.d/clvmd status ##查看集群文件系统服务的状态}
此时可以将文件系统进行挂载使用,有一个问题,就是ext4文件系统不支持同时读写,比如说vm1挂载了并且新建了文件,vm2也挂载了,但是无法看到vm1新建的文件;
此时可以将存储与集群结合起来使用:
注意点:集群的两台虚拟机不能挂载此网络存储设备,且要将运行的服务apache停止;没有存储的服务怎么用,对把!!
然后在web界面添加resource资源:
然后在服务组里面按顺序添加虚拟ip --> 文件系统webdata --> 添加服务apache;
最后启动apache服务(或者在集群机里面使用命令使得apache服务启动: clusvcadm -e apache )
注:clusvcadm -d apache 停住apache服务;
#clustat ##查看apache服务运行在哪台虚拟主机上;
此时网络设备自动挂载在前面web设置的路径上面/var/www/html/,因此echo www.westos >/var/www/html/index.html 网页上就可以进行访问,可以查看到内容;
输入如下命令可以测试HA的高可靠性;就是让vm1内核崩溃,集群将使得vm2自动接管服务;使得服务不会中断;高可靠性就是这么体现出来的;此时要是存储容量不够还可继续进行扩容,支持在线扩容;
#lvextend -L +2G -n /dev/vgcluster/lv1
#resize2fs /dev/vgcluster/lv0 文件系统同时扩容;
换另外一种文件系统:及GFS2文件系统,支持同时读取存储文件,比ext4文件系统要高级不少;
首先把apache服务停止(clusvcadm -d apache),然后在web 界面service group中删除文件系统webdata(ext4格式).
# lvremove /dev/vgcluster/lv0 --> pvs
# lvcreate -L 2G -n demo /dev/vgcluster
#mkfs.gfs2 -p lock_dlm -tliumin_HA:mygfs2 -j 3 /dev/vgcluster/lv0
注:-p :表示加入集群锁机制, -t集群所表名格式为:clustername:fsname. -j : 表示集群锁日志,每一个日志占据128M大小的空间,数目一般为集群机的数目加一;
#gfs2_tool sb /dev/vgcluster/demo all :查看所有信息
#mount /dev/vgcluster/demo /mnt
#gfs2_tool journals /dev/vgcluster/demo :查看日志占据的大小.
现在使集群与存储结合起来;此时网络存储的文件格式为gfs2
有两种方法实现:1,在web界面进行添加;2.直接在集群的两台虚拟机上进行操作.
此刻选择第二种方式实现: vm1 vm2
#gfs2_tool sb /dev/vgcluster/demo all 获取UUID号,
#vim /etc/fstab
UUID=cec275d7-af42-d574-281c-525f5bd0289e /var/www/html/ gfs2 _netdev 0 0
注:因为是网络存储共享,所以选择_netdev模式,
#mount -a
###两台主机进行一样的操作;此时需要注意一点,就是操作之前,必须先要使apache服务停止,然后确保web界面中的ServiceGroup中ext4文件系统资源移除.最后到挂载的/var/www/html新建index.html就可以访问.