haproxy是一个很常用的反向代理和负载均衡软件,可以把后端的节点分成普通节点和backup节点,支持后端健康检测和自动切换,效果类似与nginx但是我觉得比nginx更加实用一些。有了haproxy,后端的应用可以不以root启用在80端口,可以选择普通用户在随意一个端口启动,然后用haproxy监听在80端口即可。haproxy还可以作为HTTPS前置,只需在haproxy上配置SSL证书,后端的web节点无需再配置https了。另外haproxy还可以根据url进行路由,将静态资源和动态页面分离开,实现更高层次的负载均衡。

但是如果把路由分发和负载均衡的工作都交给haproxy,那么就会形成一个单点故障点,如果haproxy的主机死机,掉电,宕机,网卡接触不良就会导致整个网络全部无法访问的问题,而keepalived就是专门来处理这个问题的。

我是不推荐让keepalived来接管数据库和大型中间件的,反而用keepalived来接管haproxy和nginx这种轻量级的程序是很合适的。而数据库和web服务可以做成集群的模式来实现热备。以数据库为例,如果主库发生宕机,那么切换到备机的时候往往会碰到很多的事务问题和存储问题,数据库起停本身就会消耗很多时间,如果只是由于网络不稳定造成的keepalived切换,那么主备很有可能彻底乱套,产生互相争夺master的情况,然后可能数据会错乱数据库也无法启动。对于WebSphere和weblogic这种中间件,他们的起停也会消耗很多时间,使用keepalived进行自动启动很可能会碰到挂载磁盘失败导致的问题。所以keepalived接管haproxy这种轻量级的前置应用比较合适。

首先我们找出两台机器,分别安装haproxy,配置文件相同,IP地址不同,然后通过编译的方法安装keepalived,安装方法在Keepalived实现NAT+LVS+后端健康检测已经有说明

服务器 真实地址 虚拟地址 网关地址
Keepalived主服务器 10.100.100.89 10.100.100.200 10.100.100.1
Keepalived备服务器 10.100.100.88 10.100.100.200 10.100.100.1
真实HTTP服务1 10.100.100.101   10.100.100.1
真实HTTP服务2 10.100.100.102   10.100.100.1

haproxy配置文件/etc/haproxy/haproxy.cfg内容如下

globallog         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxydaemon# turn on stats unix socketstats socket /var/lib/haproxy/stats#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaultsmode                    httplog                     globaloption                  httplogoption                  dontlognulloption http-server-closeoption forwardfor       except 127.0.0.0/8option                  redispatchretries                 3timeout http-request    10stimeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1mtimeout http-keep-alive 10stimeout check           10smaxconn                 3000#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80default_backend             app#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend appbalance     roundrobinserver  web1 10.100.100.101:8080 checkserver  web2 10.100.100.102:8080 check

安装好keepalived后,我们在/etc/keepalived目录下建立这样几个文件

haproxy_check.sh  定时检查haproxy进程的脚本

to_backup.sh          keepalived切换为backup状态时执行的命令,可做报警使用

to_fault.sh               keepalived进入fault状态时执行的命令,可做报警使用

to_master.sh           keepalived进入master状态时执行的命令,可做报警使用

下面记录一下这几个脚本的内容

haproxy_check.sh:下面使用ps命令来查看进程,如果发现haproxy挂掉就重启,你也可以使用curl直接获取web内容进行更精确的检测

#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];thenecho "`date` haproxy is dead" >> /tmp/lvs.logservice haproxy start
sleep 2
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];thenecho "`date` haproxy cannot start,stop keepalived" >> /tmp/lvs.logservice keepalived stop
fi

to_backup.sh :如果主节点主动切换为备用节点(在启动的时候会执行一次),那么就输出一条日志,注意,我的网卡名称是ens192

#!/bin/bash
Date=$(date +%F" "%T)
IP=$(ifconfig ens192 |grep -w "inet" |awk '{print $2}')
echo "$Date $IP change to backup." >> /tmp/lvs.log

to_fault.sh :

#!/bin/bash
Date=$(date +%F" "%T)
IP=$(ifconfig ens192 |grep -w "inet" |awk '{print $2}')
echo "$Date $IP change to fault." >> /tmp/lvs.log

to_master.sh:如果备用节点升级成主节点,可以用这个脚本进行报警,及时修补主节点的故障

#!/bin/bash
Date=$(date +%F" "%T)
IP=$(ifconfig ens192 |grep -w "inet" |awk '{print $2}')
echo "$Date $IP change to master." >> /tmp/lvs.log

下面就是keepalived.conf的内容

! Configuration File for keepalivedglobal_defs {router_id LVS_MASTERvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script chk_haproxy {script "/etc/keepalived/haproxy_check.sh" ## 检测 haproxy 状态的脚本路径interval 5 ## 检测时间间隔weight -20 ## 如果条件成立,权重-20
}vrrp_instance VI_1 {state MASTERinterface ens192virtual_router_id 91priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.100.100.200}track_script {chk_haproxy}notify_master /etc/keepalived/to_master.shnotify_backup /etc/keepalived/to_backup.shnotify_fault /etc/keepalived/to_fault.sh
}

