当前位置:   article > 正文

Haproxy搭建Web群集

Haproxy搭建Web群集

一、案例分析

1.案例概述

        Haproxy 是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS 和Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy好。

2.案例前置知识

(1)HTTP请求

        通过 URL访问网站使用的协议是HTTP 协议,此类请求一般称为HTTP 请求。HTTP 请求的方式分为 GET 方式和 POST 方式。当使用浏览器访问某一个 URL,会根据请求 URL 返回状态码,通常正常的状态码为 2xx、3xx(如 200、301),如果出现异常会返回 4xx、5xx(如 400、500)。 

(2)负载均衡常用调度算法 

        LVS、Haproxy、Nginx最常用的调度算法有三种,如下所述:

        RR(Round Robin)。RR算法是最简单最常用的一种算法,即轮询调度。例如,有三个节点 A、B、C,第一个用户访问会被指派到节点 A,第二个用户访问会被指派到节点 B,第三个用户访问会被指派到节点C,第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果。此算法还有一种加权轮询,即根据每个节点的权重轮询分配访问请求。
        LC(Least Connections)。LC算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求。例如,有三个节点 A、B、C,各节点的连接数分别为 A:4、B:5、C:6,此时如果有第一个用户连接请求,会被指派到A上,连接数变为A:5、B:5、C:6:第个用户请求会继续分配到A上,连接数变为A:6、B:5、C:6;再有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端。由于实际情况下A、B、C的连接数会动态释放,很难会出现一样连接数的情况,因此此算法相比较rr 算法有很大改进,是目前用到比较多的一种算法。
        SH(Source Hashing)。SH 即基于来源访问调度算法,此算法用于一些有 Session会话记录在服务器端的场景,可以基于来源的 IP、Cookie 等做群集调度。例如,使用基于源 IP 的群集调度算法,有三个节点 A、B、C,第一个用户第一次访问被指派到了 A,第二个用户第一次访问被指派到了 B,当第一个用户第二次访问时会被继续指派到 A,第二个用户第二次访问时依旧会被指派到 B,只要负载均衡调度器不重启,第一个用户访问都会被指派到 A,第二个用户访问都会被指派到 B,实现群集的调度。此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用。

(3)常见的Web群集调度器

        目前,常见的 Web 群集调度器分为软件和硬件。软件通常使用开源的LVS、Haproxy、Nginx,硬件一般使用比较多的是 F5。也有很多人使用国内的一些产品,如梭子鱼、绿盟等。

3.案例环境 

        本案例使用三台服务器模拟搭建一套 Web 群集,具体的拓扑如图所示。 

 

二、案例实施

1.编译安装Nginx服务器

  1. [root@node1 ~]# yum -y install pcre-devel zlib-devel gcc*
  2. [root@node1 ~]# useradd -M-s /sbin/nologin nginx
  3. [root@node1 ~]# tar zxvf nginx-l.12.0.tar.gz
  4. [root@node1 ~]# cd nginx-l.12.0
  5. [root@node1 nginx-1.12.0]#./configure--prefix=/usr/local/nginx --user-nginx --gro
  6. up=nginx
  7. [root@node1 nginx-1.12.0]# make && make install
  8. [root@node1 nginx-1.12.0]# cd /usr/local/nginx/html
  9. [root@node1 html]# echo "test web01">index.html
  10. [root@node1 html]# /usr/local/nginx/sbin/nginx

         node2编译安装步骤与node1相同,但测试页面要和node1有所不同。

2.编译安装Haproxy

  1. [root@hap-node]# yum -y install pcre-devel bzip2-devel gcc*
  2. [root@hap-node ~]# tar xf haproxy-1.5.19.tar.gz
  3. [root@hap-node ~]# cd haproxy-1.5.19
  4. [root@hap-node haproxy-1.5.19]# make TARGET=linux26
  5. [root@hap-node haproxy-1.5.19]# make install

 3.Haproxy服务器配置

