高可用集群的概念: 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务。高可用集群是用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以保证服务一直在线。在这个过程中,对于客户端来说是透明的。

实验环境:需要三台纯净的虚拟机   iptables关闭  selinux为disabled

                server1:172.25.19.1   #ricci节点主机

                server2:172.25.19.2   #ricci节点主机

                server3:172.25.19.3   #luci管理主

yum源的配置vim /etc/yum.repo/

[server]

name=huang

baseurl=http://172.25.254.19/rhel6.5

gpgcheck=1

 

[HighAvailability]

name=huang

baseurl=http://172.25.254.19/rhel6.5/HighAvailability

gpgcheck=1

 

[LoadBalancer]

name=huang

baseurl=http://172.25.254.19/rhel6.5/LoadBalancer

gpgcheck=1

 

[ResilientStorage]

name=huang

baseurl=http://172.25.254.19/rhel6.5/ResilientStorage

gpgcheck=1

 

[ScalableFileSystem]

name=huang

baseurl=http://172.25.254.19/rhel6.5/ScalableFileSystem

gpgcheck=1

三台虚拟机都要配置yum源

wKiom1dxJFOyAIpGAAFBb-Bq7iQ237.png三台虚拟机和物理机都要有解析 如下一个范列其他主机一样配置

wKiom1dhct6wIvAeAACh4IvjBx0408.png

实验过程:

server1 ricci节点主机上:

                        yum install ricci -y #安装ricci软件

                        echo westos | passwd --stdin ricci #给ricci密码  一定要有 否则创建不了集群

                        chkconfig  ricci  on #设定ricci服务开机自启

                        /etc/init.d/ricci  start

                         yum install httpd  #不要启动该服务

在server2 ricci节点主机上:进行以上同样的步骤。

在server3 luci管理主机上:

                         yum  install  luci -y #安装luci管理软件

                         /etc/init.d/luci  start #启动luci服务                    wKioL1dxJXHTkgLbAAAvllHBbpc234.png

在浏览器访问 https://server3.example.com:8084

wKioL1dhdS7im89nAAAdb7ynNH0878.png

注:使用server3的root用户登录

创建集群:

wKiom1dhdL3BWtOkAADIUqIrinE514.png

集群的名字随便填写   但字符数不要超过15个 超过了就会创建不成功

wKiom1dhdQTw-RsQAABmLuAqmJM774.png

显示该页面 说明集群创建成功

用cluster命令查看ricci节点主机上的集群状态

wKiom1dxJmyxR8MnAABCKK_hzl0347.png

重复创建集群会报错 如果想重新创建 需要 rm -rf /etc/cluster/cluster.conf 然后重启服务 再创建 在网页上所做的动作都会写入该文件 /etc/cluster/cluster.conf

fence设备文件的生成

在物理机上:

                  yum   search  fence  

wKioL1dxJyDy6ZweAABudsy0kUQ716.png

然后  yum  install  fence-virt fence-virtd fence-virtd-libvirt fence-virtd-multicas  -y

wKioL1dhdtDz205GAAByMYh9ND4023.png

         执行命令 fence_virtd -c

wKioL1dhdz-z_d4qAAEY3Tw4OQ0666.pngwKiom1dhdhHzOJJtAAD5bbTy1Dg263.png

wKiom1dhdkvyUAiLAACriWaSuu0254.pngf

mkdir  /etc/cluster  -p(有该目录就不需要创建了)

cd  /etc/cluster/

dd  if=/dev/urandom  of=/etc/cluster/fence_xvm/key

wKiom1dhdtvDQGvgAACSJM7F9t8169.png

scp  /etc/cluster/fence_xvm/key  root@172.25.45.1:/etc/cluster/

scp  /etc/cluster/fence_xvm/key  root@172.25.45.2:/etc/cluster/

systemctl  restart  fence_virtdwKioL1dhd6fSaXBiAABMdWJqwno960.png

在网页中添加fence设备

wKiom1eMz6LQSo2tAABgZKmBb9g463.png-wh_50

在两个节点中分别执行以下步骤

wKiom1eM0JXhN2D6AAAl-IcFvlg971.png-wh_50

wKioL1eM0N-SR5AwAAA6voD78zc469.png-wh_50

添加错误域

