Keepalived
Keepalived 是一个基于 VRRP 协议(Virtual Router Redundancy Protocol)的路由软件,用于为Linux系统(或者基于Linux内核的系统)提供负载均衡和高可用性功能。其负载均衡框架依赖于LVS(Linux Virtual Server)中的IPVS内核模块。
运行过程大致为:多台安装keepalived服务器共同虚拟出一个VIP(Virtual IP),客户端通过VIP进行访问。VIP会绑定在优先级最高的Master节点的网卡上。当Master节点出问题了,次优先级的节点会代替Master的位置,VIP会绑定到该节点的网卡上,这个过程称为IP漂移。
Example
准备两台机器(都安装上nginx):
KL1:172.28.128.3
KL2:172.28.128.4
分别安装Keepalived:
sudo yum install -y keepalived
安装完成后配置文件默认位置为/etc/keepalived/keepalived.conf
让KL1作为Master
,KL2作为Backup
,分别配置:
# KL1 keepalived.conf
vrrp_instance VI_1 {
state MASTER # keepalived角色,MASTER为主,BACKUP为备
interface eth1 # 参与虚拟的网卡
virtual_router_id 51 # 虚拟路由编号,主从需一致
priority 101 # 优先级
advert_int 1 # vrrp检查间隔,默认为1s
authentication { # 认证
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.28.128.100 # 虚拟的IP
}
}
# KL2 keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.28.128.100
}
}
重启服务:
sudo systemctl restart keepalived.service
查看KL1的网卡信息,多出一个虚拟ip
$ for i in $(seq 10); do curl 172.28.128.100;done
I am KL1
I am KL1
I am KL1
I am KL1
I am KL1
在客户端查看arp表,mac地址为KL1的eth1网卡物理地址:
$ arp -a
? (172.28.128.100) at 8:0:27:a2:14:57 on vboxnet2 ifscope [ethernet]
关闭KL1的keepalived.service,虚拟IP漂移到KL2:
此时KL2会发送一个arp广播,通知变更VIP的mac地址为自身的网卡地址,在客户端上再次查看arp表,mac地址已修改:
$ arp -a
? (172.28.128.100) at 8:0:27:d6:f0:df on vboxnet2 ifscope [ethernet]
for i in $(seq 5); do curl 172.28.128.100;done
I am KL2
I am KL2
I am KL2
I am KL2
I am KL2
Refs
https://www.keepalived.org/
https://github.com/acassen/keepalived
https://access.redhat.com/documentation/zh-tw/red_hat_enterprise_linux/7/html/load_balancer_administration/ch-lvs-overview-vsa