loong博客

哨兵模式下Redis如何升级?

目录

  • Redis安装
  • 哨兵模式如何配置
  • 哨兵模式下Redis升级

Redis安装

1、下载源码解压

wget https://download.redis.io/releases/redis-7.4.6.tar.gz

tar -zxvf redis-7.4.6.tar.gz

2、安装编译环境

yum groupinstall "Development Tools"

3、进入src目录,指定安装路径

make PREFIX=/usr/local/redis install

4、创建systemctl服务配置文件

[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

5、刷新配置

systemctl daemon-reload

6、开机启动

systemctl enable redis

yum groupinstall “Development Tools”

yum:Red Hat系列发行版的包管理工具,用于自动从配置的软件仓库中搜索、下载、安装、更新和删除软件包,并自动处理依赖关系。 groupinstall:yum的一个子命令,意思是“组安装”。它不是安装单个软件包,而是安装一个预先定义好的一组相关的软件包。 Development Tools:这是软件包组的名称。这个组包含了进行软件编译和开发所需的一系列核心工具。

Development Tools 软件包组通常包含以下核心组件(具体可能因发行版版本略有差异): gcc:GNU C编译器,用于编译C语言程序。 g++/gcc-c++:GNU C++编译器,用于编译C++程序。 make:自动化构建工具,用于根据Makefile文件来指挥编译过程。 autoconf, automake:用于生成可移植的configure脚本,让软件能适应不同的Unix-like系统。 binutils:一系列二进制工具集,如链接器ld、汇编器as等。 kernel-devel:内核开发头文件,用于编译内核模块。 cmake, ncurses-devel, zlib-devel, openssl-devel 等大量常用的开发库和头文件。

哨兵模式配置

1、主节点配置

  • redis配置
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。  
bind 0.0.0.0

# 修改redis监听端口 
port 6379
  
# 允许redis后台运行  
daemonize yes
  
# 设置为no,允许外部网络访问  
protected-mode no

# 防止Sentinel彼此不识别(强烈建议)
replica-announce-ip 192.168.200.113
replica-announce-port 6379

  • sentinel配置
# 修改Sentinel监听端口
port 26379 
  
# 允许Sentinel后台运行
daemonize yes
  
# Sentinel监听redis主节点。2表示多少个Sentinel认为redis主节点失效时,才算真正失效
sentinel monitor mymaster 192.168.200.113 6379 2
  
# 配置失效时间,如果哨兵在10秒内没有收到主节点的有效响应,就将其标记为主观下线  
sentinel down-after-milliseconds mymaster 10000
  
# 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。  
sentinel failover-timeout mymaster 60000  
  
# 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。  
sentinel parallel-syncs mymaster 1

2、从节点配置

  • redis配置
# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。  
bind 0.0.0.0

# 修改redis监听端口 
port 6379
  
# 允许redis后台运行  
daemonize yes
  
# 设置为no,允许外部网络访问  
protected-mode no

# 防止Sentinel彼此不识别(强烈建议)
replica-announce-ip 192.168.200.114
replica-announce-port 6379

# 配置从节点复制主节点(从节点)
replicaof 192.168.200.113 6379
replica-read-only yes
  • sentinel配置
# 修改Sentinel监听端口
port 26379 
  
# 允许Sentinel后台运行
daemonize yes
  
# Sentinel监听redis主节点。2表示多少个Sentinel认为redis主节点失效时,才算真正失效
sentinel monitor mymaster 192.168.200.113 6379 2
  
# 配置失效时间,如果哨兵在10秒内没有收到主节点的有效响应,就将其标记为主观下线  
sentinel down-after-milliseconds mymaster 10000 
  
# 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。  
sentinel failover-timeout mymaster 60000
  
# 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。  
sentinel parallel-syncs mymaster 1

3、启动redis服务及哨兵

redis-server /etc/redis/redis.conf

redis-sentinel /etc/redis/sentinel.conf

Redis升级

1、升级前准备

  • 确认当前环境信息

    哨兵数量(至少3个)

    主从关系(info replication)

    哨兵配置(sentinel masters)

  • 备份数据

    执行bgsave手动触发RDB持久化

    确认AOF和RDB文件已备份至安全位置

  • 准备升级包

    下载目标版本Redis安装文件

    准备回退用的旧版本安装文件

2、升级方案

  • 方案原则

    逐个升级从节点,最后升级主节点

    通过哨兵自动完成主从切换,尽量减少业务中断

    保持多数哨兵节点存活以维持监控

  • 详细步骤

    阶段1:升级所有从节点

        # 1. 选择第一个从节点,停止服务
        redis-cli -p 6379 shutdown save
    
        # 2. 替换安装文件
        cp redis-server /usr/local/redis/redis-server
    
        # 3. 启动从节点
        redis-server /etc/redis/redis.conf
    
        # 4. 验证从节点状态,确认角色为slave,且与主节点同步正常
        redis-cli -p 6379 info replication
    
        # 5. 重复升级其他从节点
    

    主从复制验证

    阶段2:升级主节点

        # 1. 通过哨兵触发主节点故障转移
        redis-cli -p 26379 sentinel failover mymaster
    
        # 2. 等待哨兵选举出新主节点
        redis-cli -p 26379 sentinel masters
    
        # 3. 确认原主节点已降级为从节点
        redis-cli -p 6379 info replication
    
        # 4. 停止原主节点(现为从节点),进行升级
        redis-cli -p 6379 shutdown save
    
        # 5. 替换安装文件
        cp redis-server /usr/local/redis/redis-server
    
        # 6. 启动从节点
        redis-server /etc/redis/redis.conf
    
        # 7. 验证新主从拓扑
        redis-cli -p 26379 sentinel masters
    

    主从拓扑

    阶段3:升级哨兵进程

        # 1. 逐个升级哨兵节点(每次一个)
        redis-cli -p <sentinel-port> shutdown
    
        # 2. 替换哨兵安装文件
        cp redis-sentinel /usr/local/redis/redis-sentinel
    
        # 3. 启动哨兵
        redis-sentinel /etc/redis/sentinel.conf
    
        # 4. 验证哨兵状态
        redis-cli -p 26379 sentinel masters
    

    阶段4:升级后验证

        # 哨兵状态验证
        redis-cli -p 26379 sentinel sentinels mymaster
        redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
        
        # 故障转移测试
        redis-cli -p 26379 sentinel failover mymaster
    

    故障转移