HAProxy负载均衡代理
1. HAProxy概述
       HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持 10G 的并发。HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层处理。 HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的 web 服务器不被暴露到网络上。其支持从 4 层至 7 层的网络交换,即覆盖所有的 TCP 协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。
相同点:在功能上,proxy 通过反向代理方式实现 web 均衡负载,和 Nginx,ApacheProxy,lighttpd, Cheroke 等一样。
不同点:Haproxy 并不是 Http 服务器。以上提到所有带反向代理均衡负载的产品,都清一色是 WEB 服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而 Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供 http 服务。 但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy 会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
HAProxy 负载的几种方式:
1. 轮询                    roundrobin
2. 最少连接数          Leastconn
3. 根据源IP             source
4. 根据URI              uri
5. 根据URL里的参数   url_param(根据请求串中的数据hush后做lb,譬如需要一个userid永远在某台服务器上,该策略是静态的
2.HAProxy 官网地址
http://www.haproxy.org/
3.Haproxy 实验拓扑
HaProxy分发器:192.168.42.175
Web1 (nginx)server:192.168.42.176
Web2 (nginx)server:192.168.42.177

Haproxy服务端配置
[root@xuegod175 ~]# tar xvf haproxy-1.5.15.tar.gz -C /usr/local/src/
[root@xuegod175 ~]#cd /usr/local/src/haproxy-1.5.15/
[root@xuegod175 haproxy-1.5.15]# cat README | less //查看安装方式,比较特殊
[root@xuegod175 haproxy-1.5.15]# uname -a
Linux xuegod175.cn 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@xuegod175 haproxy-1.5.15]# make TARGET=linux26 PREFIX=/usr/local/haproxy
//指定操作系统内核类型和安装的路径。也可以直接修改 Makefile 配置文件中这两个变量的值。如下:
[root@xuegod175 haproxy-1.5.15]# vim Makefile
添加:TARGET = linux26
[root@xuegod175 haproxy-1.5.15]# make install PREFIX=/usr/local/haproxy
[root@xuegod175 haproxy-1.5.15]# cd /usr/local/haproxy/
[root@xuegod175 haproxy]# ls
doc sbin share #没有配置文件目录
[root@xuegod175 haproxy]# mkdir /usr/local/haproxy/etc ; cd
[root@xuegod175 ~]# cp /usr/local/src/haproxy-1.5.15/examples/haproxy.cfg /usr/local/haproxy/etc/

[root@xuegod175 ~]# vim /usr/local/haproxy/etc/haproxy.cfg
#global 全局,以全局定义为准
#defaults   默认,在全局的前提下,默认跟局部的配置,如果局部没说,那就按默认走,如果局部有定义那就按局部。
#frontend   前端,监听地址,监听端口,该如何处理。。。。。
#backend    后端服务器,定义那些真正处理业务的服务器Realserver.
#listen 将frontend和backend 合体的一种方案
global
log 127.0.0.1  local0
#log 127.0.0.1  local1 notice
#log loghost    local0 info
maxconn 4096
chroot /usr/local/haproxy
uid 99                          #所属运行的用户uid
gid 99                          #所属运行的用户组
daemon                          #以后台形式运行haproxy
nbproc 1                        #启动1个haproxy实例。# #工作进程数量(CPU数量) ,实际工作中,应该设置成和CPU核心数一样。 这样可以发挥出最大的性能。
pidfile /usr/local/haproxy/run/haproxy.pid  #将所有进程写入pid文件
#debug                          #调试错误时用
#quiet                          #安静
defaults
log    global
log    127.0.0.1      local3        #日志文件的输出定向。产生的日志级别为local3. 系统中local1-7,用户自己定义
mode    http                        #工作模式。所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
option  httplog                     #日志类别,记载http日志
option  httpclose                   #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
option  dontlognull                 #不记录空连接,产生的日志
option  forwardfor                  #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option  redispatch                  #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
retries 2                           #2次连接失败就认为服务器不可用,主要通过后面的check检查
maxconn 2000                        #最大连接数
balance roundrobin                  #负载均衡算法
stats  uri    /haproxy-stats        #haproxy 监控页面的访问地址 # 可通过 http://localhost:80/haproxy-stats 访问
timeout connect      5000ms                #连接超时时间。 单位:ms 毫秒,timeout client      50000ms               #客户端连接超时时间,
timeout server      50000ms               #服务器端连接超时时间,listen  localhost 0.0.0.0:80                  #运行的端口及主机名
mode    http
option  httpchk GET /index.html                 #健康检测。#注意实际工作中测试时,应该下载某一个页面来进行测试,因此这个页面应该是个小页面,而不要用首页面。这里是每隔一秒检查一次页面。
server  s1 192.168.42.176:80  weight 3 check      #后端的主机 IP &权衡
server  s2 192.168.42.177:80 weight 3 check       #后端的主机 IP &权衡

