使用Haproxy搭建Web群集


Haproxy是目前比较流行的一种集群调度工具,与同类集群调度工具LVSNginx相比,LVS性能最好,可是搭建相对复杂,Nginxupstream模块支持集群功能,可是对集群节点健康检查功能不强,性能没有Haproxy好。nginx

LVSHaproxyNginx最经常使用的调度算法有三种,分别是RR(Round Robin)轮询、LC(Least Connection)最小链接数、SH(Source Hashing)基于来源访问。web


案例环境redis

wKiom1hqAZbT_heAAACGeaO_yT4040.png

单台Haproxy服务器就能够实现多台Web服务器之间的热备和负载均衡,这里使用Keepalived保证了Haproxy自己的高可用。算法


1、Haproxy服务器的安装与配置服务器

1.编译安装Haproxy网络

wKioL1hqAdjiQonmAAACj4xTRh0946.png

安装两个支持包负载均衡


wKiom1hqAdnRdAqnAAAHoyJD5Rw008.png

haproxy编译到内核中ide


wKioL1hqAdmCvpIDAAACajfyeA0553.png

安装工具


2.Haproxy服务器配置性能

wKioL1hqAdngtYYXAAAClMB61Fo853.png

建立配置文件目录


wKiom1hqAdmzaMDGAAADLew5bk0684.png

复制源码包中的配置文件做为模版进行修改


wKiom1hqAdrR9ljdAAACyym84kI381.png

wKioL1hqAdri5C0jAAAMAxStPCU006.png

wKioL1hqAdqTFIZlAAAIyD0P-3c519.png

wKiom1hqAduSkf73AAAIJhG30Xg421.png

Haproxy配置文件一般分为三个部分:global(全局配置)、defaults(默认配置)、listen(应用组件配置)。

以示例参数说明以下:

global

log127.0.0.1  local0                    //配置日志记录,local0为日志设备,默认存放到系统日志

log127.0.0.1  local1notice              //notice为日志级别,一般有24个级别

maxconn  4096                           //最大链接数

uid99                                   //所属运行的用户UID

gid99                                   //所属运行的用户GID

pidfile  /var/run/haproxy.pid           //pid文件存放路径

daemon                                  //之后台形式运行haproxy

defaults

logglobal                               //定义日志为global配置中的日志定义

mode  http                             //模式为http

option  httplog                        //采用http日志格式概率日志

option  dontlognull                    //不记录健康检查的日志信息

option  redispatch                     //serverId对应的服务器挂掉后,强制定向到其余健康的服务器

option  httpclose                      //每次请求完毕后主动关闭http通道

retries3                               //3次链接失败就认为服务不可用

maxconn  2000                          //最大链接数

contimeout  5000                       //链接超时时间

clitimeout   50000                     //客户端超时间

srvtimeout  50000                      //服务器超时时间

listen  webcluster  0.0.0.0:80

            //FrontendBackend的组合体,监控组的名称,按需自定义名称,点听80端口。

option  httpchk  POST /index.htm       //心跳检测的文件

balance  roundrobin                    //负载调度使用轮询算法

server  inst1  192.168.1.20:80  check  inter  2000  fall  3

                //服务器定义,check inter 2000表示检测心跳频率,fall 33次失败认为服务器不可用

server  inst1  192.168.1.21:80  check  inter  2000  fall  3


3.建立自启动脚本

wKioL1hqAdvR0C4WAAADOJk83-4465.png

复制源码包中的服务脚本做为haproxy程序的控制脚本


wKiom1hqAx6gb6gfAAADRGFSeJ8521.png

wKioL1hqAx7xzI8jAAAFU2pE0UI290.png

优化并添加系统服务


wKiom1hqAx6AIIX3AAADq-c-seI871.png

启动haproxy服务


wKiom1hqAx_ysKZnAAADC-23VZE032.png

开启iptables防火墙80端口的例外


wKioL1hqAx_iLinfAACaRZ0PuRY789.png

