设为首页 收藏本站
查看: 1183|回复: 0

[经验分享] haproxy实现动静分离

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-22 09:51:25 | 显示全部楼层 |阅读模式
                      1.HAProxy简介
    HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
    HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
    HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。


2.HAProxy性能详解
1).基于单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
2).事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。
3).在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽;
4).借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调用,HAProxy可以实现零复制转发(Zero-copyforwarding),在现在的新版本的Linux OS中还可以实现零复制启动(zero-starting)
5).MRU内存分配器在固定大小的内存池中可实现即时内存分配,这能够减少创建一个会话的时长;
6).树型存储:弹性二叉树,实现了接近以O(1)的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列;
7).优化的HTTP首部分析:优化的首部分析功能避免了在HTTP首部分析过程中重读任何内存区域;
8).支持客户端侧的长连接(client-side keep-alive)并且支持TCP加速(TCP speedups)
9).基于源的粘性(source-based stickiness)及更详细的健康状态检测(more verbose health checks)


3.HAPROTXY的主要特性
1)、HAProxy是支持虚拟主机的。
2)、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3)、支持url检测后端的服务器出问题的检测会有很好的帮助。
4)、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
5)、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。
6)、HAProxy的算法现在也越来越多了,具体有如下8种:
①roundrobin,表示简单的轮询,这个是负载均衡基本都具备的;
②static-rr,表示根据权重,建议关注;
③leastconn,表示最少连接者先处理,建议关注;
④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求


4.简单安装和示例配置
安装:在CentOS6的系统镜像中默认已经集成了HAProxy,版本为1.4.22。在这里我们使用yum装:
[iyunv@HAProxy ~]# yum install haproxy #安装
[iyunv@HAProxy ~]# rpm -ql haproxy #查看生成的配置文件
/etc/haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/rc.d/init.d/haproxy
/usr/bin/halog
/usr/sbin/haproxy
/usr/share/doc/haproxy-1.4.22
......
简单配置:
[iyunv@HAProxy ~]# vim /etc/haproxy/haproxy.cfg
global                                                #全局设置
log 127.0.0.1 local2                                  #定义日志的记录的级别和服务器地址
chroot /var/lib/haproxy                               #限定相关用户的访问目录
pidfile /var/run/haproxy.pid                          #pid文件的设置
maxconn 4000                                          #最大连接数的设置
user haproxy                                          #定义运行服务的用户
group haproxy                                         #属组
daemon                                                #设置服务后台运行
stats socket /var/lib/haproxy/stats                   #打开状态检测socket
listen stats                                          #关联前端和后端定义一个定义一个完整的代理
mode http                                             #设置代理协议
bind *:1080                                           #绑定相应的端口
stats enable                                          #开启状态检测
stats hide-version                                    #隐藏代理服务器版本
stats uri /stats                                      #设置资源详细记录
stats realm haproxy_stats                             #设置登录认证提示信息
stats auth admin:admin                                #设置登录用户和密码
frontend main *:8080                                  #定义监听套接字
acl url_static path_end -i .jpg .gif .png .css .js    #acl匹配静态资源
use_backend static if url_static                      #如果匹配静态资源使用static
default_backend app                                   #否则使用默认的后端服务器
backend static                                        #定义后端服务器的设置(匹配静态)
balance roundrobin                                    #使用动态的轮询调度算法
server static 192.168.21.4:80 check                   #设置代理的后端服务器地址
backend app                                           #定义匹配默认的后端服务器
balance roundrobin
server app1 192.168.21.1:80 check
server app2 192.168.21.2:80 check
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25126-1-1.html 上篇帖子: Varnish工作原理及配置详解 下篇帖子: haproxy的配置参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表