高可用集群HA之双机集群

 

HA:High Availability  高可用性:主要目的就是让运行在服务器上的服务尽可能减少的中断的技术,保证服务运行的连续性;原理如上图所示,本文实现双机集群系统,首先通关管理虚拟机LUCI服务对ClusterVM1ClusterVM2进行管理,维护等工作,而他们之间沟通的桥梁是RICCI服务,所以ClusterVM1ClusterVM2均安装RICCI服务。主要工作原理是ClusterVM1ClusterVM2构成集群的双机,将其中一台作为活动机,也就是运行服务的主机(ClusterVM1),另外一台作为备份机(ClusterVM2),两台服务器主机共用一个网络存储服务器。

ClusterVM1出于某种原因突然坏掉了,无法运行服务,则备份机ClusterVM2立即接管ClusterVM1上面运行的服务,从而保证服务运行的连续性,且不影响用户对数据的读取和存储。从而达到高可靠性的目的。

wKiom1dhSIWjQvdbAAA_9kN-_hI529.png-wh_50

                        原理图


准备工作:启动三台虚拟机: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服务是managervm3对两个集群机(vm1vm2)进行管理和维护的服务,而在manager机上安装luri软件通过web界面对集群的两台虚拟机进行配置;

 

Vm1:管理机

#yum  install  -y  luci

# /etc/init.d/luci  start

#会出现一个网址,在浏览器中输入该网址,进行访问;

先加入两个虚拟机作为集群。

点击:Nodes-->create-->添加两个节点

 注意:因为之前没有过节点,所以此处用create进行添加,若是之前有过节点,则此处用add进行添加;

wKioL1dhTP3SmrhXAABHBex7bhk323.png-wh_50

两台虚拟机中输入:# 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  root@172.25.10.31:/etc/cluster/

#scp  fence_xvm.key  root@172.25.10.32:/etc/cluster/

 

然后在web界面进行操作模拟fence添加;

点击:Fence Devices -->add

wKiom1dhS_6Rt3FUAABbJ1bdh0U052.png-wh_50

 

在点击Nodes中的两个主机,分别添加fence的设置;

wKiom1dhTBrT4MHMAABDQbTlu_Y385.png-wh_50

添加一个fence实例:

wKiom1dhTEGytuNpAABLhlyBQ04485.png-wh_50

 

 

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好了不再回切回去;

wKioL1dhTX_wNE8eAABtpMAtmxc294.png-wh_50

 

 

添加resource资源,也就是需要在主机上运行的服务;

首先添加虚拟ip,ip是对外公布的,客户使用此ip就可以访问服务,而看不到双机的切换;对客户来说是透明的;

wKiom1dhTH6iKU_LAABb3xihDdI730.png-wh_50

 

添加apache服务;

wKioL1dhTZ6Qgu9fAABV1djvwaU789.png-wh_50

 

此时需要在两个虚拟机上安装apache,但是不用启动服务,创建index.html放在/var/www/html; 内容分别写上主机名,以示区别;

 

添加服务组;把前面加的服务直接加入;

wKioL1dhTauy8SnzAABkt4Og2Jg066.png-wh_50

 

wKioL1dhTb-QEG84AABmbt0ZYKs047.png-wh_50

 

wKioL1dhTczTDfFlAABcRFZvzT8114.png-wh_50

 

 

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<target iqn.2016-06.com.example:server.disk>  ##设置唯一标志符

 39    backing-store /dev/vdc1    ##对外共享的设备

 40    initiator-address 172.25.10.31 

 41    initiator-address  172.25.10.32

     #只允许这两个ip地址的主机能进行访问挂载;

 42</target>

 

#/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资源:

wKiom1dhTMfiP9GkAACSmn0UMN0508.png-wh_50

然后在服务组里面按顺序添加虚拟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界面中的ServiceGroupext4文件系统资源移除.最后到挂载的/var/www/html新建index.html就可以访问.