Heartbeat实现web服务高可用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Heartbeat实现web服务高可用相关的知识,希望对你有一定的参考价值。

六: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

再访问http://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

以上是关于Heartbeat实现web服务高可用的主要内容,如果未能解决你的问题,请参考以下文章

Heartbeat实现web服务高可用

学习heartbeat-05 实现web服务高可用

heartbeat双机热备实现Web服务的高可用

Mysql DBA 高级运维学习笔记-Heartbeat实现web服务的高可用案例及维护要点

使用HeartBeat实现高可用HA的配置过程详解

使用HeartBeat实现高可用HA的配置过程详解