在上面这个文件里,已经把各个脚本都配置进去了,如果haproxy进程消失且重启失败,或者说该服务器断电宕机,那么备用机会自动接收到虚拟IP并通过脚本报警,下面是备用节点的keepalived.conf

! Configuration File for keepalivedglobal_defs {router_id LVS_BACKUP            #BACKUP上修改为LVS_BACKUP
}vrrp_script chk_haproxy {script "/etc/keepalived/haproxy_check.sh" ## 检测 haproxy 状态的脚本路径interval 5 ## 检测时间间隔#weight -20 ## 如果条件成立,权重-20
}vrrp_instance VI_1 {state BACKUP                   #BACKUP上修改为BACKUPinterface ens192               #此处是要绑定虚拟IP的网卡名称virtual_router_id 91           #此处要与master一致priority 80                    #BACKUP上修改为80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.100.100.200             #此处要与master一致}track_script {chk_haproxy}notify_master /etc/keepalived/to_master.shnotify_backup /etc/keepalived/to_backup.shnotify_fault /etc/keepalived/to_fault.sh
}

Haproxy加持KeepAlived+进程自动检测相关推荐

  1. haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群

    1.什么是Haproxy HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的we ...

  2. haproxy和keepalived的理解(转载)

    关于此两者,随便google一下都会有大量的文章,因此这里也不用介绍如何来进行安装和配置了.主要从一个整体方案的角度来描述什么要这样做,以及这样做所解决的问题. 所有的系统,都是先经历一个单台机器搞所 ...

  3. HAProxy基于KeepAlived实现Web高可用及动静分离

    前言 软件负载均衡一般通过两种方式来实现: 基于操作系统的软负载实现 基于第三方应用的软负载实现 LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载. HA ...

  4. 用haproxy结合keepalived实现基于LNMP的负载均衡和高可用

    今天我们讲haproxy结合keepalived实现LNMP的负载均衡和高可用,现在的公司大部分都基于haproxy实现负载均衡.下面以一个事例去给大家详细讲解如何去实现: 一.用haproxy结合k ...

  5. android进程自动启动时间,如何统计Android App启动时间

    随着App的逻辑不断庞大,一不注意就会将耗时的操作放置在应用启动过程之中,导致应用启动速度越来越慢,用户体验也越来越差.优化启动速度是几乎所有大型App应用开发者需要考虑的问题.优化启动速度之前首先需 ...

  6. 自动检测更新域名绑定技术

    一.背景介绍 当前网络处于校内网环境,登录外网需要学生账号,中间有小米路由.不同时间登录可能会出现ip地址更换.(当前路由下有两台电脑和一台nano) 要实现的目标:将个人路由下的设备用二级域名绑定, ...

  7. Expect的安装与应用,及实现自动检测另外一台服务器运行状态并重启,和使用expect脚本远程批量管理服务器与日志分析

    学习Expect Expect是什么? Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预.  Expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为 ...

  8. (原创)JAVA注解应用——实现属性的自动检测

    一.什么是注解 Annotation(注解)是JDK5.0及以后版本引入的新特性.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以'@注解名'在代码中存在的,根据注解参数的个数 ...

  9. AOI光学自动检测技术 | 基本原理与设备构成

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 一,引言: AOI(automatically optical i ...

最新文章

  1. 32位centos下安装jdk1.7报Permission denied处理方式
  2. 一起学DHCP系列(五)指派、获取
  3. 基于docker搭建svn-server
  4. 傅立叶变换物理意义解析进阶
  5. 栈的链式存储结构(C语言实现)
  6. 微信用户全局唯一标识_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法...
  7. Lynn/ Online digital filters for biological signals: some fast designs for a small computer
  8. 长文!机器学习笔试精选 100 题【附详细解析】
  9. sRGB标准与伽马校正 理解
  10. Javaweb项目各个模块的用途
  11. 根据前序序列和中序序列重建二叉树
  12. 《深入理解计算机系统》——低谷中的重新振作
  13. CnnDroid 优化加速原理
  14. java compiler类_利用 JavaCompiler 编译 Java 类文件
  15. QT Quick项目简介
  16. 汇编语言-实现一个简单的主引导记录(MBR)引导用户程序
  17. LigerUI —— 表格树的使用
  18. 析砂性土层php泥浆护壁,浅析泥浆护壁灌注桩化学泥浆
  19. [64]python爬虫利器四之PhantomJS的用法
  20. 泛函分析 第一章 度量空间

热门文章

  1. VBA-不打开工作簿提取数据
  2. 中鸣循迹机器人_中鸣机器人RIC创新任务挑战赛.DOC
  3. 开源软件鸿蒙闪退,鸿蒙开源是怎样一情况
  4. java的超市管理系统实践报告,基于JAVA的超市管理系统的设计与实现-开题报告
  5. 三国志战略版:Daniel_S7赤壁前瞻4_地图深度解析
  6. 简单实现Java定时器
  7. 在国内使用Google Voice通话及短信功能
  8. 网络营销---五大优势成就就业
  9. java基础学习笔记(面向对象编程)
  10. 机械工业ERP系统“数字排产”