vlambda博客
学习文章列表

使用haproxy搭建web集群

会不会有那么一天,生活可以简单到每天清早踏上一辆载着鲜花的脚踏车,微笑着穿过窄窄的街巷,为爱花的人送去芬芳,为需要知识的你送去帮助。



简介

在前面已经学习了使用Nginx、LVS做负载均衡群集,它们都具有各自的特点,本章将要介绍另一款比较流行的群集调度工具Haproxy。首先介绍负载均衡常用调度算法,然后介绍Haproxy 搭建Web群集的方法.最后介绍Haproxy的参数优化和日志配置。


本章重点

  • 负载均衡常用调度算法

  • 使用Haproxy 搭建Web群集



一,HTTP请求


    1.http

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

        例如,访问http://www.test.com/a.php2ld=123.就是一个GET请求,如果访问正常,会从服务器的日志中获取200状态码。假如此请求使用POST方式,那么传递给a.php的ld参数依旧是123,但是浏览器的URL将不会显示后面的ld=123字样,因此表单类或者有用户名、密码等内容提交时建议使用POST方式。不管使用哪种方式,最终a.php获取的值是一样的。


        2.负载均衡常用调度算法

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

        RR(Round Robin):RR算法是最简单最常用的一种算法,即轮询调度。例如,有三个节点A.B.C.第一个用户访问会被指派到节点A.第二个用户访问会被指派到节点B.第三个用户访问会被指派到节点C.第四个用户访问继续指派到节点A.轮询分配访问请求实现负载均衡效果。此算法还有一种加权轮询,即根据每个节点的权重轮询分配访问请求。

        LC(Least Conmections):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,实现群集的调度。此调度算法好处是实现会话保持,但某些P访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用。


        3.常见的Web群集调度器

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





二,案例


        1.案例环境

主机
操作系统 IP地址
apache服务器1
Centos7.4
192.168.100.10
apache服务器2
Centos7.4 192.168.100.20
haproxy Centos7.4

外网IP:192.168.200.10

内网IP:192.168.100.30

win10测试 win10企业版
192.168.200.10


    2.搭建两台Apache服务器

由于两台Apache服务搭建过程一样,这里只演示一台搭建过程供参考


安装http服务


    3.向网站主页文件输入内容"centos01111111"(第二台apache服务器输入“centos0222222”)

    

使用haproxy搭建web集群

    4.启动服务并设置为开机自启

使用haproxy搭建web集群

   5.分别测试两台apache的可用性

使用haproxy搭建web集群

使用haproxy搭建web集群

6.配置haproxy

    1)安装依赖

使用haproxy搭建web集群

    2)使用源代码方式将haproxy解压到/usr/src下

并支持64位系统

使用haproxy搭建web集群

    3)安装

使用haproxy搭建web集群

    4)生成主配置文件

使用haproxy搭建web集群

    5)生成服务控制文件

使用haproxy搭建web集群

使用haproxy搭建web集群

  

使用haproxy搭建web集群

    6)备份主配置文件并进行修改支持负载均衡

使用haproxy搭建web集群

使用haproxy搭建web集群

        Haproxy配置文件通常分为三个部分,即global、defaults和listen。global为全局配置,defaults为默认配置,listen为应用组件配置。


        global配置项通常有下面配置参数,以示例参数说明如下。

使用haproxy搭建web集群

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

使用haproxy搭建web集群

    7)创建临时运行目录

使用haproxy搭建web集群

    8)设置为系统服务并设置为开机自启


使用haproxy搭建web集群

使用haproxy搭建web集群

使用haproxy搭建web集群

使用haproxy搭建web集群

        10)开启haproxy

使用haproxy搭建web集群


测试:

测试环境 :win10为vmnet2模式


使用haproxy搭建web集群

使用haproxy搭建web集群


使用haproxy搭建web集群

更改IP继续访问

使用haproxy搭建web集群



使用haproxy搭建web集群




三,Haproxy的日志

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

(1)修改Haproxy配置文件中关于日志配置的选项,将原有的日志配置更改为以下配置:

使用haproxy搭建web集群

这两行配置放到Haproxy的global 配置项目中,主要是将Haproxy的info及notice日志分别记录到不同的日志文件中。

重启Haproxy,完成Haproxy配置。


(2)修改rsyslog配置。

为了便于管理,将Haproxy相关的配置独立定义到haproxy.conf.并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。


使用haproxy搭建web集群

加入下面的内容:


这部分配置是将Haproxy的info 日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下,其中“&~”表示当日志写入日志文件后,rsyslog停止处理这个信息。这里配置的语法是使用rainerscript脚本语言写的。

保存配置文件并重启rsyslog服务,完成rsyslog配置。

(3)测试日志信息。

在客户端访问hup://192.168.1.60/test.html后,可以使用tail-f/var/log/haproxy/

haproxy-info.log 即时查看Haproxy的访问请求日志信息。





故事很短,道理很长,学无止境,不忘初心,砥砺前行