高可用念集群的概: 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务。高可用集群是用于单个节点发生故障时,能够自动将资源、服务进行切换,这样可以保证服务一直在线。在这个过程中,对于客户端来说是透明的。
实验环境:需要三台纯净的虚拟机 iptables关闭 selinux为disabled
server1:172.25.45.1 #ricci节点主机
server2:172.25.45.2 #ricci节点主机
server3:172.25.45.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源
三台虚拟机和物理机都要有解析 如下一个范列其他主机一样配置
实验过程:
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服务
在浏览器访问 https://server3.example.com:8084
注:使用server3的root用户登录
创建集群:
集群的名字随便填写 但字符数不要超过15个 超过了就会创建不成功
显示该页面 说明集群创建成功
用cluster命令查看ricci节点主机上的集群状态
重复创建集群会报错 如果想重新创建 需要 rm -rf /etc/cluster/cluster.conf 然后重启服务 再创建 在网页上所做的动作都会写入该文件 /etc/cluster/cluster.conf
fence设备文件的生成
在物理机上:
yum search fence
然后 yum install fence-virt fence-virtd fence-virtd-libvirt fence-virtd-multicas -y
执行命令 fence_virtd -c
f
mkdir /etc/cluster -p(有该目录就不需要创建了)
cd /etc/cluster/
dd if=/dev/urandom of=/etc/cluster/fence_xvm/key
scp /etc/cluster/fence_xvm/key [email protected]:/etc/cluster/
scp /etc/cluster/fence_xvm/key [email protected]:/etc/cluster/
systemctl restart fence_virtd
在网页中添加fence设备
在两个节点中分别执行以下步骤
添加错误域
添加集群资源
注:此ip是一个浮动虚拟的ip 用于外界的访问
添加服务组
在服务组在添加前面添加的两个资源
可见集群已经自动开启了httpd服务
测试:
在server1上:fence_nde derver1.example.com server1会断电重新启动 说明fence配置成功
在server1上:cluster查看集群的状态
可见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
在server1上:ip addr show
可以看到浮动的ip
在server1上:clusvcadm -r apache -m server2.example.cm #把httpd服务转移到另一节点上
断网模拟
在server1上:ifconfig eth0 down server1挂掉 此时服务会跳转到server2 浮动ip也会跳转到server2上 当server1重新启动后 服务又会重新跳转到server1上 因为server1是主节点 设置的优先级最高 又设置了服务回切
内核崩溃模拟
在server1上:echo c > /proc/sysrp-trigger
和以上类似
存储共享:
在server3上:先添加个虚拟硬盘
yum install scsi-* -y
vim /etc/tgt/targets.conf 添加以下内容:
tgt-admin -s #查看
/etc/init.d/tgtd start #启动服务
在server1上:yum install iscsi-* -y
iscsiadm -m discovery -t -st -p 172.25.45.3 #与server3上的设备关联
iscsiadm -m node -l #登录到设备
fdisk -l #查看可用的分区
建立逻辑卷 首先
fdick -cu /dev/sda #建立分区
在server2上:yum install iscsi-*
iscsiadm -m discovery -t -st -p 172.25.45.3
iscsiadm -m node -l
fdisk -l #查看可用的分区
从server1上同步过来
cat /proc/partitons #查看系统分区
在server1上: pvcreate /dev/sda1 #创建物理卷
pvs #查看物理卷信息
在server2上:pvs 查看物理卷是否同步过来server2上
vgcreate clustervg /dev/sda1
在server2:vgs 查看物理卷组是否同步过来server2上
lvcreate -L 2G -n lv1 clustervg
同样在server2上查看是否同步过来
mkfs.ext4 /dev/clustervg/lv1 #格式化
测试:挂载
server1和server2都挂载到/mnt/下,可以sever1在/mnt/下建立一个文件或者目录 server2不能看到 只有server2卸载后 再挂载上去 才能在/mnt/下看到建立的东西
存储和集群的联系:
在网页上 添加集群资源 选择添加文件系统
apache 关掉 删掉scripts,添加Filesystem和Script
先制作一个测试页 echo www.westos.com > /var/www/html/index.html
clusvcadm -e apache #在该主机上启动apache
访问 172.25.19.100 效果如下
内核崩溃模拟 在server1上:echo c > /proc/sysrq-trigger
server1挂掉 服务的文件系统自动挂载跳转到另一节点server2上
还可以断网模拟 停止服务在测试 效果都和 以上差不多 不管那个节点的主机挂了 都不影响服务和磁盘的自动挂载 保证了服务的高可用性
gfs2文件系统的存储共享:
在网页上:Service Groups中 删掉Filesystem和Scrip 集群资源中 删掉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
测试:
server1和server2上的/dev/clustervg/demo都挂载在/mnt/下 然后在server1上 cd /mnt/ 建立一个文件或者文集夹
在server2上执行 gfs2_tool journals /dev/clustervg/demo 进去/mnt/目录可以看见server1创建的东西
永久挂载:
blkid #可以查看设备的uuid
umount /mnt/
在server1和server2上都挂载在/var/www/html下
vim /etc/fstab
UUID="d287c031-bb4a-013a-3d29-ddd651a4b168" /var/www/html gfs2 _netdev 0 0
df #查看挂载信息
在网页上:增加资源-GFS2,在Service groups添加GFS2和Script
clusvcadm -e apache
测试页:echo www.westos.com /var/www/html/index.htl
浏览器访问 网页显示 www.westos.com 断网模拟和内核崩溃测试的原理上面类似 就不再一一测试了
增加日志:
jfs2_jadd -j 2 /dev/clustervg/demo
lvextend -L +511M /dev/clustervg/demo
gfs2_grow
/dev/clustervg/demo
总结:实验过程真的一步步联系都非常的紧密,一个环节出错后面的实验都搞不了,首先我们在实验之前就要把实验的环境搞好。尤其要注意防火墙,一定要关闭,否则集群创建不了,要注意三台虚拟机时间一定要同步,否则会导致信息的不同步,在实验中出错过几次,集群老师创建不了,仔细检查后是在真机中没有设置解析,网路不互通,连集群创建的网页都打不开,还有就是创建了集群后,添加服务组时,apache服务组时disabled,添加的两个资源都没生效,很是纳闷,最好发现一台ricci主机没有设置子网掩码。发现后问题成功的解决了,有的实验真的不是一次就能成功的,出现各种错都要花时间去排错。总之实验不容易,实验过程中要细心,一步错步步错,但也不要怕出错,觉得出现错误,排错更能让你的水平提升一个层次。