1.概述
Keepalived 是一个轻量级的高可用(High Availability, HA)解决方案,主要用于 Linux 系统。它通过实现 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议) 来提供服务的持续性和故障自动切换能力,从而避免单点故障。
一、Keepalived 的核心作用
实现高可用性:当主服务器宕机时,备用服务器能自动接管服务,对外表现为“无缝切换”。
IP 漂移(VIP 漂移):通过 VRRP 协议,在多个节点之间共享一个 虚拟 IP 地址(VIP)。正常情况下 VIP 绑定在主节点上;主节点故障后,VIP 自动漂移到备节点。
2.配置过程
准备两台服务器 192.168.2.17,192.168.2.26 ,vip ip 为 192.168.2.222,服务器为 ubuntu.
其中 17 为节点
2.1 安装 keepalived
sudo apt install -y keepalived
2.2 编辑 keepalived 配置
- 主节点配置
编辑主节点 的/etc/keepalived/keepalived.conf
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0.1 # 必须 > 0
vrrp_gna_interval 0.1 # 必须 > 0
enable_script_security # 允许执行 notify 脚本
script_user root
}
vrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 51
priority 200
advert_int 1
nopreempt
#authentication {
# auth_type PASS
# auth_pass 1111
#}
virtual_ipaddress {
192.168.2.222/24 brd 192.168.2.255 dev enp0s3 noprefixroute
}
notify_master "/etc/keepalived/send_garp.sh"
#
#notify_master "/etc/keepalived/add_vip.sh"
#notify_backup "/etc/keepalived/del_vip.sh"
}
这个 notify_master 的作用是 在节点成为主节点的时候,执行的脚本。
其中 send_garp.sh 内容为
#!/bin/bash
sleep 1
/usr/sbin/arping -U -c 3 -I enp0s3 192.168.2.222
- 从节点配置
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0.1 # 必须 > 0
vrrp_gna_interval 0.1 # 必须 > 0
enable_script_security # 允许执行 notify 脚本
script_user root
}
vrrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 51
priority 100
advert_int 1
nopreempt
#authentication {
# auth_type PASS
# auth_pass 1111
#}
virtual_ipaddress {
192.168.2.222/24 brd 192.168.2.255 dev enp0s3 noprefixroute
}
notify_master "/etc/keepalived/send_garp.sh"
}
2.2 验证漂移是否生效
我们可以启动节点和从节点
在主节点执行
ip addr show enp0s3
ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:ac:af:45 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.17/24 brd 192.168.2.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 192.168.2.222/24 brd 192.168.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
这里可以看到 vip 在主节点上
在从节点执行命令
ip addr show enp0s3
ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:1f:90:10 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.26/24 brd 192.168.2.255 scope global dynamic noprefixroute enp0s3
valid_lft 65444sec preferred_lft 65444sec
模拟 主节点宕机
在主节点执行命令
systemctl stop keepalived
我们可以看到从节点
ip addr show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:1f:90:10 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.26/24 brd 192.168.2.255 scope global dynamic noprefixroute enp0s3
valid_lft 64901sec preferred_lft 64901sec
inet 192.168.2.222/24 brd 192.168.2.255 scope global secondary noprefixroute enp0s3
valid_lft forever preferred_lft forever
vip 漂移到从节点,使用 ping 命令 测试,发现 222 可以联通。
2.3 当VIP漂移时,可以将 vip 节点的 tendis 设置为主节点
当VIP漂移时,可以将 vip 节点的 tendis 设置为主节点,从节点需要手动设置为 slaveof 主节点
激活为主节点的时候激活tendis
send_garp.sh
#!/bin/bash
cd /home/zhangyg/tendis/tendisplus/bin
./redis-cli -h 127.0.0.1 -p 6379 -a 1234 slaveof no one
主从节点的脚本都是一样的.
2.4 注意事项
在VIP漂移的时候,注意脚本是否执行,脚本是否有权限。
需要对脚本文件设置权限
chmod 750 send_garp.sh
重启 keepalived ,可以通过 journalctl -u keepalived -f 查看日志
浙公网安备 33010602011771号