lvs+keepalived实现负载集群高可用架构
keepalived工作原理和配置说明
keepalived是什么
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个 backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当 backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台
VRRP是一种路由容错协议,也可以叫做备份路由协议
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议
服务环境搭建
实验主机环境介绍:
主机使用版本 : redhat rhe6.5
iptables stop 以及 selinux disablesl
主机ip :172.25.254.79
MASTER: wyx1 :172.25.79.1
Realserver1 :wyx2 : 172.25.79.2 vip 172.25.79.111 (仅对同一WLAN用户开放)
Realserver1 :wyx3: 172.25.79.3 vip 172.25.79.111 (仅对同一WLAN用户开放)
BACKUP : wyx4 :172.25.79.4
wyx1 配置
下载keepalived安装包并进行减压
root@wyx1 /]# tar zxf keepalived-2.0.6.tar.gz
[root@wyx1 /]# cd /keepalived-2.0.6(必须在此目录中,才能进行如下操作)
安装 openssl-devel
[root@wyx1 ~]# yum install -y openssl-devel
编译软件
[root@wyx1 keepalived-2.0.6]# ./configure --with-init=SYSV
[root@wyx1 keepalived-2.0.6]# ./configure --with-init=SYSV --prefix=/usr/local/keepalived
[root@foundation79 Desktop]# make&&make install
设置权限
[root@wyx1 keepalived-2.0.6]# chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
设置软链接
[root@wyx1 init.d]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/
[root@wyx1 init.d]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/
[root@wyx1 init.d]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@wyx1 init.d]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
设置开机自启
[root@wyx1 keepalived-2.0.6]# chkconfig keepalived on
[root@wyx1 keepalived-2.0.6]# chkconfig keepalived --list
keepalived 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@wyx1 keepalived-2.0.6]# /etc/init.d/keepalived start
Starting keepalived:
查看进程 。开启keepalived 服务后会开启3个进程
[root@wyx1 keepalived-2.0.6]# ps -ef |grep keepalived
root 932 1 0 21:41 ? 00:00:00 keepalived -D 父进程:内存管理,子进程管理等等
root 935 932 0 21:41 ? 00:00:00 keepalived -D 子进程:VRRP子进程
root 936 932 0 21:41 ? 00:00:00 keepalived -D 子进程:healthchecker子进程
配置keepalived 文件
global_defs { ##全局定义
notification_email { ##邮件
root@localhost
}
##notification_email指定keepalived在发生事件(切换),需要发送email到的对象。可以有多个,每行一个
##指定keepalived在发送事件(切换),需要发送email到的对象。可以有多个。在下添加
notification_email_from keepalived@localhost
smtp_server 127.0.0.1 ##指定发送email的smtp服务器
smtp_connect_timeout 30 ##指定时间为30秒
router_id LVS_DEVEL ##负载均衡标示
}
vrrp_instance示例配置
主要定义vrrp_sync_group里面的每个组的漂移 IP等
vrrp_instance VI_1 {
state MASTER ##指定instance的初始化状态,当2台装有keepalived的机子开启时,会发生竞争,master 为主backup为辅
interface eth0 ##绑定的网卡
virtual_router_id 51 ##vrid 标示
priority 100 ##prioity等级为100,master要比backup高最少50
advert_int 1 ##检查间隔,默认1S
authentication { ##设置认证
auth_type PASS ##认证方式为PASS或者AH
auth_pass 1111 ## 认真的密码
}
virtual_ipaddress {
172.25.79.111 ##指定飘逸地址,
}
}
虚拟服务块配置
virtual server IP port
virtual_server 172.25.79.111 80 { ##服务vip以及服务端口
delay_loop 6 ##延时时间
lb_algo rr ##lvs调度算法 为轮询
lb_kind DR ##lvs的集群模式为DR
#persistence_timeout 50 ##会话保持时间
protocol TCP ##所用协议为TCP
real_server 172.25.79.2 80 {
weight 1 ##默认为1,0为失效
TCP_CHECK { ##tcp方式的健康检查
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.79.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
wyx4与wxy1 类似
只需要改变
vrrp_instance VI_1 {
state BACKUP ##指定instance的初始化状态,当2台装有keepalived的机子开启时,会发生竞争,master 为主backup为辅
interface eth0 ##绑定的网卡
virtual_router_id 51 ##vrid 标示
priority 50 ##prioity等级为100,master要比backup高最少50
advert_int 1 ##检查间隔,默认1S
authentication { ##设置认证
auth_type PASS ##认证方式为PASS或者AH
auth_pass 1111 ## 认真的密码
}
virtual_ipaddress {
172.25.79.111 ##指定飘逸地址,
}
}
WYX2 配置
安装http服务
[root@wyx2 ~]# yum install httpd -y
编辑默认发布目录
[root@wyx2 ~]# cat /var/www/html/index.html
<h1>www.wyx.org: wyx2</h1>
启动http服务
[root@wyx2 ~]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.79.2 for ServerName
[ OK ]
添加vip
[root@wyx2 ~]# ip addr add 172.25.79.111/24 dev eth0
[root@wyx2 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:77:c2:f5 brd ff:ff:ff:ff:ff:ff
inet 172.25.79.2/24 brd 172.25.79.255 scope global eth0
inet 172.25.79.111/24 scope global secondary eth0
inet6 fe80::5054:ff:fe77:c2f5/64 scope link
valid_lft forever preferred_lft forever
对外隐藏vip
[root@wyx2 ~]# arptables -A IN -d 172.25.79.111 -j DROP
[root@wyx2 ~]# arptables -A OUT -s 172.25.79.111 -j mangle --mangle-ip-s 172.25.79.2
保存修改
[root@wyx2 ~]# /etc/init.d/arptables_jf save
wyx 3与wyx2类似
只需要更改http的默认发目录内容
安装http服务
[root@wyx3 ~]# yum install httpd -y
编辑默认发布目录
[root@wyx3 ~]# cat /var/www/html/index.html
<h1>www.wyx.org: wyx3</h1>
测试
wyx1 MAC: 52:54:00:d7:33:0f
wyx2 MAC: 52:54:00:77:c2:f5
wyx3 MAC: 52:54:00:e6:31:59
wyx4 MAC: 52:54:00:0f:0c:31
负载均衡及健康检测测试
[root@foundation79 Desktop]# for i in {1..10};do curl 172.25.79.111;done
当关闭 wyx2 上的http服务时
如下图该服务健康检测到wyx2http已经停止则不输出wyx2,之间输入wyx3的http默认发布目录
高可用测试:
主备机器都开启时:
由图得,对比MAC地址发现此时发挥作用的是主机wyx1
此时wyx1的ip情况为
vdip已经自动添加
备机wyx4
vdip没有添加
当主机wxy1的keepalived停止
由图得,对比MAC地址发现此时发挥作用的是备机wyx4
查看主机wyx1的ip
刚才的vdip已经不存在
查看备机wyx4的ip
发现vdip已经添加
总结:lvs+keepalived可以实现对于服务的负载均衡以及健康检查 和 高可用