keepalived是集群管理中保证集群高可用的一个服务软件(防止单点故障)。
它能够保证当个别节点宕机时,整个网络可以不间断地运行,所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
keepalived工作原理:
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
配置准备:(已经配置完毕的DR模式的LVS)
四台rhel7.3版本的虚拟机
server1:ip为172.25.11.1 作为lvs调度服务器DS
server2:ip为172.25.11.2 作为后端服务器RS
server3:ip为172.25.11.3 作为后端服务器RS
server4:ip为172.25.11.4 作为高可用,并配置高可用yum源
并给四台虚拟机添加vip:172.25.11.100
keepallived相关的rpm包,可自行官网下载
在server1与server4上分别解压keepalived并编译安装:
tar zxf keepalived-2.0.6.tar.gz
yum install gcc openssl-devel -y
cd keepalived-2.0.6
./configure --prefix=/usr/local/keepalived --with-init=systemd
make &&make install
配置启动配置文件 #调度器(server1和server4)都进行相同操作:
ln -s /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig ##配置文件,脚本都做成软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
关闭ldirectord(因为keepalived也有健康检查)
删除之前临时添加的VIP(因为keepalived会自己加上)
systemctl stop ldirectord
systemctl disable ldirectord
ip addr del 172.25.11.100/24 dev eth0
配置keepalived:
编写主节点server1的配置文件
cd /etc/keepalived
vim keepalived.conf
编写如下:
global_defs {
notification_email {
root@localhost ##节点宕机给谁发送邮件
}
notification_email_from keepalived@localhost ##发送人名称
smtp_server 127.0.0.1 ##发送服务器(本机)
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict ##注释掉,不然会有问题
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER ##主节点
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.11.100 ##VIP
}
}
virtual_server 172.25.11.100 80 {
delay_loop 3 ##当rs报错时,尝试多少次之后才邮件告知
lb_algo rr
lb_kind DR ##DR模式
#persistence_timeout 50
protocol TCP
real_server 172.25.11.2 80 {
TCP_CHECK {
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.11.3 80 {
TCP_CHECK {
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
编写备节点server4的配置文件:
可将server1的配置文件复制过来进行修改
cd /etc/keepalived
vim keepalived.conf
修改如下:
state BACKUP
priority 50 ##修改这两个选项
启动两个节点的server1和server4的keepalived
systemctl start keepalived
systemctl enable keepalived
查看server1和server4的规则:
测试:
在物理机上访问:curl 172.25.11.100
可以看到轮询
关闭server2的http服务,再次在物理机上访问(可能稍有延迟),也不会报错
ipvsadm策略里也会把down掉的那台rs自动剔除
mail可以看到会有邮件告知哪台的down了(没有mail命令的话,yum install -y mailx)
down掉server(主节点)的keepalived服务
可以看到VIP会自动去掉,然后会漂移到server4上
服务正常访问,看日志可以看到VIP和主备切换的信息
server1再次开启keepalived,会自动接管VIP,并进入MASTER状态