会不会有那么一天,生活可以简单到每天清早踏上一辆载着鲜花的脚踏车,微笑着穿过窄窄的街巷,为爱花的人送去芬芳,为需要知识的你送去帮助。
简介
在前面已经学习了使用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)。
例如,访问/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.案例环境
2.搭建两台Apache服务器
由于两台Apache服务搭建过程一样,这里只演示一台搭建过程供参考
安装http服务
3.向网站主页文件输入内容"centos01111111"(第二台apache服务器输入“centos0222222”)
4.启动服务并设置为开机自启
5.分别测试两台apache的可用性
6.配置haproxy
1)安装依赖
2)使用源代码方式将haproxy解压到/usr/src下
并支持64位系统
3)安装
4)生成主配置文件
5)生成服务控制文件
6)备份主配置文件并进行修改支持负载均衡
Haproxy配置文件通常分为三个部分,即global、defaults和listen。global为全局配置,defaults为默认配置,listen为应用组件配置。
global配置项通常有下面配置参数,以示例参数说明如下。
defaults配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将安装默认配置参数设置。
7)创建临时运行目录
8)设置为系统服务并设置为开机自启
9)修改外网IP地址
10)开启haproxy
测试:
测试环境:win10为vmnet2模式
更改IP继续访问
三,Haproxy的日志
Haproxy 的日志默认输出到系统的syslog中,查看起来不是非常方便,为了更好地管理Haproxy的日志,我们在生产环境中一般单独定义出来,定义的方法如下所述。
(1)修改Haproxy配置文件中关于日志配置的选项,将原有的日志配置更改为以下配置:
这两行配置放到Haproxy的global 配置项目中,主要是将Haproxy的info及notice日志分别记录到不同的日志文件中。
重启Haproxy,完成Haproxy配置。
(2)修改rsyslog配置。
为了便于管理,将Haproxy相关的配置独立定义到haproxy.conf.并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。
加入下面的内容:
这部分配置是将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的访问请求日志信息。
故事很短,道理很长,学无止境,不忘初心,砥砺前行
微信搜索 “徐阿马” 关注公众号,期待你的关注!