一、Keepalived简介
Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
二、keepalived的三个功能
- 管理LVS负载均衡软件
- 实现LVS集群节点的健康检查
- 作为系统网络服务的高可用性(failover)
三、Keepalived的工作原理
Keepalived高可用是通过 VRRP 进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
在 Keepalived 服务之间,只有作为主的服务器会一直发送 VRRP 广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
四、Keepalived配置实例
1、初始配置
##关闭防火墙
[root@chicken ~]# systemctl disable firewalld --now
##关闭Selinux
[root@chicken ~]# setenforce 0
2、两台调度节点配置并安装
[root@chicken ~]# yum -y install ipvsadm keepalived
3、修改配置文件
[root@chicken ~]# vim /etc/keepalived/keepalived.conf ##配置文件路径
Node1 配置内容
vrrp_instance VI_1 {
state MASTER 角色 MASTER BACKUP
interface eth0 本地网卡 ens32
virtual_router_id 51 VRRP组号
priority 100 优先级
advert_int 1 VRRP传递时间 1s
authentication { VRRP认证
auth_type PASS 类型密码
auth_pass 1111 密码
}
Node2 配置内容
vrrp_instance VI_1 {
state BACKUP 角色 MASTER BACKUP
interface eth0 本地网卡 ens32
virtual_router_id 51 VRRP组号
priority 90 优先级
advert_int 1 VRRP传递时间 1s
authentication { VRRP认证
auth_type PASS 类型密码
auth_pass 1111 密码
}
virtual_ipaddress { 虚拟IP,VIP,漂移地址
192.168.160.200
}
}
##重启服务
[root@chicken ~]# systemctl restart keepalived.service
验证虚拟IP交换
node1和node2查看虚拟IP
node1关闭keepalived服务
[root@chicken ~]# systemctl stop keepalived.service
查看node2虚拟IP
WEB节点配置服务及站点
[root@chicken network-scripts]# yum -y install httpd
##在web1服务上配置
[root@chicken network-scripts]# echo "<h1>web1.aaaaaaaa</h1>" > /var/www/html/index.html
##在web2服务上配置
[root@chicken network-scripts]# echo "<h1>web2.bbbbbbbb</h1>" > /var/www/html/index.html
关联后端web节点,并配置节点切换策略
[root@chicken ~]# vim /etc/keepalived/keepalived.conf
virtual_server 192.168.200.100 80 {
delay_loop 6
lb_algo rr 轮询方式
lb_kind NAT LVS模式 NAT DR TUN
persistence_timeout 50 超时时间50s
protocol TCP 协议TCP
节点服务器1
real_server 192.168.160.53 80 {
weight 1 轮询权重
CHECK { 开启检测
connect_port 80 链接端口
connect_timeout 3 链接超时3s
nb_get_retry 3 重试次数
delay_before_retry 3 重试间隔时间3s
}
}
节点服务器2
real_server 192.168.160.54 80 {
weight 1
CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
##重启服务
[root@chicken ~]# systemctl restart keepalived.service
LVS调度节点配置
[root@chicken ~]# ipvsadm > /etc/sysconfig/ipvsadm
[root@chicken ~]# ipvsadm -a -t 192.168.223.100:80 -r 192.168.223.125:80 -g -w 1
[root@chicken ~]# ipvsadm -a -t 192.168.223.100:80 -r 192.168.223.126:80 -g -w 1
[root@chicken ~]# systemctl restart ipvsadm.service
[root@chicken ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.223.100:80 rr
-> 192.168.223.125:80 Route 1 0 0
-> 192.168.223.126:80 Route 1 0 0
web节点配置
[root@chicken ~]# cd /etc/sysconfig/network-scripts/
[root@chicken network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@chicken network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.223.100
NETMASK=255.255.255.255
ONBOOT=yes
NAME=lo:0
##重启network服务
[root@chicken network-scripts]# systemctl restart network
验证WEB节点切换测试
访问WEB1
访问WEB2
访问虚拟IP