六:Heartbeat实现WEB服务高可用案例
6.1 部署准备
资源环境:继续使用我们之前已经部署好Heartbeat的两台服务器node01.cn和node02.cn,两台机器heartbeat是双主模式
我们再捋一捋
node01.cn eth0 172.10.25.26 外网管理IP
eth1 10.25.25.16 心跳直连
VIP 172.10.25.18
node02.cn eth0 172.10.25.27 外网管理IP
eth1 10.25.25.16 心跳直连
VIP 172.10.25.10
6.2 安装配置http服务
我们使用Heartbeat来实现HTTP服务的高可用性,所以直接简单的使用yum安装http,关于Apache、Nginx、Tomcat的详细安装方法参见本博客其他文章
Bash
[[email protected] ~]# yum install httpd -y
[[email protected] ~]# yum install httpd -y
如果开启服务了我们要把它停止,并取消开机启动,交给heartbeat来控制httpd服务的启动与关闭
Bash
[[email protected] ~]# /etc/init.d/httpd stop
[[email protected] ~]# /etc/init.d/httpd stop
[[email protected] ~]# chkconfig httpd off
[[email protected] ~]# chkconfig httpd off
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# echo 172.10.25.26 >index.html
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# echo 172.10.25.27 >index.html
6.3 配置httpd服务启动脚本
在两台机器上分别拷贝httpd启动脚本到/etc/ha.d/resource.d/下。确保具备可执行权限
Bash
[[email protected] ~]# cp /etc/init.d/httpd /etc/ha.d/resource.d/
[[email protected] ~]# cp /etc/init.d/httpd /etc/ha.d/resource.d/
不拷贝过去也是可以的,heartbeat会找到/etc/init.d/下的服务启动脚本
提示:/etc/ha.d/resource.d/为heartbeat的默认脚本目录
Heartbeat控制的脚本要求
1、脚本路径要放入/etc/init.d/或/etc/ha.d/resource.d/目录下
2、脚本执行,需要以/etc/init.d/httpd stop/start的方式
3、脚本具备可执行权限
4、脚本名字和配置中的名字一致,如/etc/init.d/httpd名字和IPaddr::172.10.25.18/24/eth0 httpd
6.4 修改haresource配置
node01.cn的配置
Bash
[[email protected] ~]# cd /etc/ha.d/
[[email protected] ha.d]# cp haresources haresources.bk
[[email protected] ha.d]# vim haresources
node01.cn IPaddr::172.10.25.18/24/eth0 httpd
node02.cn IPaddr::172.10.25.10/24/eth0 httpd
node02.cn的配置
Bash
[[email protected] ~]# cd /etc/ha.d/
[[email protected] ha.d]# cp haresources haresources.bk
[[email protected] ha.d]# vim haresources
node01.cn IPaddr::172.10.25.18/24/eth0 httpd
node02.cn IPaddr::172.10.25.10/24/eth0 httpd
6.5 重启heartbeat,测试实现web高可用
我们重启heartbeat,测试它控制httpd启动,并实现高可用
Bash
[[email protected] ~]# /etc/init.d/heartbeat stop
[[email protected] ~]# /etc/init.d/heartbeat start
[[email protected] ~]# /etc/init.d/heartbeat stop
[[email protected] ~]# /etc/init.d/heartbeat start
Bash
[[email protected] ~]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
clock-app 4049 root 22u IPv4 118999 0t0 TCP node01.cn:49022->a23-62-109-161.deploy.static.akamaitechnologies.com:http (CLOSE_WAIT)
httpd 15319 root 8u IPv6 121255 0t0 TCP *:http (LISTEN)
httpd 15321 apache 8u IPv6 121255 0t0 TCP *:http (LISTEN)
httpd 15322 apache 8u IPv6 121255 0t0 TCP *:http (LISTEN)
httpd 15323 apache 8u IPv6 121255 0t0 TCP *:http (LISTEN)
httpd 15324 apache 8u IPv6 121255 0t0 TCP *:http (LISTEN)
httpd 15325 apache 8u IPv6 121255 0t0 TCP *:http (LISTEN)
httpd 15326 apache 8u IPv6 121255 0t0 TCP *:http (LISTEN)
httpd 15327 apache 8u IPv6 121255 0t0 TCP *:http (LISTEN)
httpd 15328 apache 8u IPv6 121255 0t0 TCP *:http (LISTEN)
Bash
[[email protected] ~]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 15563 root 8u IPv6 122138 0t0 TCP *:http (LISTEN)
httpd 15565 apache 8u IPv6 122138 0t0 TCP *:http (LISTEN)
httpd 15566 apache 8u IPv6 122138 0t0 TCP *:http (LISTEN)
httpd 15567 apache 8u IPv6 122138 0t0 TCP *:http (LISTEN)
httpd 15568 apache 8u IPv6 122138 0t0 TCP *:http (LISTEN)
httpd 15569 apache 8u IPv6 122138 0t0 TCP *:http (LISTEN)
httpd 15570 apache 8u IPv6 122138 0t0 TCP *:http (LISTEN)
httpd 15571 apache 8u IPv6 122138 0t0 TCP *:http (LISTEN)
httpd 15572 apache 8u IPv6 122138 0t0 TCP *:http (LISTEN)
访问页面测试,也可以跟踪日志测试
Bash
INFO: Success
ResourceManager(default)[15051]: 2016/02/27_23:25:38 info: Running /etc/ha.d/resource.d/httpd start
Starting httpd: [ OK ]
ARPING 172.10.25.18 from 172.10.25.18 eth0
Sent 5 probes (5 broadcast(s))
Received 0 response(s)
在windows物理机上添加host解析
C:\Windows\System32\drivers\etc
172.10.25.18 pualinux.org
172.10.25.10 pualinux.org
如果当前主机出现故障,我们来看看切换访问的页面
Bash
[[email protected] ~]# /etc/init.d/heartbeat stop
这就简单实现web高可用
数据库做高可用要保持数据的一致性,要进行实时的同步,可以结合DRBD使用
其他的细节可以参考hearbeat的脚本及其注释
Bash
/etc/ha.d/rc.d/ip-request
/etc/ha.d/rc.d/ip-request-resp
/etc/init.d/heartbeat
/etc/ha.d/resource.d/IPaddr
/etc/ha.d/resource.d/drbd
/etc/ha.d/resource.d/drbddisk
/etc/ha.d/resource.d/Filesystem
/usr/share/heartbeat/hb_standb
/usr/share/heartbeat/hb_takeover
6.6 有关heartbeat调用资源的生产应用场景
在实际工作中有两种常见的方法实现高可用的方案:
1、heartbeat 可以控制VIP资源的漂移,不负责服务资源的启动与关闭(适合WEB服务)
2、heartbeat 即控制VIP资源的漂移,同时又控制服务的启动与关闭,我们上面的案例就是使用这种。要求IP和服务要切换都切换,弊端就是VIP正常,httpd服务宕掉了,这时不会做高可用切换,这样我们得写个简单的脚本定时或守护进程判断httpd服务是否正常,如果有问题,就停止heartbeat.使其业务转移到另外一台主机上(适合数据库、存储,只有一端写操作)
6.7 使用heartbeat实现httpd高可用小结
1、日志很重要,遇到问题要看日志去排错,不仅仅是heartbeat,其他服务也是
2、单个服务的高可用在生产中比较少,一般web服务方面负载均衡用的多,在负载均衡、主数据库、主存储上使用高可用较多
3、MySQL的高可用实现方式和httpd基本是一样的,只是httpd后端使用了共享存储,所以不需要做数据同步。而mysql后端没有用存储,所以在做高可用之前,要先做好主从,主主同步
6.8 企业生产heartbeat高可用切换说明
1、高可用的切换一般用于主故障备用自动切换接管,快速顶替故障机提供服务的
2、备接管后的善后工作等,最好是人工处理解决
3、不管准备多完善,监控多智能,一般都不会自动切回主库,而是人工控制,因为这个回切是可控的,有时间准备的,而主一挂,备马上自动切换顶替是不可控的
4、 重要的数据业务是不能来回自动切的,即auto_failback off 应该是off状态
5、要根据具体业务具体分析,最好不设置开机启动
6.9 heartbeat和keepalived的应用场景区别
1、对于一般的web、DB、负载均衡(nginx,haproxy)等,heartbeat和keepalived都可以实现
2、LVS负载均衡最好和keepalived结合使用,虽然heartbeat也可以调用带有ipvsadm命令的脚本来启动或停止LVS负载均衡,但heartbeat本身没有对下面节点RS的健康检查功能,不过也可以通过ldircetord插件来弥补。heartbeat+lvs+ldirectord
3、需要数据同步(配合drbd)的高可用业务最好用heartbeat.如mysql双主多从,nfs/mfs存储,他们的特点都是需要数据同步,这样的业务最好用heartbeat,因为heartbeat自带了drbd的脚本,可以利用强大的drbd同步软件配合实现同步。当然如果你数据同步不使用drbd,使用其他共享存储(inotify+rsync,sersync+rsync),也可以考虑使用keepalived
4、根据自身对哪个软件使用更熟悉决定
http://www.linux-ha.org/doc/users-guide/users-guide.html