前言:
上文介绍了高可用集群的基本概念,下面让我们来试试用两台提供web服务的虚拟机来实现一个小小的高可用集群吧~
首先,配置一个高可用集群的前提有:
1.至少两个节点;
2.共享存储(为了提供的页面一致,需要在后端用某些机制来实现。这里我们就做个简单的实验,后端存储先不考虑。先让这两个节点各自提供一个不同的页面,方便我们知道哪台在提供服务);
3.STONIN(共享存储时为了避免争用资源,指挥特定的设备,如电源交换机等避免共享存储的崩溃,所以一般的集群都得需要这个否则它会不工作的哦~~这里我们依旧不用管它)
4.时间需要同步,这里我们在虚拟机中做的实验,可以安装VM工具来实现其与宿主机的时间同步,并改一个虚拟机文件的参数即可,这里不再赘述
5.主机名称解析。(/etc/hosts)
6.至少先配置好一个节点(首个节点):提供基本集权配置和配置文件,可以没有资源;
7.ssh互信。
这里先做个小小的规划:
node1.zc.com 192.168.1.7
node2.zc.com 192.168.1.8
验证是否能互相ping通:
#ping node1.zc.com
#ping node2.zc.com
建立ssh互信:(两个节点都需要做,这里只是显示了node2的)
下面安装:heartbeat;heartbeat-stonith;heartbeat-gui;
# yum install libnet.so.1 libnetsnmp.so.20 net-snmp-libs pygtk2-libglade(解决包依赖关系,先按照提示安装这几个包)
# rpm -ivh heartbeat-2.1.4-12.el6.i686.rpm heartbeat-pils-2.1.4-12.el6.i686.rpm heartbeat-stonith-2.1.4-12.el6.i686.rpm heartbeat-gui-2.1.4-12.el6.i686.rpm
总是报这个错误:libnet.so.1 is needed by heartbeat-2.1.4-12.el6.i686
我就试试安装了这个包:# yum install libnetfilter_conntrack-0.0.100-2.el6.i686.rpm
可是还是不行......
解决办法(使用epel源yum安装这个依赖包,epel的源比较全~):
在这个网址下载epel包:http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
#rpm -ivh epel-release-6-8.noarch.rpm
以上都在node1和node2安装好后,就可以不用管node2了,只在node1上配置:
先确保两台httpd服务没问题,并且提供不同的页面,然后在将其关闭,并且一定要保证开机不会启动:(#service httpd stop;#ckconfig httpd off)
#cd /usr/share/doc/heartbeat-2.1.4/
#cp authkeys ha.cf haresources /etc/ha.d/
#cd /etc/ha.d/
#openssl rand -hex 8 >> authkeys (生成个随机数给这个文件。)
#vim authkeys
#chmod 600 authkeys
#vim ha.cf (配置文件)改如下写参数:
logfile /var/log/ha-log (日志位置,方便查看错误)
mcast eth0 225.0.0.1 694 1 0
#node kathy 下面加
node node1.zc.com
node node2.zc.com
#ping 10.10.10.254 (下面加,这是一个ping node)
ping 192.168.1.1
#vim haresources (这是资源管理器,在最下面加上我们的资源)
node1.zc.com 192.168.1.10/24/eth0 httpd
#scp -p authkeys ha.cf haresources node2:/etc/ha.d/ (把我们配置好的这3个文件传给node2)
好啦!可以启动服务啦!注意:记得先把SElinux先关掉,否则会出问题的哦~
#service heartbeat start (可以查看下694端口启动否)
#ssh node2 'service heartbeat start' (在当前启动的节点去启动另一个节点)
这时你可以用ifconfig和ss -tanl来查看下node1的web服务是否启动起来了
访问到node1了,再让node1挂掉,#service heartbeat stop(或者设条iptables规则),再试试刷新页面:
ok啦!!!高可用性还是很明显的!可以再试的将node1启动:#service heartbeat start ,刷新页面,node1的界面就又回来了!O(∩_∩)O~