wKiom1eM0U7ALypjAABeNq_18fs579.png-wh_50

添加集群资源

wKiom1eM0dbzZvM5AAAzlrwndKg124.png-wh_50

wKioL1dhfFORAYNTAACeayXbe5g122.png

注:此ip是一个浮动虚拟的ip 用于外界的访问 

添加服务组

wKiom1dhe0DiwfIQAADrW7SlX_s750.png

在服务组在添加前面添加的两个资源   

wKioL1eM0qeRKpbTAAAu3EQzO1Q412.png-wh_50

可见集群已经自动开启了httpd服务

测试:

在server1上:fence_nde derver1.example.com server1会断电重新启动 说明fence配置成功

在server1上:cluster查看集群的状态wKiom1dhe82ybvvEAACKMh-Ppzs349.png

可见httpd服务在已经在server1上已经开启

为了使效果更明显 配置测试页:echo server1.example.com > /var/www/html/index.html

                             echo derver2.example.com > /var/www/html/index.html

浏览器访问虚拟ip 172.25.45.100

wKioL1dhfHCjbnJuAABOAYJt-9g228.png

在server1上:ip addr show


wKioL1dhfHLiAexJAAD-kLVu_aU499.png

可以看到浮动的ip

在server1上:clusvcadm -r apache -m server2.example.cm #把httpd服务转移到另一节点上

wKioL1dhfPCzNFFrAADW2YLD0IA505.pngwKiom1dhfAyR_9YpAAEEgQoAI7U241.png

断网模拟

在server1上:ifconfig eth0 down server1挂掉 此时服务会跳转到server2 浮动ip也会跳转到server2上 当server1重新启动后 服务又会重新跳转到server1上 因为server1是主节点 设置的优先级最高 又设置了服务回切 

内核崩溃模拟

在server1上:echo c > /proc/sysrp-trigger

和以上类似

存储共享:

在server3上:先添加个虚拟硬盘

wKiom1dhfLaxDbE4AAB2bDGe-Us980.png

yum  install  scsi-*  -y

vim  /etc/tgt/targets.conf  添加以下内容:wKioL1dhff7AZYVkAABJ4HNDZTk879.png

tgt-admin -s #查看

/etc/init.d/tgtd  start #启动服务

wKiom1dhfUTA6W9vAADq2EpNVLg399.png

在server1上:yum  install  iscsi-*  -y

iscsiadm -m discovery -t -st -p 172.25.45.3 #与server3上的设备关联

iscsiadm -m node -l #登录到设备

fdisk  -l #查看可用的分区

wKiom1dhfYjDEfV8AACeSHRmWvs116.png

建立逻辑卷  首先

fdick  -cu  /dev/sda  #建立分区

在server2上:yum  install  iscsi-*

iscsiadm -m discovery -t -st -p 172.25.45.3

iscsiadm -m node -l

fdisk  -l #查看可用的分区

wKioL1dhf6CggmHnAACcye_x2gc722.png

          

从server1上同步过来

cat /proc/partitons #查看系统分区

wKiom1dhfuKzr2yFAABbmGr-ReM783.png

在server1上: pvcreate /dev/sda1 #创建物理卷

pvs #查看物理卷信息

在server2上:pvs 查看物理卷是否同步过来server2上

wKioL1dhgE_ge4gfAAA01qCKxEo321.png

vgcreate  clustervg  /dev/sda1

在server2:vgs 查看物理卷组是否同步过来server2上

wKiom1dhf2qBz1UkAAAz6uj0dGw501.png

lvcreate -L 2G -n lv1 clustervg

同样在server2上查看是否同步过来

wKiom1dhgEWxLy01AABv-wql0ys535.png


mkfs.ext4  /dev/clustervg/lv1 #格式化 

测试:挂载

server1和server2都挂载到/mnt/下,可以sever1在/mnt/下建立一个文件或者目录 server2不能看到 只有server2卸载后 再挂载上去 才能在/mnt/下看到建立的东西

存储和集群的联系:

在网页上  添加集群资源 选择添加文件系统 

apache 关掉  删掉scripts,添加Filesystem和Script

wKiom1dhgOijyOlJAADgjP3u2hU907.png

wKiom1dhgOiR_RBbAABV_28x13I871.png

