HAProxy 是什么?
HAProxy:一个使用C语言编写的自由及开放源代码的软件服务。提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy 特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
HAProxy 实现了 事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动因为在有更好的资源和时间管理的用户空间实现所有的任务,所以没有这些问题。此模型的弊端:在多核系统上,这些程序通常扩展性较差。所以需要通过优化 使每个CPU时间片做更多的工作。
事件驱动是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,
调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。
在计算机编程、公共关系、经济活动等领域均有应用。
所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数)。
当然事件不仅限于用户的操作. 事件驱动的核心自然是事件。
从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。
事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)和来自软件的(如应用程序本身等)。
事件发送器负责将收集器收集到的事件分发到目标对象中。
事件处理器做具体的事件响应工作。
对于框架的使用者来说,他们能够看到的是事件处理器。这也是他们所关心的内容。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
配置:
配置HAProxy Session亲缘性的三种方式:(保持客户端和服务器Session)
1、用户 IP 识别:
HAProxy 将用户 IP 通过 hash 计算后,指定到固定的真实服务器上(类似于 nginx 的 IP hash),配置 balance source.
2、cookie 识别:
HAProxy 将 web 服务端发送给客户端的 cookie 中插入(或添加前缀) HAProxy 定义的后端服务器Cookie ID。
配置指令: cookie SESSION_COOKIE insert indirect nocache
用 firebug 可以观察到用户的请求头的cookie 里 有类似
“Cookie jsessionid=0bc588656ca05ecf7588c65f9be214f5;SESSION_COOKIE=app1"
的内容,SESSION_COOKIE=app1 就是 haproxy 添加的内容。
3、Session 识别:
HAProxy 将后端服务器产生的 session 和 后端服务器标识存在haproxy 的一张表中,客户端请求时先查询这张表。
配置指令:appsession JSESSIONID len 64 timeout 5h request-learn
(个人理解,大概应该是这样,我不太理解的是: 服务端返回的 Cookie ID 和 HAProxy 保存在 记录表中的 服务端标识是不是一个东西???)
HAProxy 了解:
1、 CentOS 7 HAProxy 的安装和使用:
安装haproxy:
yum -y install haproxy
配置监控页面:(/etc/haproxy/haprpoxy.cnf 最后添加以下代码)(yum安装的配置文件在该目录,其他安装方式请自行寻找)
listen admin_stats
bind *:1080
mode http
stats uri /haproxy
stats realm Global\ Statistics
stats auth admin:admin
启动haproxy:
systemctl start haproxy # CentOS 7 启动
service haproxy start # CentOS 6 启动 (未测试)
systemctl status haproxy # CentOS 7 查看 haproxy 状态
service haproxy status # CentOS 6 查看 haproxy 状态 (未测试)
访问监控页面:(因为我安装在外网服务器上,所以使用 外网IP访问,如果你们是本地,可以使用 127.0.0.1访问)
http://121.36.56.221:1080/haproxy
2、 HAProxy 配置文件解析:
haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen。
global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件
frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)。
backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。
listen:Frontend和Backend的组合体。
3、 HAProxy 实例Demo:
4、 HAProxy 的注意事项:
5、 HAProxy 性能对比:
6、 HAProxy 应用场景: