当前位置: 首页 > news >正文

Redis 部署、主从复制与哨兵模式配置​

一.Redis简介

Redis 是一个基于内存的键值数据库,核心优势是性能极高和数据结构丰富。

主要用途是缓存,用来存放热点数据,减轻数据库压力,提升应用响应速度。此外也常用于会话存储、分布式锁、排行榜和简单消息队列。

它和 MySQL 这类关系型数据库是互补关系:Redis 负责高性能读写和缓存,处理内存中的临时数据;MySQL 负责持久化存储和复杂查询,存储核心业务数据。两者结合是现代高并发系统的常见架构。

二.Redis部署与安装

1. 安装依赖

安装编译Redis所需的工具,如编译器和系统管理脚本工具

[root@redis-node1 ~]# dnf install make gcc initscripts -y

2. 源码编译redis

从官方源下载Redis源码包

[root@redis-node1 ~]# wget https://download.redis.io/releases/redis-7.4.8.tar.gz # 解压下载的源码包 [root@redis-node1 ~]# tar zxf redis-7.4.8.tar.gz # 进入解压后的源码目录 [root@redis-node1 ~]# cd redis-7.4.8/ [root@redis-node1 redis-7.4.8]# # 执行编译和安装命令 [root@redis-node1 redis-7.4.8]# make && make install # 进入Redis的实用工具目录 [root@redis-node1 redis-7.4.8]# cd utils/ # 编辑安装脚本,注释掉检查systemd的代码块,使其能在使用systemd的系统上继续执行 [root@redis-node1 utils]# vim install_server.sh #bail if this system is managed by systemd #_pid_1_exe="$(readlink -f /proc/1/exe)" #if [ "${_pid_1_exe##*/}" = systemd ] #then # echo "This systems seems to use systemd." # echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!" # exit 1 #fi Ctrl + v # 进入块选择模式 选择要注释的行 Shift + i # 进入插入模式 输入注释符(如 // 或 #) Esc # 应用到所有行 # 运行Redis服务安装脚本 [root@redis-node1 utils]# ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server # 交互式配置过程:设置端口、配置文件、日志文件、数据目录和可执行文件路径 Please select the redis port for this instance: [6379] Selecting default: 6379 #修改配置文件 Please select the redis config file name [/etc/redis/6379.conf] Please select the redis log file name [/var/log/redis_6379.log] Selected default - /var/log/redis_6379.log Please select the data directory for this instance [/var/lib/redis/6379] Selected default - /var/lib/redis/6379 Please select the redis executable path [/usr/local/bin/redis-server] Selected config: Port : 6379 Config file : /etc/redis/6379.conf Log file : /var/log/redis_6379.log Data dir : /var/lib/redis/6379 Executable : /usr/local/bin/redis-server Cli Executable : /usr/local/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... Successfully added to chkconfig! Successfully added to runlevels 345! Starting Redis server... Installation successful! # 重新加载systemd守护进程,使新的服务单元文件生效 [root@redis-node1 utils]# systemctl daemon-reload # 检查服务状态 [root@redis-node1 utils]# systemctl status redis_6379.service ● redis_6379.service - LSB: start and stop redis_6379 Loaded: loaded (/etc/rc.d/init.d/redis_6379; generated) Active: active (exited) since Sun 2026-03-08 15:24:18 CST; 8s ago Docs: man:systemd-sysv-generator(8) Process: 35637 ExecStart=/etc/rc.d/init.d/redis_6379 start (code=exited, status=0/SUCCESS) CPU: 1ms # 使用netstat命令检查Redis服务是否在指定端口(6379)成功监听 [root@redis-node1 utils]# netstat -antlpe | grep redis tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 0 76854 35530/redis-server tcp6 0 0 ::1:6379 :::* LISTEN 0 76855 35530/redis-server

三.Redis主从复制

1.Redis主节点配置

(本部分配置主节点,通常只需开放访问,确保从节点可连接)

# 登录到Redis主节点服务器 [root@redis-node1 ~]# vim /etc/redis/6379.conf # 注释掉默认的本地绑定,允许任何IP连接 #bind 127.0.0.1 -::1 # 绑定到所有网络接口(IPv4和IPv6),允许远程访问 bind * -::* # 关闭保护模式,允许非本机连接 protected-mode no # 修改配置后,重启Redis服务使配置生效 [root@redis-node1 ~]# systemctl restart redis_6379.service

2.配置Redis从节点

(在之前配置好的主节点上克隆两台主机修改相关配置作为从节点,在两个从节点上进行相同配置,核心是指定主节点的地址)

# 在第一个从节点(redis-node2)上进行配置 [root@redis-node2 ~]# vim /etc/redis/6379.conf #bind 127.0.0.1 -::1 # 同样绑定到所有网络接口 bind * -::* # 关闭保护模式 protected-mode no # 指定主节点的IP和端口,这是从节点配置的核心指令 replicaof 172.25.254.101 6379 # 重启服务 [root@redis-node2 ~]# systemctl restart redis_6379.service # 在第二个从节点(redis-node3)上进行相同配置 [root@redis-node3 ~]# vim /etc/redis/6379.conf #bind 127.0.0.1 -::1 bind * -::* protected-mode no # 指向同一个主节点 replicaof 172.25.254.101 6379 # 重启服务 [root@redis-node3 ~]# systemctl restart redis_6379.service

3. 查看状态并测试

(本部分用于验证主从复制是否配置成功)

3.1.状态查看

(通过在master和slave节点上执行info replication命令来查看复制状态)

# 登录主节点,查看复制信息 [root@redis-node1 ~]# redis-cli 127.0.0.1:6379> info replication # Replication role:master # 当前角色:主节点 connected_slaves:2 # 已连接的从节点数量:2个 slave0:ip=172.25.254.102,port=6379,state=online,offset=391,lag=0 # 从节点0的详细信息 slave1:ip=172.25.254.103,port=6379,state=online,offset=391,lag=1 # 从节点1的详细信息 # ... 以下为复制相关的ID、偏移量等信息 master_failover_state:no-failover master_replid:e5f5cddc017ab0d5223213592d0482b832d3af77 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:391 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:391 # 登录一个从节点(redis-node2),查看复制信息 [root@redis-node2 ~]# redis-cli 127.0.0.1:6379> info replication # Replication role:slave # 当前角色:从节点 master_host:172.25.254.101 # 主节点主机地址 master_port:6379 # 主节点端口 master_link_status:up # 主从连接状态:正常 master_last_io_seconds_ago:5 # 距离上次与主节点IO交互的秒数 master_sync_in_progress:0 # 是否正在进行全量同步:0表示否 # ... 以下为复制偏移量、从节点优先级等信息 slave_read_repl_offset:433 slave_repl_offset:433 slave_priority:100 slave_read_only:1 # 从节点为只读模式 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:e5f5cddc017ab0d5223213592d0482b832d3af77 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:433 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:433

3.2.测试数据同步性

(本部分验证数据从主节点到从节点的同步,以及从节点的只读属性)

# 在主节点上写入一个键值对 [root@redis-node1 ~]# redis-cli 127.0.0.1:6379> set name test OK 127.0.0.1:6379> get name "test" # 在从节点redis-node2上读取该键,验证数据已同步 [root@redis-node2 ~]# redis-cli 127.0.0.1:6379> get name "test" # 在从节点redis-node3上进行相同验证,并尝试写入数据以触发“只读副本”错误 [root@redis-node3 ~]# redis-cli 127.0.0.1:6379> get name "test" # 尝试在从节点写入数据,会收到错误,因为从节点默认是只读的 127.0.0.1:6379> set test 123 (error) READONLY You can't write against a read only replica.

好的,我已经根据您提供的文档内容,对配置和测试过程进行了格式整理,并添加了相应的注释,使其逻辑更加清晰。

四.配置Redis哨兵模式

1. 主节点配置

首先在主节点(redis-node1, IP: 172.25.254.101)上修改哨兵配置文件/etc/redis/sentinel.conf

