redis+keepalived实现双机热备

Redis 虽然提供了哨兵(Sentinel)模式实现高可用,但本方案需要通过 VIP(虚拟IP)漂移 来决定当前的主节点,即 VIP 漂移到哪台服务器,哪台服务器即对外提供主服务。因此本方案采用 Redis + Keepalived 的方式实现双机热备:通过 Keepalived 管理 VIP 的漂移,当主节点发生故障时,VIP 自动切换到备用节点,使其接管主服务,从而保证服务的高可用性。

此操作默认两台服务器中 redis 和keepalived 完成初始化安装

服务器A:192.168.239.170

服务器B:192.168.239.180

1、配置redis

  • 报错recis.conf包含以下配置
shell 复制代码
# 指定redis监听的IP地址(0.0.0.0表示监听所有网卡)
bind 0.0.0.0
# 指定redis监听端口(默认为6379,可不改)
port 16379
# 设置 Redis 访问密码
requirepass 123456
# 主从复制认证密码(即该节点为从节点时,需要复制的主节点的密码)
masterauth 123456
# 开启 AOF 持久化
appendonly yes
  • 若服务器开启了防火墙,需对 redis 放行
shell 复制代码
firewall-cmd --zone=public --add-port=16379/tcp --permanent
firewall-cmd --reload
  • 两台服务器均按上述配置后,重启redis

    systemctl restart redis

2、配置keepalived

  • 备份原配置文件
shell 复制代码
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
  • 创建配置文件
shell 复制代码
vi /etc/keepalived/keepalived.conf
  • 插入如下基础配置
    • 按照注释说明修改为自己需要的配置
    • 此处主、备服务器的初始状态均设为 BACKUP,实际 MASTER 由 priority 决定
    • 建议主服务器priority设为100,备服务器priority设为90
shell 复制代码
# 定义一个 VRRP 实例
vrrp_instance VI_1 {

    # 初始状态为 BACKUP
    # 实际 MASTER 由 priority 决定
    state BACKUP

    # 绑定的网卡
    interface ens33

    # VRRP 路由ID
    # 同一组高可用节点必须一致
    virtual_router_id 51

    # 节点优先级
    # 数值越大越容易成为 MASTER
    priority 100

    # VRRP 心跳发送间隔(秒)
    advert_int 1

    # 不抢占模式
    # MASTER 恢复后不会自动抢回 VIP
    nopreempt

    # VRRP 认证配置
    authentication {

        # 认证方式
        auth_type PASS

        # 认证密码
        # 主备必须一致
        auth_pass 1111
    }

    # 配置虚拟IP(VIP)
    # MASTER 节点会绑定这个IP
    virtual_ipaddress {
        192.168.239.200
    }

    # 当节点变为 MASTER 时执行脚本
    # 通常用于启动 lsyncd
    notify_master "/etc/keepalived/master.sh"

    # 当节点变为 BACKUP 时执行脚本
    # 通常用于停止 lsyncd
    notify_backup "/etc/keepalived/backup.sh"

    # keepalived 服务停止时执行脚本
    # 防止 lsyncd 残留运行
    notify_stop "/etc/keepalived/backup.sh"
}
  • 创建节点变为 MASTER 时执行脚本
shell 复制代码
vi /etc/keepalived/master.conf
  • 插入如下内容
shell 复制代码
#!/bin/bash
redis-cli -p 16379 -a 123456 SLAVEOF NO ONE
  • 创建节点变为 BACKUP 或 keepalived 服务停止时执行脚本
shell 复制代码
vi /etc/keepalived/backup.conf
  • 插入如下内容
shell 复制代码
#!/bin/bash
redis-cli -p 16379 -a 123456 SLAVEOF 192.168.239.200 16379
  • 赋予上述脚本执行权限
shell 复制代码
chmod +x /etc/keepalived/*.sh
  • 设置开机自启
shell 复制代码
systemctl enable keepalived
  • 启动keepalived
shell 复制代码
systemctl start keepalived
  • 若服务器开启了防火墙,需对vrrp放行
shell 复制代码
firewall-cmd --permanent --add-protocol=vrrp
firewall-cmd --reload
  • 在主、备服务器均按上述流程安装并启用keepalived
  • 通过使用以下命令查看主服务器是否存在VIP
shell 复制代码
ip addr
  • 停止主服务器的keepalived服务后,VIP会飘移至备服务器,且主服务器的redis变为从节点,备服务器的redis变为主节点

3、测试用例

  • 在取得VIP的服务器中进入redis-cli
shell 复制代码
redis-cli -p 16379 -a 123456
  • 查看当前 Redis 实例的主从复制状态信息
    • role:表示当前 Redis 的角色(master-主节点)

    • connected_slaves:当前主库连接的从库数量

    • slave0 / slave1:每个从节点的信息

      info replication

  • 在另一台服务器中进入redis-cli
shell 复制代码
redis-cli -p 16379 -a 123456
  • 查看当前 Redis 实例的主从复制状态信息
    • role:表示当前 Redis 的角色(slave-从节点)

    • master_host:主节点IP

    • master_port:主节点端口

    • master_link_status:主从连接状态

      info replication

  • 以上显示表示主从连接成功

  • 在主节点存入测试数据

    set ha_test ok

  • 在从节点查看是否有同步

    get ha_test

  • 将存在VIP的服务器重启 keepalived 服务,模拟主节点故障后恢复
shell 复制代码
systemctl restart keepalived
  • 查看 Redis 实例的主从复制状态信息是否发生变更,即主节点变更为从节点,从节点变更为主节点
  • 在新主节点中插入测试信息,看新从节点能否同步到数据,如果能同步,即表示配置成功

至此,redis+keepalived对主备双机文件热备配置完成

相关推荐
__土块__9 小时前
一次会员积分系统改造复盘:从本地缓存到多级缓存的架构演进
redis·性能优化·系统架构·caffeine·多级缓存·缓存一致性·本地缓存
yhole10 小时前
redis连接服务
数据库·redis·bootstrap
OtIo TALL10 小时前
Redis 6.2.7安装配置
前端·数据库·redis
四谎真好看10 小时前
Redis学习笔记(实战篇5 + 高级篇)
redis·笔记·学习·学习笔记
希望永不加班11 小时前
SpringBoot 整合 Redis 缓存
spring boot·redis·后端·缓存·wpf
zz-zjx11 小时前
redis手动安装主从+哨兵
数据库·redis·缓存
阿杜杜不是阿木木11 小时前
authentik开源身份认证与管理平台-介绍与安装(1)
数据库·redis·开源·authing·sso·authentik
of Watermelon League12 小时前
Redis 通用命令
前端·redis·bootstrap
会飞的大可21 小时前
Redis Sentinel 高可用方案在WMS仓储管理系统的应用
redis·sentinel