共计 4743 个字符,预计需要花费 12 分钟才能阅读完成。
一.HAProxy 简介
HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计 的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的 web 服务器不被暴露到网络上。
HAProxy 实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端 (User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个 CPU 时间片(Cycle) 做更多的工作。下图展示了 HAProxy 的负载均衡应用模型:
二. 应用可行性
出于 HAProxy 的众多优点,将其应用于 CORS(连续运行卫星定位服务综合系统)运维工作可有效提高现有的最大负载能力、减少硬件资源的浪费、保障系统的可用性及稳定性。具体地,可以从以下几个方面阐述:
1. 基于 TCP 代理在基准站数据流分发流程中充当代理服务器的功能;
2. 基于 TCP 代理在用户接入及数据播发流程中起到负载均衡均衡器的作用;
对于用户数量多,并发性高的 CORS,使用 HAProxy 将对外服务端口的请求对应至控制中心内部网络的多个相同功能的应用程序(如 IGate/TNC 等)的服务端 口, HAProxy 可以通过多种方式(IP、cookie、session)保持 tcp 链接的亲缘性,确保数据交互的正确性。通过多种负载均衡算法,内部的服务程序分担总体的服务压力,当某个程序 down 掉了,HAProxy 能够自动将相关的 tcp 链接分发至其它服务程序。HAProxy 实现了 8 种负载均衡算法:
- roundrobin,表示简单的轮询
- static-rr,表示根据权重,可根据服务器性能赋权
- leastconn,表示最少连接者先处理
- source,表示根据请求源 IP
- uri,表示根据请求的 URI
- url_param,表示根据请求的 URl 参数 ’balance url_param’ requires an URL parameter name
- hdr(name),表示根据 HTTP 请求头来锁定每一次 HTTP 请求
- rdp-cookie(name),表示根据据 cookie(name)来锁定并哈希每一次 TCP 请求
3. 基于 tcp 代理实现内部网络的防火墙的 NAT 功能。
三.HAProxy 的安装与配置
此文 编写HAProxy 最新稳定版本的下载地址为:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.25.tar.gz。
1.Linux 下 HAProxy 的安装
- tar zcvf haproxy-1.4.25.tar.gz
- cd haproxy-1.4.25
- make TARGET=linux28 PREFIX=/usr/local/haprpxy
- make install PREFIX=/usr/local/haproxy
- cd /usr/local/haproxy
- vim haproxy.cfg 编辑配置文件,后面统一阐述配置的相关细节
- /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 使用刚才的配置文件启动 HAProxy
2. Windows 下 HAProxy 的编译与安装
- 下载 cygwin 安装工具,文章编写时其 64 位下载地址为:https://cygwin.com/setup-x86_64.exe。运行程序,程序截图如下:
- 安装 gcc,状态为 Keep 的是本机已安装的,如未安装请勾选 Bin 列的复选框
- 安装 make 工具。
- 将下载的 HAProxy 源码包复制到:C:\cygwin64\home,并解压到该目录,
- 使用 Cywin64 Terminal 命令行工具进入 HAProxy 目录:
- make TARGET=cygwin
- make install 这样 haproxy.exe 就编译好了,将 haproxy.exe 和 cygwin1.dll 拷贝出来以供使用。
- 运行方式与 Linux 环境下一致。
3.HAProxy 配置文件解析
######## 默认配置 ############
defaults
mode http #默认的模式 mode {tcp|http|health},tcp 是 4 层,http 是 7 层,health 只会返回 OK
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当 serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #= 心跳检测超时
log 127.0.0.1 local0 err #[err warning info debug]
######## 统计页面配置 ########
listen admin_stats
bind 0.0.0.0:1080 #监听端口
mode http #http 的 7 层模式
option httplog #采用 http 日志格式
#log 127.0.0.1 local0 err
maxconn 10
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面 url
stats realm XingCloud\ Haproxy #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上 HAProxy 的版本信息
########test1 配置 #################
listen test1
bind 0.0.0.0:90
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 10.18.138.201:80
server s2 10.18.102.190:80
server s3 10.18.102.189:80
server s4 10.18.102.188:80
server s5 10.18.102.187:80
########frontend 配置 ##############
########test2 配置 #################
listen test2
bind 0.0.0.0:91
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 10.18.138.130:80 weight 1
server s2 10.18.138.201:8080 weight 6
########frontend 配置 ##############
4. 实例测试
为了测试运行效果我们使用最简单的配置做一个简单的 tcp 代理:
########## 全局配置 #########
global
daemon
nbproc 1
pidfile /var/run/haproxy.pid
######## 默认配置 ############
defaults
mode http #默认的模式 mode {tcp|http|health},tcp 是 4 层,http 是 7 层,health 只会返回 OK
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当 serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #= 心跳检测超时
log 127.0.0.1 local0 err #[err warning info debug]
######## 统计页面配置 ########
listen admin_stats
bind 0.0.0.0:1080 #监听端口
mode http #http 的 7 层模式
option httplog #采用 http 日志格式
#log 127.0.0.1 local0 err
maxconn 10
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面 url
stats realm XingCloud\ Haproxy #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上 HAProxy 的版本信息
########test1 配置 #################
listen test1
bind 0.0.0.0:81
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 192.168.1.200:8000
server s1 192.168.1.201:8001
server s1 192.168.1.202:8002
########frontend 配置 ##############
########test2 配置 #################
listen test2
bind 0.0.0.0:91
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 192.168.1.100:9000
server s1 192.168.1.101:9001
server s1 192.168.1.102:9002
########frontend 配置 ##############
Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm
Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
使用 HAProxy 配置 HTTP 负载均衡器 http://www.linuxidc.com/Linux/2015-01/112487.htm
HAproxy 的详细介绍:请点这里
HAproxy 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-02/128336.htm