Keepalived 多主模型与 LVS 高可用
一.Keepalived多主模型
Keepalived多主模型概念
如上图,keepalived主从架构性能损耗较严重,如果业务分类明确,则可以配置keepalived多主模型降低损耗,两台keepalived互为主备,如:订单业务走keepalived1,keepalived2做备,商品业务走keepalived2,keepalived1做备。也就是keepalived1和keepalived2各拿一份vip
Keepalived多主模型配置
keepalived1订单业务:
vrrp_instance VI_2 {
state BACKUP #设置为BACKUP
interface ens33
virtual_router_id 55
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 111156
}
virtual_ipaddress {
192.168.80.40/24
192.168.80.41/24
192.168.80.42/24
}
notify_master "/root/sendemail.sh master"
notify_backup "/root/sendemail.sh backup"
notify_fault "/root/sendemail.sh fault"
}
keepalived1商品业务:
vrrp_instance VI_1 {
state MASTER #设置为MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.50/24
192.168.80.51/24
192.168.80.52/24
}
notify_master "/root/sendemail.sh master"
notify_backup "/root/sendemail.sh backup"
notify_fault "/root/sendemail.sh fault"
}
keepalived2订单业务:
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 55
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 111156
}
virtual_ipaddress {
192.168.80.40/24
192.168.80.41/24
192.168.80.42/24
}
notify_master "/root/sendemail.sh master"
notify_backup "/root/sendemail.sh backup"
notify_fault "/root/sendemail.sh fault"
}
keepalived2商品业务:
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.50/24
192.168.80.51/24
192.168.80.52/24
}
notify_master "/root/sendemail.sh master"
notify_backup "/root/sendemail.sh backup"
notify_fault "/root/sendemail.sh fault"
}
验证
如上图,keepalived是商品业务的主节点,拿到商品业务的vip,keepalived2是订单业务的主节点,拿到订单业务的vip,并且互为主备。
如果此时一个keepalived坏了,另一个keepalived将拥有两个业务的vip
二.实现IPVS 高可用
在分布式系统架构中,高可用性设计始终是核心命题。当我们使用 Keepalived 实现 VIP 飘移时,本质上只是解决了 IP 层的可用性问题,这就像为建筑搭建了稳固的地基,但要让大楼真正运转起来,还需要在服务层构建完整的容错机制。LVS(Linux Virtual Server)正是实现这一目标的关键组件,它与 Keepalived 的 VRRP 协议形成了完美的能力互补。
虚拟服务器配置
virtual_server IP port { # 定义虚拟服务器,指定监听的IP和端口
delay_loop<INT> # 健康检查的时间间隔(单位:秒)
lib_algo rr|wr1|cln1c|lib|cln1dh # 负载均衡算法(rr=轮询,wr1=加权轮询,cln1c=最少连接,cln1dh=目标地址哈希)
lib_kind NAT|ON|TUN # 数据包转发模式(NAT=网络地址转换,TUN=隧道模式,ON=直接路由)
persistence_timeout <INT> # 会话保持时间(单位:秒,0表示不启用)
protocol TCP|USIP|SCTP # 协议类型(TCP/USIP[UDP]/SCTP)
sorry_server <IPADDR> <PORT> # 备用服务器地址,当所有真实服务器宕机时启用
real_server <IPADDR> <PORT> { # 定义真实服务器(后端节点)
weight <INT> # 服务器权重(权重越高分配的请求越多)
notify_up <STRING> # 服务器上线时触发的脚本/命令
notify_down <STRING> # 服务器下线时触发的脚本/命令
# 健康检查方法(只能选其一):
HTTP_GET|SSL_GET { # HTTP/HTTPS 检查(需配置具体URL和状态码)
url { path <PATH> } # 示例:url { path "/health" status_code 200 }
}
TCP_CHECK { ... } # TCP端口检查(默认检测端口连通性)
SNTP_CHECK { ... } # SNTP协议检查(用于时间服务器)
MISC_CHECK { ... } # 自定义脚本检查(需指定外部脚本路径)
}
}
例如:
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 {
192.168.1.100
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.1.101 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
该配置展示了
-
VRRP 实现 VIP(192.168.1.100) 的飘移
-
LVS 使用 DR 模式进行流量分发
-
基于 TCP 连接的健康检查机制
-
权重为 3 的服务器优先级设置
当某台真实服务器不可达时,LVS 会自动将其移出服务池,同时 Keepalived 通过 VRRP 协议维护 VIP 的可用性,形成双重保障机制。