wKioL1dhgf2yR1rnAACKzuq-UjY211.pngwKiom1dhgOrgm_ZOAACHu7xD03I721.png

先制作一个测试页 echo  www.westos.com > /var/www/html/index.html

clusvcadm -e apache #在该主机上启动apache

访问 172.25.19.100 效果如下

wKioL1dhgf7ABvnAAABNOmej7vo656.png

  

内核崩溃模拟 在server1上:echo c > /proc/sysrq-trigger 

server1挂掉 服务的文件系统自动挂载跳转到另一节点server2上

wKioL1dxLDPRA5c-AABg0cC6IpQ050.pngwKiom1dxLECjFGU1AABZd5g8Mnk576.pngwKioL1dxLE7A-E0fAACix53KtXg052.png还可以断网模拟 停止服务在测试 效果都和 以上差不多 不管那个节点的主机挂了 都不影响服务和磁盘的自动挂载 保证了服务的高可用性

gfs2文件系统的存储共享:

在网页上:Service Groups中  删掉FilesystemScrip    集群资源中 删掉webdata

lvremove  /dev/clustervg/vg1   

lvs   查看server2上是否还存在 不存在说明进行了同步

lvcreate  -L 2G  -n  demo  clustervg #重新创建逻辑卷

lvs  一样看server2是否同步

mkfs.gfs2   -p  lock_dlm  -t   hua_ha:mygfs2  -j  3  /dev/cluster/demo   注:3   为节点加1

gfs2_tool  sb   /dev/cluster/demo  all

wKioL1dhgt3TStW5AACc9Pc-6eM657.png

测试:

server1和server2上的/dev/clustervg/demo都挂载在/mnt/下   然后在server1上  cd  /mnt/   建立一个文件或者文集夹  

在server2上执行  gfs2_tool journals  /dev/clustervg/demo  进去/mnt/目录可以看见server1创建的东西

永久挂载:

blkid  #可以查看设备的uuid

wKiom1dhgrnDl-yyAAD5x8Z7IE4698.png

umount /mnt/

在server1和server2上都挂载在/var/www/html下

vim /etc/fstab

UUID="d287c031-bb4a-013a-3d29-ddd651a4b168"     /var/www/html   gfs2    _netdev 0 0

df  #查看挂载信息

wKiom1dhguPBNKnlAADhSr-FTco615.png在网页上:增加资源-GFS2,在Service groups添加GFS2和Script 

wKioL1dhhCzhCtvpAADGqAs462I904.pngwKiom1dhgxjwHYMxAABWwWUzpYs732.pngwKioL1dhhC2AMa9QAAB30hq0nOY999.png

wKioL1dhhC3y6CxwAACIgPb9xQU416.pngclusvcadm -e apache

测试页:echo  www.westos.com  /var/www/html/index.htl 

浏览器访问    网页显示 www.westos.com   断网模拟和内核崩溃测试的原理上面类似  就不再一一测试了

增加日志:

jfs2_jadd  -j 2 /dev/clustervg/demo

wKiom1dhg3LAfAtjAAD2mqrlIbs021.png

lvextend  -L +511M  /dev/clustervg/demo

gfs2_grow /dev/clustervg/demo

wKioL1dhhKTQZDqxAACO4Csj5oE664.pngwKiom1dhg8bQfXSqAAAy36VR6Lo755.png

wKioL1dhhNuiW8ALAABt5bs3Z2A159.png

wKiom1dhg8ijPz7CAABRi9FdqYI148.png总结实验过程真的一步步联系都非常的紧密,一个环节出错后面的实验都搞不了,首先我们在实验之前就要把实验的环境搞好。尤其要注意防火墙,一定要关闭,否则集群创建不了,要注意三台虚拟机时间一定要同步,否则会导致信息的不同步,在实验中出错过几次,集群老师创建不了,仔细检查后是在真机中没有设置解析,网路不互通,连集群创建的网页都打不开,还有就是创建了集群后,添加服务组时,apache服务组时disabled,添加的两个资源都没生效,很是纳闷,最好发现一台ricci主机没有设置子网掩码。发现后问题成功的解决了,有的实验真的不是一次就能成功的,出现各种错都要花时间去排错。总之实验不容易,实验过程中要细心,一步错步步错,但也不要怕出错,觉得出现错误,排错更能让你的水平提升一个层次。