nginx服务器的搭建,这里再也不演示,为了测试负载均衡,要在两台web服务器上建立不一样的内容的网页。

在客户机上访问haproxy 01,两次看到的内容不一样,说明负载均衡已经实现。

若是要测试高可用,只须要停用一台nginx服务器,在客户机上再次访问haproxy 01,这时候只能看到一种内容的网页,而且刷行网页不会出现报错,说明高可用也已经实现。

 

2、使用keepalived实现Haproxy自己的高可用

1.编译安装keepalived

wKiom1hqAx_T2M7oAAAC3gyb4Xg530.png

安装keepalived以前须要安装三个支持包


wKioL1hqAx-if44BAAALaPf2vfI663.png

编译安装keepalived,使用指定的内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无需额外建立连接文件了。


wKiom1hqAyDxkHCgAAADv1PTeNY966.png

添加系统服务


2.主服务器的配置

wKioL1hqAyCgkALsAAACzFxRhFU127.png

wKiom1hqAyCyf8hfAAAMQ-ceFvM742.png

wKioL1hqA8Szl8bSAAAKX0_3wDo986.png

global_defs{}                     //指定全局参数

router_id                          //指定本服务器名称

vrrp_instance 实例名称 { ... }                   //指定VRRP热备实例

state                              //指定热备状态

virtual_router_id                 //虚拟路由器的ID号,每一个热备组保持一致

priority                          //优先级,数值越大优先级越高

advert_int                        //通告间隔秒数(心跳频率)

authentication {}                                    //认证信息,每一个热备组保持一致

auth_type                         //认证类型

auth_pass                         //密码子串

virtual_ipaddress{}                               //指定漂移地址,能够有多个


wKioL1hqA8TCinfbAAAE4y3uPHs731.png

重启keepalived服务


wKiom1hqA8WxTeTwAAAPWasHK-g665.png

haproxy 01上部署完keepalived服务后,查看网卡的信息,发现eth0接口自动添加了VIP地址。


3.备用服务器的配置

haproxy 02上安装keepalived的过程同样,只是配置文件中主要有三处不一样:路由器名称、热备状态、优先级。

wKioL1hqA8bAjGaaAAAET0o7gWc308.png

能够在haproxy 02上直接复制第一台的配置文件


wKiom1hqA8bxV2GpAAANdViv1Xs360.png

wKioL1hqA8ax88fvAAAQF0lX0QY313.png

修改这三处便可


wKiom1hqA8fjD6ylAAAElqasDk4994.png

重启keepalived服务


wKiom1hqA8fjK1gXAAAO1kxgj7E620.png

查看网络接口信息,发现eth0接口没有添加VIP地址。


wKioL1hqA8nwZ3z6AACdXkdLVVw298.png

在客户机访问VIP的地址,打开两次后发现一样能够实现负载均衡的效果。

若是,要测试haproxy自己的高可用,只要停用haproxy 01,而后在客户端再次访问VIP地址便可。


3、Haproxy日志

Haproxy的日志默认是输出到系统的syslog中(即/var/log/message),查看不方便。因此,能够将其单独定义出来。

 

1.修改Haproxy配置文件关于日志配置的选项

wKioL1hqBM-Clo4fAAACTf70RDo494.png

wKiom1hqBNDhSBVSAAACxSModdM819.png

这里主要是将Haproxyinfonotice日志分别记录到不一样的日志文件中。

重启haproxy服务


2.修改rsyslog配置

wKioL1hqBNCw3RkMAAACh5ANPEM119.png

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


wKiom1hqBNDSwp5pAAACjO5Au-M563.png

wKiom1hqBNHxYDlxAAAKE5e4cRw377.png

haproxy.conf中加入以上内容

& ~表示当日志写入到日志文件后,rsyslog中止处理这个信息。


wKioL1hqBNGxkEz1AAAFcFo9HdU760.png

重启rsyslog服务


wKiom1hqBNGyLpgiAAAJpBf0eVo252.png

即时查看日志信息,在客户端访问haproxy 01服务器后,便会弹出新的日志信息。