(1)建立Haproxy的配置文件

  1. [root@hap-node haproxy-1.5.19]# mkdir /etc/haproxy
  2. [root@hap-node haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/

Haproxy 配置项介绍:
        Haproxy配置文件通常分为三个部分,即 global、defaults 和 listen。global 为全局配置,defaults 为默认配置,1isten为应用组件配置。
        global配置项通常有下面配置参数,以示例参数说明如下。

  1. global
  2. 1og 127.0.0.1 loca10 //配置日志记录,loca10 为日志设备,默认存放到系统日志
  3. 1og 127.0.0.1 locall notice//notice为日志级别,通常有24个级别
  4. maxconn 4096 //最大连接数
  5. uid 99 //用户 uid
  6. gid 99 //用户 gid

        defaults 配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将按照默认配置参数设置。

  1. defaults
  2. log global //定义日志为 global 配置中的日志定义
  3. mode http //模式为 http
  4. option httplog //采用 http 日志格式记录日志
  5. retries 3 //检查节点服务器失败次数,连续达到三次失败,则认为节点不可
  6. redispatch //当服务器负载很高时,自动结束当前队列处理比较久的连接
  7. maxconn 2000 //最大连接数
  8. contimeout 5000 //连接超时时间
  9. clitimeout 50000 //客户端超时时间
  10. srvtimeout 50000 //服务器超时时间

listen 配置项一般配置应用模块参数。

  1. listen appli4-backup 0.0.0.0:10004 //定义一个 appli4-backup 的应用
  2. option httpchk /index.html //检查服务器的 index.html 文件
  3. option persist //制将请求发送到已经 dow 掉的服务器
  4. balance roundrobin //负载均衡调度算法使用轮询算法
  5. server instl 192.168.114.56:80 check inter 2000 fa11 3 //定义在线节点
  6. server inst2 192.168.114.56:81 check inter 2000 fall 3 backup //定义备份节点

(2)修改haproxy.cfg配置文件

        根据目前的群集设计,将 haproxy.cfg 配置文件的内容修改如下。

  1. [root@localhost haproxy-1.5.19]# vi /etc/haproxy/haproxy.cfg
  2. global
  3. log 127.0.0.1 local0
  4. log 127.0.0.1 local1 notice
  5. #log loghost local0 info
  6. maxconn 4096
  7. uid 99
  8. gid 99
  9. daemon
  10. #debug
  11. #quiet
  12. defaults
  13. log global
  14. mode http
  15. option httplog
  16. option dontlognull
  17. retries 3
  18. # redispatch
  19. maxconn 2000
  20. contimeout 5000
  21. clitimeout 50000
  22. srvtimeout 50000
  23. listen webcluster 0.0.0.0:80
  24. option httpchk GET /index.html
  25. balance roundrobin
  26. server inst1 192.168.10.102:80 check inter 2000 fall 3 weight 1
  27. server inst2 192.168.10.103:80 check inter 2000 fall 3 weight 2

4.创建自启动脚本

  1. [root@hap-node haproxy]# cp /haproxy-1.5.19/examples/haproxy.init /etc/init. d/haproxy
  2. [root@hap-node haproxy]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
  3. [root@hap-node haproxy]# chmod +x /etc/init.d/haproxy
  4. [root@hap-node haproxy]# chkconfig --add /etc/init.d/haproxy
  5. [root@hap-node haproxy]# /etc/init.d/haproxy start
  6. Starting haproxy (via systemctl): [确定]
  7. root@hap-node haproxy]# systemctl stop firewalld

5.测试Web群集

(1)测试高性能

        在客户端连续访问Haproxy服务器的IP地址,查看浏览器显示信息,若能按照设置分别显示node1和node2的测试页面,群集的负载均衡调度已经生效,已经满足了群集的高性能需求。

(2)测试高可用

        将一台node节点的Nginx服务停用,在客户端访问测试页面,浏览器仍显示信息。当一台节点故障,不会影响群集的使用,这样就满足了群集的高可用性。

6.Haproxy的日志

        Haproxy 的日志默认输出到系统的 syslog 中,查看起来不是非常方便,为了更好地管理 Haproxy 的日志,在生产环境中一般单独定义出来,定义的方法如下所述。 

(1)修改syslog

        配置文件,将原有的配置更改为以下配置:

  1. [root@hap-node ~]# vim /etc/rsyslog. conf
  2. ......
  3. $ModLoad imudp #去掉注释,开启 UDP 日志协议转发
  4. $UDPServerRun 514
  5. ......
  6. local3.* /var/log/haproxy.log #最下方添加
  7. local0.* /var/log/haproxy.log #最下方添加

        重启 rsyslog,完成rsyslog 配置。 

(2)测试日志信息

        在客户端访间 http://192.168.10.101后,可以使用tail -f /var/log/haproxy.log 即时査看Haproxy的访问请求日志信息。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号