惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
人人都是产品经理
人人都是产品经理
罗磊的独立博客
博客园 - 聂微东
雷峰网
雷峰网
量子位
美团技术团队
V
V2EX
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
The Cloudflare Blog
爱范儿
爱范儿
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Jina AI
Jina AI

博客园 - 自由港

postgres 支持全文索引 查看 milvus 中的数据 查询数据库锁死情况 部署tendis IDEA 运行 main 方法导致整个项目 install 自定义classloader hive 基础操作 在 服务器部署 seatunnel web服务 使用 seatunnel web 设计一个数据同步 如何 运行 seatunnel web 开发版 使用 seatunnel 实现数据同步 avro 数据入门 NIFI国际化 使用 NIFI读取EXCEL 数据到数据库 NIFI 使用HTTP 作为数据源接收数据 使用NIFI 同步数据库表 使用 NIFI监控数据库表 切换JDK NIFI实现配置分发
使用 keepalived 实现 tendis 高可用
自由港 · 2025-11-24 · via 博客园 - 自由港

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 查看日志