haproxy实现动静分离
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装:
# yum install 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
......
简单配置:
# 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]