如何用HAProxy+Nginx实现负载均衡
一、什么是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。参考
现在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多岁老程序员码字不容易,且码且珍惜。欢迎大家留言,亦师亦友共同交流。长按下方二维码关注我的公众号。
如何用HAProxy+Nginx实现负载均衡的更多相关文章
- haproxy/nginx+keepalived负载均衡 双机热备 邮件报警 实战及常见问题
Haproxy 做http和tcp反向代理和负载均衡keepalived 为两台 Haproxy 服务器做高可用/主备切换.nginx 为内网服务器做正向代理,如果业务需求有变化,也可以部分替代 ...
- octavia的实现与分析(一)·openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
- openstack octavia的实现与分析(一)openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
- Nginx的负载均衡 - 整体架构
Nginx的负载均衡 - 整体架构 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd Nginx目前提供的负载均衡模块: ngx_http_upstre ...
- [转]CENTOS 6.5 配置YUM安装NGINX+服务器负载均衡
原文连接: CENTOS 6.5 配置YUM安装NGINX http://blog.sina.com.cn/s/blog_69f467b70102uyux.html 参考博文: Centos下安装. ...
- Nginx+Keepalived负载均衡高可用
Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务 http 80 b.负载均衡(方向代理proxy) ...
- 项目实战4—HAProxy实现高级负载均衡实战和ACL控制
haproxy实现高级负载均衡实战 环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务 ...
- 高性能Nginx服务器-负载均衡
Location正则表达式 location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作. locatio ...
- 【转】Nginx学习---负载均衡的原理、分类、实现架构,以及使用场景
[原文]https://www.toutiao.com/i6593604356799463944/ [原文]https://www.toutiao.com/i6592741060194075143/ ...
随机推荐
- 用python查看文件是否存在的三种方式
目录 1.使用os模块 判断文件是否可做读写操作 2.使用Try语句 3. 使用pathlib模块 正文 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做 ...
- 123457123456#0#-----com.threeapp.magicImageShow01----儿童宝宝魔法画笔
com.threeapp.magicImageShow01----儿童宝宝魔法画笔
- Django使用request和response对象
当请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象,然后Django加载合适的view方法,把这个HttpRequest 对象作为第一个参数传给view方法 ...
- 【Leetcode_easy】653. Two Sum IV - Input is a BST
problem 653. Two Sum IV - Input is a BST 参考 1. Leetcode_easy_653. Two Sum IV - Input is a BST; 完
- CentOS 7中安装和配置Promethues
Prometheus 是什么? Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的.随着发展,越来越多公司和组织接受采用Prome ...
- 第一篇博客==>Hello_World
1,为什么写博客? 大佬都说程序员需要写博客的说,被无数到的大佬帮我洗脑之后,慢慢也发现了写博客的好处,写博客我认为主要有以下几个作用: 1.打开博客,记录世界记录你.emmm 2.可以把自己的一些经 ...
- 最新 拉卡拉java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.拉卡拉等10家互联网公司的校招Offer,因为某些自身原因最终选择了拉卡拉.6.7月主要是做系统复习.项目复盘.LeetCo ...
- (生鲜项目)07. api view实现商品列表页
第一步: 环境配置 1. DRF官网: https://www.django-rest-framework.org/ 仔细查看自己当前的python版本以及django版本是否支持DRF, 然后就看看 ...
- 控制台程序转化为windows服务
首先我们创建一个控制台应用程序WriteLog,然后添加windows服务LogService 新增的windows服务切换到代码视图,我这边用log4net进行的日志的记录 OnStart方式是服务 ...
- K8S从入门到放弃系列-(2)集群根证书准备
k8s从1.8版本开始,集群中各个组件需要使用TLS证书对通信进行加密,每个k8s集群都需要有独立的CA证书体系,这里我们采用比较常用的CloudFlare 的 PKI 工具集 cfssl 来生成 C ...