keepalived+haproxy实现高可用负载均衡
前言:
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
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.
通过测试,我们可以看到自动切换
到此,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的状态信息
6)模拟故障,先把lib01的haproxy停掉
/etc/init.d/haproxy stop
发现VIP已经漂移到lib02上,我们的服务能够正常访问
再把lib01上的haproxy启动
/etc/init.d/haproxy start
VIP又漂移回来,到此,已经实现keepalived+haproxy高可用负载均衡。