Loading... <p><span style="font-size: 14px"> 随着互联网技术的不断发展,Web应用也越来越普遍,Web服务器的无故障工作时间就显得尤重要,但由于各种各样的原因,一台服务器并不能保证永远不出问题的运行,此时就需要一种机制来实现多台服务器共同为相同的来务功能提供服务,以确保任意一台服务器宕机后,不会影响其所承载的业务的访问。 </span></p> <p><span style="font-size: 14px"> 下面演示使用HA工具heartbeatV1来实现Web应用的高可用性。</span></p> <p><span style="font-size: 14px"> 注:由于条件所限,只能以一台NFS服务器做为后端的存储设备,其实这本身就一个单点故障风险点,在生产环境中应该有更加完善的存储解决方案。</span></p> <h3><span style="font-size: 14px"> <span style="font-size: 16px">一、拓扑图</span></span></h3> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161244-33.png" title="1435133445425755.png" alt="blob.png" /></p> <h3><span style="font-size: 14px"> <span style="font-size: 16px"> 二、环境准备</span></span></h3> <p><span style="font-size: 14px"> 1、设置/etc/hosts</span></p> <p><span style="font-size: 14px"> 为保证能够正常的解决到各节点的主机名,需要设置/etc/hosts文件,当然也可以设置DNS。</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161244-85.png" title="1435135503552190.png" alt="1.png" /><span style="font-size: 14px"> 另外两台节点也做同样的设置。</span></p> <p><span style="font-size: 14px"> 2、设置节点间的相互信任,即ssh密钥</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-73.png" title="1435135848101479.png" alt="2.png" /></p> <p><span style="font-size: 14px"> 将密钥复制到另外两个节点:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-39.png" title="1435135873917276.png" alt="3.png" /></p> <p><span style="font-size: 14px"> 在另外node2和node3上做同样操作。</span></p> <p><span style="font-size: 14px"> 3、同步各节点的时间</span></p> <p><span style="font-size: 14px"> 4、下载heartbeat程序包 </span></p> <p><span style="font-size: 14px"> 可以到下面的地址进行下载:</span><span style="font-size: 14px">http://down.51cto.com/data/1872114</span> </p> <h3><span style="font-size: 14px"> <span style="font-size: 16px">三、安装heartbeat程序</span></span></h3> <p><span style="font-size: 14px"> 安装heartbeat程序前需要先安装一些依赖的软件,请先自行配置好epel源及base yum源。</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-59.png" title="1435137807127487.png" alt="4.png" /></p> <p><span style="font-size: 14px"> hearbeat程序需要安装如下图所示的三个RPM包即可。</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-8.png" title="1435137432103937.png" alt="5.png" /></p> <p><span style="font-size: 14px"> 在另外两个节点上做同样的操作。</span></p> <h3><span style="font-size: 14px"> <span style="font-size: 16px">四、配置heartbeat</span></span></h3> <p><span style="font-size: 14px"> 将配置文件的模块复制到/etc/ha.d目录中。</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-62.png" title="1435138102516093.png" alt="5.png" /></p> <p><span style="font-size: 14px"> 1、配置ha.cf文件</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-96.png" title="1435138575139031.png" alt="6.png" /></p> <p><span style="font-size: 14px"> ha.cf配置文件部分参数说明:</span></p> <p><span style="font-size: 14px"> autojoin none:集群中的节点不会自动加入;</span></p> <p><span style="font-size: 14px"> logfile /var/log/ha-log:heartbeat的日志存放位置;</span></p> <p><span style="font-size: 14px"> keepalive 2:指定心跳使用间隔时间为2秒(即每两秒钟发送一次广播);</span></p> <p><span style="font-size: 14px"> deadtime 30:指定备用节点在30秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源;</span></p> <p><span style="font-size: 14px"> warntime 10:指定心跳延迟的时间为十秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务;</span></p> <p><span style="font-size: 14px"> initdead 120:在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍;</span></p> <p><span style="font-size: 14px"> udpport 694:设置广播通信使用的端口,694为默认使用的端口号。</span></p> <p><span style="font-size: 14px"> baud 19200:设置串行通信的波特率 </span></p> <p><span style="font-size: 14px"> bcast eth0:Linux 指明心跳使用以太网广播方式,并且是在eth0接口上进行广播;</span></p> <p><span style="font-size: 14px"> mcast eth0 225.0.0.1 694 1 0:采用网卡eth0的Udp多播来组织心跳,一般在备用节点不止一台时使用; ucast eth0 192.168.1.2:采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址; </span></p> <p><span style="font-size: 14px"> bcast、ucast和mcast分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。</span></p> <p><span style="font-size: 14px"> auto_failback on:用来定义当主节点恢复后,是否将服务自动切回;</span></p> <p><span style="font-size: 14px"> stonith baytech /etc/ha.d/conf/stonith.baytech:stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性;</span></p> <p><span style="font-size: 14px"> watchdog /dev/watchdog:该选项是可选配置,是通过Heartbeat来监控系统的运行状态;</span></p> <p><span style="font-size: 14px"> ping 192.168.2.1:选择ping的节点,ping 节点选择的越好,HA集群就越强壮,可以选择固定的路由器作为ping节点,但是最好不要选择集群中的成员作为ping节点,ping节点仅仅用来测试网络连接;</span></p> <p><span style="font-size: 14px"> ping_group group1 192.168.12.120 192.168.12.237:类似于ping,ping一组ip地址。</span></p> <p><span style="font-size: 14px"> 2、配置authkeys文件</span></p> <p><span style="font-size: 14px"> 此文件用于配置认证相关的信息,文件权限必须为600。</span></p> <p><span style="font-size: 14px"> 先生成一个随机码:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-17.png" title="1435199336683495.png" alt="1.png" /></p> <p><span style="font-size: 14px"> 在/etc/ha.d/authkeys文件中添加如下内容:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-87.png" title="1435199402744242.png" alt="2.png" /></p> <p><span style="font-size: 14px"> 注意两行中的数字1是相对应的,如果修改为其它数字,两行要同时修改。</span></p> <p><span style="font-size: 14px"> 修改文件的权限:</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-17-1.png" title="1435199499819875.png" alt="3.png" /></p> <p><span style="font-size: 14px"> 3、在haresources文件中添加资源</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-24.png" title="1435216009115060.png" alt="1.png" /></p> <p><span style="font-size: 14px"> 注意:node1.test.com必须与uname -n所显示内容相同,192.168.2.100为VIP,即客户端访问的IP地址,httpd即指明高可用所针对的服务。</span></p> <p><span style="font-size: 14px"> 4、将上面配置的三个文件复制到node2和node3上的相同目录中</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-31.png" title="1435216269893301.png" alt="2.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-31-1.png" title="1435216275914829.png" alt="3.png" /></p> <p><span style="font-size: 14px"> 5、在三个节点分别安装httpd服务,并且在分别建立三个主页,主页内容分别为三个节点的主机名,并且启动httpd服务,测试是否可以访问页面的内容;主要是为了用于测试故障转移的效果,此操作就不做演示了。</span></p> <p><span style="font-size: 14px"> 6、停止httpd服务,启动heartbeat服务</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161245-57.png" title="1435218987491026.png" alt="4.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161246-75.png" title="1435218992571831.png" alt="6.png" /></p> <p><span style="font-size: 14px"> 7、验证</span></p> <p><span style="font-size: 14px"> 查看VIP是否启动</span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161246-11.png" title="1435219207937017.png" alt="7.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161246-90.png" title="1435219217997153.png" alt="8.png" /></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161246-63.png" title="1435219222342868.png" alt="9.png" /></p> <p><span style="font-size: 14px"> 测试Web应用 </span></p> <p><img src="//cto.wang/usr/uploads/2016/07/20160703161246-27.png" title="1435219637120119.png" alt="10.png" /></p> <p><span style="font-size: 14px"> 将node1下线后,自动切换到node2节点上</span></p> <p><img src="/upload/rnxrkg1f2hg.png" title="1435219754934549.png" alt="11.png" /></p> <p><span style="font-size: 14px"> 将node1与node2同时下线,node3就顶替了下来;</span></p> <p><img src="/upload/jo5ma2hgyjy.png" title="1435219925986548.png" alt="12.png" /></p> <p><span style="font-size: 14px"> ha.cf中的默认设置在node1上线后会自动恢复主节点的身份,请自行验证。</span></p> <p><span style="font-size: 14px"> 五、设置NFS共享目录</span></p> <p><span style="font-size: 14px"> 经过上面的设置,heartbeat已经可以正常工作了,下面我们来使用NFS共享来为httpd服务提供主页面。</span></p> <p><span style="font-size: 14px"> 1、配置NFS服务器</span></p> <p><span style="font-size: 14px"> 如果服务器上没有nfs软件请先安装nfs-utils软件。</span></p> <p><span style="font-size: 14px"> 修改配置文件:</span></p> <p><img src="/upload/v4l5naeh3qp.png" title="1435226172129198.png" alt="1.png" /></p> <p><span style="font-size: 14px"> 启动nfs服务:</span></p> <p><img src="/upload/ey3o4ywmxkl.png" title="1435226188974273.png" alt="2.png" /></p> <p><span style="font-size: 14px"> 本地验证:</span></p> <p><img src="/upload/ljkpxsgwri1.png" title="1435226250120892.png" alt="3.png" /></p> <p><span style="font-size: 14px"> 2、在共享目录中提供主页</span></p> <p><img src="/upload/w1de121a3mu.png" title="1435226396910214.png" alt="4.png" /><span style="font-size: 14px"> 3、在节点服务器上停止heartbeat服务,并启动httpd服务</span></p> <p><img src="/upload/bdvvokijmj4.png" title="1435226729413191.png" alt="5.png" /></p> <p><span style="font-size: 14px"> 4、挂载NFS共享目录,并访问测试</span></p> <p><img src="/upload/iswvxk03w31.png" title="1435226853407245.png" alt="6.png" /></p> <p><span style="font-size: 14px"> 由于是最小化安装,在挂载nfs时会报上面的错误,安装showmount命令后即可解决。</span></p> <p><img src="/upload/hguavpjrv3l.png" title="1435226928458178.png" alt="7.png" /></p> <p><span style="font-size: 14px"> 使用curl命令来测试,可以访问,如下图所示:</span></p> <p><img src="/upload/3f323z3ahps.png" title="1435226975576731.png" alt="8.png" /></p> <p><span style="font-size: 14px"> 在其它节点上也可以按照上面的操作进行测试,确保nfs共享目录可以被挂载。</span></p> <p><span style="font-size: 14px"> 六、修改haresources配置文件</span></p> <p><span style="font-size: 14px"> 修改haresources配置文件,使heartbeat能够自动挂载nfs共享目录。</span></p> <p><img src="/upload/n33ollsik12.png" title="1435227701978348.png" alt="7.png" /></p> <p><span style="font-size: 14px"> 七、停止httpd服务、卸载nfs共享目录并且启动heartbeat服务</span></p> <p><span style="font-size: 14px"> service httpd stop </span></p> <p><span style="font-size: 14px"> umount /var/www/html</span></p> <p><span style="font-size: 14px"> service heartbeat start</span></p> <p><span style="font-size: 14px"> 下面是heartbeat启动后的结果,可以看到nfs目录已经被自动挂载了。</span></p> <p><img src="/upload/42dn3ycguhi.png" title="1435227929652716.png" alt="8.png" /><img src="/upload/xqwspe4fghj.png" title="1435227936775785.png" alt="1.png" /></p> <p><span style="font-size: 14px"> 八、将haresources文件复制到其它节点服务器上</span></p> <p><img src="/upload/05s2gerocf2.png" title="1435228074258335.png" alt="2.png" /></p> <p><span style="font-size: 14px"> 九、验证</span></p> <p><span style="font-size: 14px"> 访问192.168.2.100可以访问到共享目录中创建的页面,并且即使有节点服务器宕机了,也不会影响页面的访问,请自行验证。</span></p> <p><img src="/upload/5qfdzc33p55.png" title="1435228724119307.png" alt="4.png" /></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信