一, 什么是 HAProxy
HAProxy 提供高可用性, 负载均衡以及基于 TCP 和 HTTP 应用的代理, 支持虚拟主机, 它是免费, 快速并且可靠的一种解决方案. HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层处理. HAProxy 运行在当前的硬件上, 完全可以支持数以万计的并发连接. 并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的 Web 服务器不被暴露到网络上.
HAProxy 实现了一种事件驱动, 单一进程模型, 此模型支持非常大的并发连接数. 多进程或多线程模型受内存限制 , 系统调度器限制以及无处不在的锁限制, 很少能处理数千并发连接. 事件驱动模型因为在有更好的资源和时间管理的用户空间 (User-Space) 实现所有这些任务, 所以没有这些问题. 此模型的弊端是, 在多核系统上, 这些程序通常扩展性较差. 这就是为什么他们必须进行优化以 使每个 CPU 时间片(Cycle) 做更多的工作.
二, 安装 HAProxy
- wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.14.tar.gz (在墙外).
- tar zxvf haproxy-1.5.14.tar.gz
- uname -a # 查看 Linux 内核版本
- make TARGET=linux26 PREFIX=/usr/local/haproxy
- make install PREFIX=/usr/local/haproxy
启动 haproxy [root@localhost sbin]# haproxy -f /etc/haproxy/haproxy.cfg
配置文件 /etc/haproxy.cfg, haproxy 的配置文件内容很多很灵活, 以下只配置简单的一些内容.
- global
- log 127.0.0.1 local0
- log 127.0.0.1 local1 notice
- #log loghost local0 info
- maxconn 4096
- chroot /var/haproxy
- uid 99
- gid 99
- daemon
- nbproc 1
- #debug
- #quiet
- defaults
- log global
- mode http
- option httplog
- option dontlognull
- retries 3
- option redispatch # 自动重定向到健康机器
- maxconn 2000
- timeout check 2000ms # 检查超时
- timeout connect 5000ms # 连接超时
- timeout client 50000ms # 客户端连接超时
- timeout server 50000ms # 服务端连接超时
- listen webinfo :1080
- mode http
- balance roundrobin
- stats uri /ha_status
- option httpclose
- option forwardfor
- server web1 192.168.163.34:80 check weight 1 minconn 1 maxconn 3 check inter 40000
- server web2 192.168.163.35:80 check weight 1 minconn 1 maxconn 3 check inter 40000
- # 配置控制台
- listen stats :6553
- mode http
- transparent
- stats uri / haproxy-stats
- stats realm Haproxy \ statistic
- stats auth admin:admin
三, 测试
这里共有 3 台机器, IP 分别是 192.168.163.33,192.168.163.34,192.168.163.35 .
33 这台机器装的是 haproxy,34 和 35 两台机器装的是 nginx.
nginx 的安装参考前一篇 nginx 安装
- 192.168.163.34:80 测试
- 192.168.163.35:80 测试
- 请求过来被轮询分配到 webinfo 组的 web1 和 web2, 分别是
- web1 192.168.163.34:80
- web2 192.168.163.35:80
- 环境准备好了, 测试 192.168.163.33, 将会轮训到 2 台机器如下:
paproxy 的控制台, 参考 haproxy.cfg 里面的配置
http://192.168.163.33:6553/haproxy-stats
- 在 ip 为 33 这台机器, 通过 haproxy 分配到 2 台 nginx 机器上, 压力测试
[root@localhost ~]# ab -c 1 -n 10000 http://192.168.163.33:1080/
结果
- 在 ip 为 33 这台机器, 测试 ip 为 34 的 nginx 机器
[root@localhost ~]# ab -c 1 -n 10000 http://192.168.163.34:80/index.html
结果
- 通过上面的是测试可见通过 haproxy 分流之后效率降低了. 不如单台 nginx. 参考 http://www.oschina.net/question/17_4121
现在 HAProxy 的算法也非常多, 并不比专业的 F5/LVS 算法少, 常用的算法有如下 8 种:
balance roundrobin, 表示简单的轮询, 建议关注;
balance static-rr, 表示根据权重, 建议关注;
balance leastconn, 表示最少连接者先处理, 建议关注;
balance source, 表示根据请求源 IP, 跟 Nginx 的 ip_hash 算法相似, 建议关注;
balance uri, 表示根据请求的 URI;
balance url_param, 表示根据请求的 URl 参数;
balance hdr(name), 表示根据 HTTP 请求头来锁定每一次 HTTP 请求;
balance rdp-cookie(name), 表示根据据 cookie(name)来锁定并哈希每一次 TCP 请求.
参考文章
- http://blog.haohtml.com/archives/7959
- http://www.open-open.com/lib/view/open1388290883344.html
- https://tyr.so/haproxy.html
- http://www.haproxy.org
感谢
30 多岁老程序员码字不容易, 且码且珍惜. 欢迎大家留言, 亦师亦友共同交流. 长按下方二维码关注我的公众号.
来源: https://www.cnblogs.com/tonyY/p/12084690.html