haproxy+apache负载均衡调度并实现cookie绑定

haproxy+apache负载均衡调度并实现cookie绑定

一、haproxy介绍

1、HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

2、HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

3、HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救

了很多站点,这个优点也是其它负载均衡器没有的。

4、HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。


详细配置信息参考:点击打开链接


二、拓扑

haproxy调度器 :192.168.50.137

node1 Http Server:192.168.50.138

node2 Http Server:192.168.50.139

三、配置backend服务器

node1:配置静态网页和动态网页,并开启http服务

[root@Jin666 html]# vim index.html

This is 192.168.50.138
[root@Jin666 html]# vim index.php

<?php
        echo "This is 192.168.50.138";
        phpinfo();
?>

node2:配置静态网页和动态网页,并开启http服务

[root@Jin666 html]# vim index.html


This is 192.168.50.139
[root@Jin666 html]# vim index.php

<?php
        echo "This is 192.168.50.139";
        phpinfo();
?>

四、配置haproxy调度器

目标:haproxy调度器能实现动静分离,采用轮询算法,在动态服务调度时能实现基于cookie的绑定,同一用户首次访问动态网页被调度到某主机后,以后访问都会被调度到该主机,从而实现session保持。

[root@Jin666 ~]# vim /etc/haproxy/haproxy.cfg

    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js .html
    acl url_dynamic      path_end       -i .php
    use_backend static          if url_static
    use_backend dynamic         if url_dynamic
    default_backend static
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance roundrobin
    server node1 192.168.50.138:80 check maxconn 3000
    server node2 192.168.50.139:80 check maxconn 3000
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend dynamic
    balance roundrobin
    cookie my_cookie insert
    server node1 192.168.50.138:80 check maxconn 3000  weight 1 cookie node1
    server node2 192.168.50.139:80 check maxconn 3000  weight 2 cookie node2

五、测试

1、静态网页实现负载均衡效果


2、动态网页实现session绑定


多次刷新后依然会调度到192.168.50.139这台主机上


可以看到cookie绑定的信息

3、现将cookie配置删除

backend dynamic
    balance roundrobin
    server node1 192.168.50.138:80 check maxconn 3000  weight 1
    server node2 192.168.50.139:80 check maxconn 3000  weight 1

重载配置文件

[root@Jin666 ~]# systemctl reload haproxy

再次请求测试



成功!!!

六、haproxy states report配置

监听在本地1088端口,并做认证

listen stats
        bind *:1088 #伪装的端口号
        stats enable
        stats hide-version
        stats realm HAProxy\ Stats
        stats auth admin:admin
        stats admin if TRUE #状态页面出现管理功能
        stats uri /admin?admin #访问入口



成功!!!

猜你喜欢

转载自blog.csdn.net/acfun_j/article/details/80586911
今日推荐