高性能负载均衡软件 HAProxy

meyw 4年前

HAProxy 是一个开源的、高性能的、基于TCP(四层)和 HTTP(七层)应用的负载均衡软件  HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。它的显著优点如下:  1、可靠性和稳定性好  2、支持多达9种负载均衡算法  3、支持虚拟主机和 ACL规则  4、能生成服务器状态监控页面

HAProxy 原理

高性能负载均衡软件 HAProxy

 环境: 1、HaProxy   eth0: 192.168.18.10  eth1: 192.168.1.10     2、WebSrv1  eth1: 192.168.1.11     3、WebSrv2  eth1: 192.168.1.12     4、Client  eth1: 192.168.18.100
 
一、安装 Haproxy
A、yum安装 
yum install haproxy -y 
B、编码编译
1、为支持正则,必须安装 pcre 
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.bz2   tar -jxf pcre-8.36.tar.bz2   cd pcre-8.36   ./configure   make && make install 
2、Haproxy 官网在国内已被墙,可在 github 下载 wget https://github.com/haproxy/haproxy/archive/v1.5.0.tar.gz -O haproxy-v1.5.0.tar.gz   tar -zxf haproxy-v1.5.0.tar.gz cd haproxy-1.5.0/     make TARGET=linux2628 ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy # 编译   make install PREFIX=/usr/local/haproxy # 安装到指定路径   mkdir {/etc/haproxy,/var/haproxy,/var/log/haproxy} # 创建相关目录     cp examples/haproxy.cfg /etc/haproxy/ # 复制示例配置文件  cp -a examples/haproxy.init /etc/init.d/haproxy # 复制启动脚本   cp doc/haproxy.1 /usr/share/man/man1/  cp doc/configuration.txt /usr/share/man/man1/haproxy.cfg.1 # 复制man文件     cp -ar examples/errorfiles/ /etc/haproxy    # 复制错误提示文件  chmod a+x /etc/init.d/haproxy   chkconfig --add haproxy chkconfig haproxy on     ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy   ln -s /usr/local/lib/libpcre.so.1 /usr/lib64/libpcre.so.1 
二、负载均衡实例
1、主配置文件 
vim /etc/haproxy/haproxy.cfg
global # 全局参数   log 127.0.0.1 local3 info # log 记录级别   maxconn 20480 # 最大并发连接数   chroot /var/haproxy   uid 99   gid 99   daemon # 后台运行   nbproc 3 # 创建6个进程 (建议设置为CPU核数)   pidfile /var/run/haproxy.pid   ulimit-n 65535   stats socket /var/tmp/haproxy.stats   #debug   #quiet    defaults # 默认参数   log global   cookie SRV # 向 cookie 插入 SERVERID,会话保持   mode http # http7层模式,可配置tcp4层模式   option httplog # 记录http请求日志   option httpclose # 请求完毕后主动关闭http通道   option dontlognull # 不记录空log   option forwardfor # 记录 Client IP   option redispatch # 自动重定向到健康机器   option allbackups # 服务器宕机时,激活备机  # option abortonclose # 高负载时,自动关闭连接长的请求   stats refresh 30 # 统计页面刷新间隔   retries 3 # 连接 RS 超时次数   maxconn 20480   timeout check 2000ms # 检查超时   timeout connect 5000ms # 连接超时   timeout client 50000ms # 客户端连接超时   timeout server 50000ms # 服务端连接超时    listen amin_status # 状态管理   bind 192.168.18.10:6553 # 服务IP:端口   mode http   log 127.0.0.1 local3 info   stats enable   stats refresh 5s # 自动刷新间隔   stats realm Haproxy\ Statistics # 认证信息   stats uri /admin?stats # URL页面提示符   stats auth admin01:admin01 # 认证用户admin01,密码admin01   stats auth admin02:admin02   stats admin if TRUE # 支持启/禁用 RS服务器   stats hide-version # 隐藏版本号    frontend web_service # 前端虚拟节点   bind *:80 # 提供服务IP:端口   mode http   log global     acl inside_src src 10.0.2.0/24 # 定义ACL,支持正则   acl bad_net src 192.168.2.0/24  # acl test.org_acl hdr_req(host) -i ^(www.test.org|web.test.org)$   http-request deny if bad_net # 拒绝bad_net  # use_backend external_servers if test.org_acl   use_backend inside_servers if inside_src # 如果源主机是 inside_src,定向到 inside_servers   default_backend external_servers # 默认服务组    backend external_servers # 后端对外服务组,名字随便取   mode http   balance roundrobin # 轮询调度   option httpchk GET /index.html # 健康检查页面     # 主机名 IP:端口 健康检查频率(ms) 连续2次成功则认为正常 连续3次失败则认为宕机 权重1   server web01 192.168.1.11:80 cookie web01 check inter 2000 rise 2 fall 3 weight 1   server web02 192.168.1.12:80 cookie web02 check inter 2000 rise 2 fall 3 weight 1    backend inside_servers # 对内服务组   mode http   balance roundrobin   option httpchk GET /index.html # 启用对 RS 的状态检测   server web01 192.168.1.11:80 cookie web01 check inter 2000 rise 2 fall 3 weight 1     errorloc 502 /etc/haproxy/errorfiles/502.http   errorfile 503 /etc/haproxy/errorfiles/503.http
启动 HaProxy   haproxy -f /etc/haproxy/haproxy.cfg 或 /etc/init.d/haproxy start 
2、负载均衡算法  
Haproxy支持的负载均衡算法:   1、roundrobin # 轮询调度,   2、static-rr # 基于权重,静态算法   3、leastconn # 最少连接数,适用于长会话连接,如:LDAP, SQL, TSE, etc...  4、first # 首次连接,总是使用最小连接   5、source # 源地址,再除权重总数,常用 6、uri # 对 URL 进行 hash 运算,再除服务器总权重   7、url_param # 根据 URl 路径中的参数   8、hdr # 根据 HTTP 请求头,不存在则用 RR 算法   9、rdp-cookie # 基于客户端Cookie,hash每次请求 
3、日志支持
 vim /etc/rsyslog.conf # 追加到rsyslog配置
 # Provides UDP syslog reception  $ModLoad imudp       # 载入UDP 模块  $UDPServerRun 514    # 监听端口     # Haproxy log  local3.* /var/log/haproxy/haproxy.log       # log 位置
重启rsyslog   service rsyslog restart   Haproxy 优雅重启   haproxy -f /etc/haproxy/haproxy.cfg -sf `cat /var/run/haproxy.pid` 
三、Web服务器配置 ( 以Web1为例 )   yum install httpd -y   # 安装Apache   echo "Web-01" > /var/www/html/index.html service httpd start # 启动httpd服务 
四、测试
 1、打开浏览器访问: http://192.168.18.10:6553/admin?stats  输入认证用户登录

高性能负载均衡软件 HAProxy


 

HAProxy 的 Web监控页面

高性能负载均衡软件 HAProxy

更多参考:
 haproxy-1.5.0/doc/configuration.txt
https://github.com/haproxy/haproxy/
来自:http://my.oschina.net/chenxu/blog/489918