keepalived实现服务高可用
keepalived
一、keepalive的介绍:
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
二、keepalive的工作原理
工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是遑过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
三、keepalive的配置
实验准备四台虚拟机(两台DS两台RS)
两台DS端配置
yum -y install keepalived #安装keepalive
yum -y install ipvsadm #安装ipvsadm
yum -y install httpd #安装httpd
修改配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
}
}
# VRRP配置
vrrp_instance VI_1 {
state MASTER #角色类型MASTER|BACKUP
interface ens33 #网卡名称
virtual_router_id 51 #虚拟路由id(需要与BACKUP一致)
priority 100 #优先级
advert_int 1 #没1秒检查一次
#nopreempt #非抢占模式
authentication {
auth_type PASS #认证类型
auth_pass 1111 #认证密码
}
virtual_ipaddress {
192.168.88.250 #虚拟ip(vip)
}
}
#LVS配置
virtual_server 192.168.88.250 80 {
delay_loop 3 #健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
protocol TCP #协议
real_server 192.168.88.50 80 { #要监控的real_server的ip和端口号
weight 1 #权重
TCP_CHECK { #基于tcp协议的检查
connect_timeout 3 #连接时间超时
retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
}
}
real_server 192.168.88.51 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
DS1配置(192.168.88.49)
#启服务
systemctl start keepalived.service
systemctl start ipvsadm.service
systemctl start httpd.service
ifconfig ens33:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up
route add -host 192.168.88.250 dev ens33
DS2配置(192.168.88.48)
#启服务
systemctl start keepalived.service
systemctl start ipvsadm.service
systemctl start httpd.service
ifconfig ens33:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up
route add -host 192.168.88.250 dev ens33:0
RS1配置(192.168.88.50)
yum -y install httpd
systemctl start httpd.service
ifconfig lo:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up
route add -host 192.168.88.250 dev lo:0
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
RS2配置(192.168.88.51)
yum -y install httpd
systemctl start httpd.service
ifconfig lo:0 192.168.88.250 broadcast 192.168.88.250 netmask 255.255.255.255 up
route add -host 192.168.88.250 dev lo:0
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
四、测试(DS1主,DS2辅)
1、DS1在线
在windows命令行测试
在DS1上查看状态
2、关闭DS1keepalive服务
DS1日志
DS2日志
继续在windows命令行测试(服务还在运行,说明DS2接管了DS1服务)
再DS2查看状态
3、当DS1主服务又开启的时候,服务没断,DS1重新接管了服务
4、线上服务器不能让主辅服务器来回切换,所以要把抢占模式打开,主的优先级大于辅的优先级,这样主服务宕机的时候辅服务才能接管。
例子如下:
DS1 vim /etc/keepalived/keepalived.conf
priority 100 #优先级
#nopreempt #非抢占模式
DS2 vim /etc/keepalived/keepalived.conf
停掉DS1服务 DS2接管了
重新启动DS1服务,这次DS1没有服务,还是DS2在接管服务,测试:
DS1
DS2