前言:

HAProxy

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

Keepalived

Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

环境准备:
10.0.0.7 web01
10.0.0.8 web02
10.0.0.3 lib01
10.0.0.4 lib02
10.0.0.55 VIP
centOS 7
通过部署haproxy负载均衡,keepalived lib01与lib02实现高可用
首先lib01上部署haproxy负载均衡
关闭selinux、关闭iptables
1)安装常用软件
yum install -y gcc glibc gcc-c++ screen

    2)下载haproxy软件

http://www.haproxy.org/download/1.7/src/haproxy-1.7.10.tar.gz

    由于http://www.haproxy.org在国内被屏蔽,只能通过其他方式获取软件

   3)将软件上传到相应目录,进行解压,源码编译安装haproxy

[root@lib01 ~]# cd /usr/local/src
[root@lib01 src]# tar zxf haproxy-1.7.10.tar.gz 
[root@lib01 src]# cd haproxy-1.7.10
[root@lib01 haproxy-1.7.10]# make TARGET=linux3100 PREFIX=/usr/local/haproxy-1.7.10
[root@lib01 haproxy-1.7.10]# make install
[root@lib01 haproxy-1.7.10]# cp /usr/local/sbin/haproxy /usr/sbin/
通过 haproxy -v,我们可以看到haproxy的版本号
[root@lib02 ~]# haproxy -v
HA-Proxy version 1.7.10-a7dcc3b 2018/01/02
Copyright 2000-2018 Willy Tarreau <willy@haproxy.org>

    4)创建haproxy用户及配置文件目录

[root@lib01 haproxy-1.7.10]# useradd -r haproxy
[root@lib01 haproxy-1.7.10]# mkdir /etc/haproxy
[root@lib01 haproxy-1.7.10]# mkdir /var/lib/haproxy
[root@lib01 haproxy-1.7.10]# mkdir /var/run/haproxy

    5)编辑启动脚本

[root@lib01 haproxy-1.7.10]# cp examples/haproxy.init /etc/init.d/haproxy
[root@lib01 haproxy-1.7.10]# chmod 755 /etc/init.d/haproxy

     6)编辑配置文件/etc/haproxy/haproxy.cfg

 vim /etc/haproxy/haproxy.cfg

global
log 127.0.0.1 local3 info
chroot /var/lib/haproxy
user haproxy
group haproxy
pidfile /var/run/haproxy.pid
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000 #连接超时
timeout client 50000 #客户端超时
timeout server 50000 #服务器端超时

frontend www.desc.com
mode http
bind *:80
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Proxy\ Haproxy #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息
stats admin if TRUE #管理界面,如果认证成功了,可通过web管理节点
default_backend www.desc.com #定义一个名为www.desc.com前端部分。此处将对于的请求转发给后端

backend www.desc.com #定义一个名为www.desc.com后端部分
option httpchk GET /index.html
balance roundrobin #负载均衡算法
server web01 10.0.0.7:80 check inter 2000 rise 3 fall 3 weight 1 #定义的多个后端
server web02 10.0.0.8:80 check inter 2000 rise 3 fall 3 weight 2

     启动服务

[root@lib01 haproxy-1.7.10]# /etc/init.d/haproxy start
Starting haproxy (via systemctl):                          [  OK  ]

     通过web界面,查看状态信息

http://10.0.0.3/stats

haproxy keeplived haproxy keepalived lvs_vim

 

haproxy keeplived haproxy keepalived lvs_负载均衡_02

   7)开启日志

vim /etc/rsyslog.conf

$ModLoad imudp #取消注释
$UDPServerRun 514 #取消注释
local3.* /var/log/haproxy.log #最后一行添加local3的路径

[root@lib01 haproxy-1.7.10]# systemctl restart rsyslog.service
[root@lib01 haproxy-1.7.10]# touch /var/log/haproxy.log
[root@lib01 haproxy-1.7.10]# chown -R haproxy.haproxy /var/log/haproxy.log
[root@lib01 haproxy-1.7.10]# /etc/init.d/haproxy restart
Restarting haproxy (via systemctl): [ OK ]

     通过监控日志,可以看到haproxy已经启动成功

[root@lib01 haproxy-1.7.10]# tailf /var/log/haproxy.log 
Dec 10 09:37:39 localhost haproxy[1660]: Stopping frontend www.desc.com in 0 ms.
Dec 10 09:37:39 localhost haproxy[1660]: Stopping backend www.desc.com in 0 ms.
Dec 10 09:37:39 localhost haproxy[1660]: Proxy www.desc.com stopped (FE: 0 conns, BE: 0 conns).
Dec 10 09:37:39 localhost haproxy[1660]: Proxy www.desc.com stopped (FE: 0 conns, BE: 0 conns).
Dec 10 09:37:39 localhost haproxy[1692]: Proxy www.desc.com started.
Dec 10 09:37:39 localhost haproxy[1692]: Proxy www.desc.com started.

     通过测试,我们可以看到自动切换

haproxy keeplived haproxy keepalived lvs_vim_03

haproxy keeplived haproxy keepalived lvs_服务器_04

到此,web的负载均衡部署完成!

接下来开始部署高可用,lib02与lib配置一样,我们这一选择克隆lib02,

然后在两台机器上部署keepalived

1)安装keepalive

[root@lib01 ~]# yum -y install keepalived

2)编辑配置文件(lib01与lib02)

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
router_id lb01   #(lib02)
}
vrrp_script chk_haproxy {
        script "/etc/keepalived/chk_haproxy.sh"
        interval 4
        weight 60  
}
vrrp_instance VI_1 {
    state MASTER     #(BACKUP)
    interface eth0
    virtual_router_id 51
    priority 150  #(100)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 track_script {
        chk_haproxy
    }
    virtual_ipaddress {
        10.0.0.55
    }
}

3)主副添加监控脚本

vim /etc/keepalived/chk_haproxy.sh
#!/bin/sh
pid=/var/run/haproxy.pid
if [ -f $pid ];then
  exit 0
else
  exit 1
fi

chmod +x /etc/keepalived/chk_haproxy.sh

4)启动服务

systemctl start keepalived.service

/etc/init.d/haproxy restart

5)检查VIP

[root@lib01 ~]# ip a|grep 10.0.0.55
    inet 10.0.0.55/32 scope global eth0

通过查看到的VIP,说明我们部署成功

通过VIP能够访问我们haproxy的状态信息

haproxy keeplived haproxy keepalived lvs_负载均衡_05

6)模拟故障,先把lib01的haproxy停掉

/etc/init.d/haproxy stop

发现VIP已经漂移到lib02上,我们的服务能够正常访问

再把lib01上的haproxy启动

/etc/init.d/haproxy start

VIP又漂移回来,到此,已经实现keepalived+haproxy高可用负载均衡。