[root@redis-node1 redis-7.4.8]# vim /etc/redis/sentinel.conf

配置文件关键项(注释已添加):

protected-mode no # 关闭保护模式,允许外部网络访问哨兵 port 26379 # Sentinel 哨兵进程的监听端口 daemonize no # 设置为“no”,表示前台运行哨兵进程,方便观察日志 pidfile /var/run/redis-sentinel.pid # Sentinel 进程的 PID 文件路径 loglevel notice # 日志级别 # 核心监控项:监控名为“mymaster”的主节点,主节点IP:172.25.254.100,端口6379。故障裁决的法定票数(quorum)为2 sentinel monitor mymaster 172.25.254.101 6379 2 # 判断主节点“主观下线”的时间阈值,10秒内无有效响应则认为主节点异常 sentinel down-after-milliseconds mymaster 10000 # 故障转移后,同时向新主节点发起数据同步的从节点数量。设为1可避免新主节点瞬时负载过大 sentinel parallel-syncs mymaster 1 # 故障转移全过程的超时时间,设置为3分钟 sentinel failover-timeout mymaster 180000

2. 从节点配置

在两个从节点上,修改Redis配置文件,关闭保护模式,然后重启Redis服务。

# 在从节点 redis-node2 上操作 [root@redis-node2 ~]# vim /etc/redis/6379.conf protected-mode no [root@redis-node2 ~]# systemctl restart redis_6379.service # 在从节点 redis-node3 上操作 [root@redis-node3 ~]# vim /etc/redis/6379.conf protected-mode no [root@redis-node3 ~]# systemctl restart redis_6379.service

3. 分发哨兵配置

从主节点将配置好的sentinel.conf文件复制到两个从节点。

[root@redis-node1 ~]# scp /etc/redis/sentinel.conf root@172.25.254.102:/etc/redis/ [root@redis-node1 ~]# scp /etc/redis/sentinel.conf root@172.25.254.103:/etc/redis/

4. 启动哨兵集群

在所有三台服务器上,使用相同的命令启动哨兵进程。

# 在 redis-node1, node2, node3 上分别执行 [root@redis-node1~3 ~]# redis-sentinel /etc/redis/sentinel.conf

启动后,日志显示哨兵进程已成功启动,并开始监控主节点,同时发现了两个从节点(172.25.254.102172.25.254.103)。稍后,各个哨兵实例之间也完成了相互发现。


2. 测试故障切换

1. 模拟主节点故障

在主节点(redis-node1)上,创建新的终端窗口通过Redis客户端将其关闭。

[root@redis-node1 6379]# redis-cli 127.0.0.1:6379> SHUTDOWN not connected> quit

2. 观察哨兵故障转移过程

主节点下线后,哨兵集群触发了故障转移流程。从哨兵的日志中,我们可以看到完整的切换步骤(以某个哨兵的日志为例):

  • 检测与裁决

    • +sdown master ...: 哨兵主观认为主节点已下线。

    • +odown master ...: 获得足够哨兵(本例中quorum为2)投票后,主节点被判定为客观下线。

  • 选举与切换

    • +try-failover: 开始尝试故障转移。

    • +vote-for-leader+elected-leader: 哨兵之间进行选举,选出领导者哨兵来执行故障转移。

    • +selected-slave slave 172.25.254.20:6379 ...: 领导者哨兵选择从节点172.25.254.102作为新的主节点。

    • +promoted-slave: 将从节点172.25.254.102提升为新的主节点。

    • +failover-state-reconf-slaves: 开始重新配置其他从节点,让它们复制新的主节点。

    • +slave-reconf-done slave 172.25.254.103:6379 ...: 从节点172.25.254.103已完成向新主节点的重新配置。

    • +switch-master mymaster 172.25.254.101 6379 172.25.254.102 6379:最关键的一步,宣布主节点已从172.25.254.10:6379切换至172.25.254.20:6379

