分类: LINUX
2013-08-22 23:29:39
本系列博文是个人学习笔记,非原创,只加工,较粗糙,不喜勿喷。
本文是第一部分的最后篇章。
LB1是VRRP【注 1】的master(配置了keepalived),LB2用来备份。两者同时监听HAProxy进程,在遇到故障时降低优先级,并将工作转到另一个节点。LB1以IP地址192.168.1.1【注 2】接收客户端请求。
两个负载均衡器都以本地IP发送信息。
如果有不含session的request,就会被转发到任意可用服务器。
如果有JESSIONID,就会添加服务器名称作为前缀,以~分割。
当有JESSIONID=A~xxx,LB1将获知这条请求必须投递给服务器A。在投递之前,服务器名会被抽离。
如果webA宕机了,请求会被发送到另一台服务器,cookie重置。【注 3】
(client) (haproxy) (server A) >-- GET /URI1 HTTP/1.0 ------------> | ( no cookie, haproxy forwards in load-balancing mode. ) | >-- GET /URI1 HTTP/1.0 ----------> | X-Forwarded-For: 10.1.2.3 | <-- HTTP/1.0 200 OK -------------< ( no cookie, nothing changed ) <-- HTTP/1.0 200 OK ---------------< | >-- GET /URI2 HTTP/1.0 ------------> | ( no cookie, haproxy forwards in lb mode, possibly to another server. ) | >-- GET /URI2 HTTP/1.0 ----------> | X-Forwarded-For: 10.1.2.3 | <-- HTTP/1.0 200 OK -------------< | Set-Cookie: JSESSIONID=123 ( the cookie is identified, it will be prefixed with the server name ) <-- HTTP/1.0 200 OK ---------------< | Set-Cookie: JSESSIONID=A~123 | >-- GET /URI3 HTTP/1.0 ------------> | Cookie: JSESSIONID=A~123 | ( the proxy sees the cookie, removes the server name and forwards to server A which sees the same cookie as it previously sent ) | >-- GET /URI3 HTTP/1.0 ----------> | Cookie: JSESSIONID=123 | X-Forwarded-For: 10.1.2.3 | <-- HTTP/1.0 200 OK -------------< ( no cookie, nothing changed ) <-- HTTP/1.0 200 OK ---------------< | ( ... )
有些情况下,服务器场中有性能较强的主机,举例而言,如果webA的CPU主频是1GHz,webC的CPU 主频是3GHz,从CPU性能看,这两个服务器性能比可能差3倍。HAProxy为了处理这些情况,提供了 weight选项,分级,1~256,可以配置这个选项以获得更理想的负载分配。
server webA 192.168.1.11:80 cookie A weight 12 check server webB 192.168.1.12:80 cookie B weight 12 check server webC 192.168.1.13:80 cookie C weight 26 check server webD 192.168.1.14:80 cookie D weight 26 check
===========================================================
第一部分到此结束,下篇博文开始第二部分。
【1】VRRP,虚拟路由器冗余协议,控制虚拟路由器地址的路由器成为主路由器,负责转发数据包到虚拟IP。注意,主机也可以是路由器,实际上,路由器本身就是一台简化电脑。
【2】LB1和LB2的共享IP,LB1是VRRP的master,