HAProxy负载均衡代理

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

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
wKiom1kKzbPDwoNlAACAMF5fi_I672.jpg-wh_50

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/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
[root@xuegod175 haproxy-1.5.15] # cat /etc/init.d/haproxy 
 
#! /bin/sh
 
set  -e
 
PATH= /sbin : /bin : /usr/sbin : /usr/bin : /usr/local/haproxy/sbin
 
PROGDIR= /usr/local/haproxy
 
PROGNAME=haproxy
 
DAEMON=$PROGDIR /sbin/ $PROGNAME
 
CONFIG=$PROGDIR /etc/haproxy .cfg
 
PIDFILE=$PROGDIR/$PROGNAME.pid
 
DESC= "HAProxy daemon"
 
SCRIPTNAME= /etc/init .d/$PROGNAME
 
# Gracefully exit if the package has been removed.
 
test  -x $DAEMON ||  exit  0
 
start()
 
{
 
echo  -n  "Starting $DESC: $PROGNAME"
 
$DAEMON -f $CONFIG
 
echo  "."
 
}
 
stop()
 
{
 
echo  -n  "Stopping $DESC: $PROGNAME"
 
haproxy_pid=$( cat  $PIDFILE)
 
kill  -15 $haproxy_pid
 
echo  "."
 
}
 
restart()
 
{
 
echo  -n  "Restarting $DESC: $PROGNAME"
 
$DAEMON -f $CONFIG -p $PIDFILE -sf $( cat  $PIDFILE)
 
echo  "."
 
}
 
case  "$1"  in
 
start)
 
start
 
;;
 
stop)
 
stop
 
;;
 
restart)
 
restart
 
;;
 
*)
 
echo  "Usage: $SCRIPTNAME {start|stop|restart}"  >&2
 
exit  1
 
;;
 
esac
 
exit  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

wKiom1kKz0ORF5V3AAAo9opZTZk076.jpg-wh_50

测试访问界面 web2

wKioL1kKz2GxwkV3AAAo8Ubio-E874.jpg-wh_50

 

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

wKiom1kKz5eBshTTAAApFZ7IWp0262.jpg-wh_50

wKioL1kKz7HD_NXQAAAyBkpCS-8650.jpg-wh_50

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

wKioL1kKz-ygWUIQAAHaohbTrLM794.jpg-wh_50

停掉web2服务进行测试 

wKioL1kK0BijAUVDAAHW_7n5gyQ518.jpg-wh_50


本文转自 Innocence_caosm 51CTO博客,原文链接:http://blog.51cto.com/innocence/1922042,如需转载请自行联系原作者

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
160 0
|
5月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
359 3
|
7月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
315 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
9月前
|
负载均衡 算法 前端开发
HAProxy 和负载均衡概念简介
HAProxy 和负载均衡概念简介
140 3
|
负载均衡 算法 网络协议
LVS、Nginx和HAProxy负载均衡器对比总结
LVS、Nginx和HAProxy负载均衡器对比总结
|
负载均衡 监控 网络协议
使用haproxy实现负载均衡集群
【4月更文挑战第14天】HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,快速并且可靠的一种解决方案。
459 1
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
259 0
|
负载均衡 前端开发 网络协议
Keepalived+HAProxy 搭建高可用负载均衡(二)
Keepalived+HAProxy 搭建高可用负载均衡
585 0
|
负载均衡 应用服务中间件 Linux
Nginx安装Windows、Linux | 正向代理、反向代理、负载均衡
Nginx安装Windows、Linux | 正向代理、反向代理、负载均衡
270 0
|
负载均衡 算法 调度
Keepalived+HAProxy 搭建高可用负载均衡
Keepalived+HAProxy 搭建高可用负载均衡
997 0

热门文章

最新文章