3. 验证切换结果

  • 在新的从节点(redis-node3)上查看,可以看到它的主节点(master_host)已经变成了172.25.254.20

    [root@redis-node3 ~]# redis-cli 127.0.0.1:6379> info replication # Replication role:slave master_host:172.25.254.102 master_port:6379 master_link_status:up ...

4. 恢复旧主节点

将之前宕机的原主节点(redis-node1)重新启动。

[root@redis-node1 6379]# /etc/init.d/redis_6379 start

5. 验证最终状态

  • 在新的主节点(redis-node2)上查看,可以看到它现在作为主节点,拥有两个从节点:172.25.254.103172.25.254.101。这说明原主节点恢复后,会自动以从节点的身份加入新主节点,形成了新的“一主二从”结构。

    [root@redis-node2 ~]# redis-cli 127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=172.25.254.103,port=6379,state=online... slave1:ip=172.25.254.101,port=6379,state=online... # 原主节点恢复后成为从节点 ...

以上步骤和日志清晰地展示了Redis哨兵(Sentinel)模式的核心功能:监控主节点状态、在主节点故障时自动选举新的主节点、并自动完成从节点的主从关系重新配置,从而实现高可用。


http://www.cnnetsun.cn/news/1572847.html

相关文章:

  • OpenClaw替代方案:当Qwen3.5-4B-Claude不可用时的备选
  • Qwen3-ASR-0.6B参数详解:0.6B模型显存占用<4GB的轻量化部署方案
  • 久保田水稻联合收割机(单个SW三维图)
  • 【开题答辩全过程】以 基于.net超市管理系统设计与实现为例,包含答辩的问题和答案
  • 毕业设计_定梁式数控雕刻机机械结构设计
  • Linux exFAT文件系统驱动完全指南:从原理到实践
  • Field II 超声线阵成像系列2——复合平面波成像的工程实现与性能权衡
  • 解决特定调度问题的执行器(Runner)程序
  • 雪女-斗罗大陆-造相Z-Turbo效果展示:基于Transformer架构的动漫风格图像生成
  • Janus-Pro-7B模型压缩与量化实战:在低显存GPU上的部署优化
  • 保姆级教程:雪女-斗罗大陆-造相Z-Turbo镜像一键部署与使用指南
  • Windows 11 装 Docker 总报错?别急着重装,先检查这 3 个被遗忘的服务
  • Gui-Guider自定义控件移植实战:以数字时钟为例解决编译定义缺失
  • 小龙虾使用手册(蓝皮书)实战案例版
  • 无人机/机器人导航入门:手把手教你用Matlab仿真捷联惯导数据解算流程
  • 从‘头歌’练习题到自动化脚本:Python循环结构实战升级指南
  • 突破AI对话边界:SillyTavern重新定义虚拟角色交互体验
  • ROS机器人开发实战:利用tf2库高效处理四元数、欧拉角与旋转矩阵的转换
  • 5分钟玩转黑丝空姐-造相Z-Turbo:无需环境配置,直接体验AI绘画魅力
  • nli-distilroberta-base惊艳效果:中文长文本截断策略对Entailment识别影响深度分析
  • FaceFusion新手必看:从零开始,3步完成图片视频换脸
  • 从PyTorch到ONNX再到MNN:一份给移动端开发者的AI模型‘瘦身’与部署实战指南
  • Jimeng LoRA与国产算力适配:昇腾910B/寒武纪MLU370性能优化实录
  • 保姆级教程:手把手教你逆向分析某音a_bogus参数(含SM3/RC4/Base64魔改算法详解)
  • 突破AI交互边界:SillyTavern如何重塑虚拟角色体验
  • 动漫IP商业化新路径:AnythingtoRealCharacters2511助力二次元角色真人化营销落地
  • G-Helper降压调校3步法:释放AMD笔记本隐藏性能的终极指南
  • 别再瞎猜了!手把手教你用公式算清摄像头MIPI Lane数(附Excel计算器)
  • 圣女司幼幽-造相Z-Turbo同人生态赋能:为创作者提供可部署的专属AI画师
  • mPLUG视觉问答效果展示:交通标志识别、菜单文字理解、图表数据问答