[root@xuegod175 ~]# id nobody //99 是 nobody 运行用户
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[root@xuegod175 ~]# mkdir -p /usr/local/haproxy/run
[root@xuegod175 ~]# chown nobody /usr/local/haproxy/ -R
[root@xuegod175 ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg //启动
[root@xuegod175 ~]# ps -aux | grep haproxy
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
nobody 3327 0.0 0.0 12200 960 ? Ss 13:37 0:00 /usr/local/haproxy/sbin/haproxy -f
/usr/local/haproxy/etc/haproxy.cfg
[root@xuegod175 ~]# netstat -antup | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3327/haproxy
比较特殊重启方法:
[root@xuegod175 ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg -st `cat /usr/local/haproxy/run/haproxy.pid`
//重启 -st 参数含义:-sf/-st [pid ( haproxy 当前进程程 ID) ] 完成/终止旧的 PID。 此参数必须是最后一个参数。
[root@xuegod175 etc]# killall haproxy //停止服务
制作 HAproxy 启动脚本
[root@xuegod175 ~]# cp /usr/local/src/haproxy-1.5.15/examples/haproxy.init /etc/init.d/haproxy //可以修改此文件
实现启动脚本,太多修改内容
直接使用下面的作为启动脚本
[root@xuegod175 ~]# vim /etc/init.d/haproxy

[root@xuegod175 haproxy-1.5.15]# cat /etc/init.d/haproxy #! /bin/shset -ePATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbinPROGDIR=/usr/local/haproxyPROGNAME=haproxyDAEMON=$PROGDIR/sbin/$PROGNAMECONFIG=$PROGDIR/etc/haproxy.cfgPIDFILE=$PROGDIR/$PROGNAME.pidDESC="HAProxy daemon"SCRIPTNAME=/etc/init.d/$PROGNAME# Gracefully exit if the package has been removed.test -x $DAEMON || exit 0start(){echo -n "Starting $DESC: $PROGNAME"$DAEMON -f $CONFIGecho "."}stop(){echo -n "Stopping $DESC: $PROGNAME"haproxy_pid=$(cat $PIDFILE)kill -15 $haproxy_pidecho "."}restart(){echo -n "Restarting $DESC: $PROGNAME"$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)echo "."}case "$1" instart)start;;stop)stop;;restart)restart;;*)echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2exit 1;;esacexit 0

#说明:脚本中 set -e 的作用
#你写的每个脚本都应该在文件开头加上 set -e,这句语句告诉 bash 如果任何语句的执行结果不是 true 则应该退出。这样的好处是防止错误像滚雪球般变大导致一个致命的错误,而这些错误本应该在之前就被处理掉。
[root@xuegod175 ~]# /etc/init.d/haproxy restart //可以实现启动

HA-Proxy 日志配置
配置日志收集
[root@xuegod175 ~]# vim /etc/rsyslog.conf //打开以以下两行的注释,不打开收不到日志。
$ModLoad imudp #取消注释
$UDPServerRun 514 #取消注释
local7.* /var/log/boot.log #下面添加两行
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
[root@xuegod175 ~]# /etc/init.d/rsyslog restart
Web服务端配置测试文件
注:这里的web服务器均使用了nginx,安装过程省略掉。
[root@xuegod176 ~]# cat /usr/local/nginx/html/index.html
192.168.42.176
[root@xuegod177 ~]# cat /usr/local/nginx/html/index.html
192.168.42.177
访问进行测试:
测试访问界面web1

测试访问界面 web2

3.测试访问HAProxy
通过访问HAProxy   实现了轮询访问web 服务器一、二的效果,说明HAProxy负载均衡已经搭建成功。

通过访问 http://192.168.42.175/haproxy-stats

停掉web2服务进行测试

转载于:https://blog.51cto.com/innocence/1922042

HAProxy负载均衡代理相关推荐

  1. Nginx/LVS/HAProxy 负载均衡软件的优缺点详解

    Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术,具体的应用需求还得具体分析. 如果是中小型的Web应用,比 ...

  2. haproxy负载均衡_做负载均衡Nginx、HAProxy和LVS总有一个适合你

    Nginx Nginx优点: 1.工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名.目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行. 2.Nginx对网 ...

  3. Nginx、LVS及HAProxy负载均衡软件的优缺点详解

    摘要:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术,具体的应用需求还得具体分析,本文总结了三者之间的优缺 ...

  4. RabbitMq+Haproxy负载均衡

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保 ...

  5. Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  6. HAproxy负载均衡动静分离实现及配置详解

     HAproxy负载均衡动静分离实现及配置详解 HAproxy的介绍 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAP ...

  7. (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解 (转载)

    一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术.具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了:如果机器不少,可以用D ...

  8. pcs+corosync+pacemaker+haproxy负载均衡环境部署

    pcs+corosync+pacemaker+haproxy负载均衡环境部署 一.实验环境: centos7.4 三台服务器做集群,两台服务器做后端web服务器 cos11:192.168.124.1 ...

  9. 运维面试精选:1、史上最详细的Nginx、LVS、HAProxy负载均衡精选面试题

    文章目录 1.nginx 如何做优化 2.nginx upsteam有哪几种轮训方式? 3.Nginx怎样对同一IP访问进行限流? 4.Nginx 如何获取客户端的真实IP? 5.Nginx 如何设置 ...

最新文章

  1. Android 常见错误
  2. Node18 即将支持 import HTTP资源!
  3. 花式模拟【栈结构】做“日志分析”(洛谷P1165题题解,Java语言描述)
  4. mysql主从同步搭建和故障排除
  5. 深入浅出MySQL crash safe
  6. 冲突符号_冲突营销关键词连载(二) 冲突
  7. WinAPI双人贪吃蛇
  8. spss——主成分分析详解
  9. python 金融风控模型_Python金融大数据风控建模实战 基于机器学习
  10. 使用pycharm出现黄色框的情况
  11. 【无标题】外汇符合挖坟啊喝咖啡卡机
  12. 卸载精灵(bue directx) r4.0 完美版 绿色
  13. 计算机图形学入门(十三)-光线追踪(基本原理)
  14. echarts实现左右滑动
  15. 怎么判断两个多项式互素_多项式互素性质的补充讨论
  16. Minecraft 1.12.2模组开发(十八) 自定义附魔
  17. 红旗linux考试,红旗Linux认证考试介绍
  18. 从ReentrantLock到AQS
  19. 【数据分析师_02_SQL+MySQL】022_MySQL的全文检索(MyISAM,MATCH AGAINST)
  20. 声音/声学成像2021-4-13

热门文章

  1. 网络管理:超级详细Tcpdump 的用法
  2. 后台程序全局钩子获取鼠标滚轮滚动方向(VB6.0)
  3. 智能一代云平台(九):EclipseLink返回Object转为实体的分析
  4. 硅谷半夜3点惊现无人驾驶特斯拉!百公里时速飞驰,交警围追10公里才逼停
  5. Facebook开源移动端深度学习加速框架,比TensorFlow Lite快一倍
  6. 强势推出第九代酷睿处理器,大敌当前,英特尔不挤牙膏了
  7. Facebook的AI视频聊天设备,终于要发售了
  8. 终于出手!谷歌母公司旗下GV风投首次投资AI芯片创业公司
  9. 吃瓜笔记 | Momenta王晋玮:让深度学习更高效运行的两个视角
  10. 自动驾驶攻破的难点在哪,何时能到Level 5?