Redis主从与集群搭建全指南

一、Redis 主从复制 (Replication)

主从复制是 Redis 提供的一种高可用性和数据冗余的机制。一个主节点 (master) 可以拥有多个从节点 (slave)。主节点负责处理写操作,并将写操作的数据变更异步地传播给所有从节点。从节点默认是只读的,用于处理读请求或作为故障转移的备胎。

主从设置步骤
  1. 准备节点

    • 启动多个 Redis 服务器实例(可以是在同一台机器的不同端口,也可以是不同机器)。假设我们有三个实例:
      • 主节点:127.0.0.1:6379
      • 从节点1:127.0.0.1:6380
      • 从节点2:127.0.0.1:6381
  2. 配置主节点 (可选)

    • 主节点通常不需要特殊配置即可作为主节点启动。但为了安全或持久化,你可能需要配置 requirepass (主节点密码) 和 daemonize (后台运行) 等选项。主节点配置文件 (redis-6379.conf) 示例片段:

      ini 复制代码
      port 6379
      daemonize yes
      requirepass your_master_password  # 如果设置了密码,从节点连接时需要
    • 启动主节点:

      bash 复制代码
      redis-server /path/to/redis-6379.conf
  3. 配置从节点

    • 这是关键步骤。在每个从节点的配置文件中,需要指定它要复制的主节点信息。从节点配置文件 (redis-6380.conf / redis-6381.conf) 示例片段:

      ini 复制代码
      port 6380  # 或 6381
      daemonize yes
      slaveof 127.0.0.1 6379  # 指向主节点的 IP 和端口
      masterauth your_master_password  # 如果主节点设置了 requirepass,这里需要填写相同的密码
    • 启动从节点:

      bash 复制代码
      redis-server /path/to/redis-6380.conf
      redis-server /path/to/redis-6381.conf
  4. 验证主从状态

    • 连接到任意节点(主或从),使用 INFO replication 命令查看复制状态。

    • 在主节点执行:

      bash 复制代码
      redis-cli -h 127.0.0.1 -p 6379 -a your_master_password
      > INFO replication

      输出中应看到 role:masterconnected_slaves:2 (或其他实际数字),以及从节点的连接信息。

    • 在从节点执行:

      bash 复制代码
      redis-cli -h 127.0.0.1 -p 6380
      > INFO replication

      输出中应看到 role:slave, master_host:127.0.0.1, master_port:6379, master_link_status:up (表示连接正常),以及 slave_repl_offset (复制偏移量)。

关键点

  • 主节点写,从节点读。
  • 复制是异步的,存在短暂的数据不一致窗口期。
  • 从节点可以级联 (slave of slave)。
  • 故障转移需要手动干预或借助 Redis Sentinel / Redis Cluster 等方案。

二、Redis 集群 (Cluster)

Redis Cluster 是 Redis 官方提供的分布式方案,用于解决单机 Redis 在内存容量、并发处理能力和故障恢复方面的瓶颈。它将数据分片存储在多个节点上,并提供自动的故障转移。

核心概念
  • 分片 (Sharding) :数据被自动分片到多个主节点上存储。默认将整个数据集划分为 16384 个哈希槽 (hash slot)。
  • 主节点 (Master Node):负责存储一部分哈希槽的数据和处理读写请求。
  • 从节点 (Slave Node):作为主节点的副本,在主节点故障时通过选举成为新的主节点。
  • 集群总线 (Cluster Bus):节点间通过 TCP 端口 (默认主端口 + 10000) 进行通信(如Gossip协议、故障检测、配置更新)。
集群搭建步骤 (以三主三从为例)
  1. 准备节点

    • 启动六个 Redis 服务器实例。每个节点都需要一个配置文件。

    • 每个节点的配置文件 (redis-7000.confredis-7005.conf) 需要启用集群模式并设置节点端口。示例片段 (redis-7000.conf):

      ini 复制代码
      port 7000
      daemonize yes
      cluster-enabled yes  # 启用集群模式
      cluster-config-file nodes-7000.conf  # 节点自动生成的集群配置文件
      cluster-node-timeout 5000
      appendonly yes  # 建议开启持久化
    • 启动所有六个节点:

      bash 复制代码
      redis-server /path/to/redis-7000.conf
      redis-server /path/to/redis-7001.conf
      ...  # 启动 redis-7002.conf, redis-7003.conf, redis-7004.conf, redis-7005.conf
  2. 创建集群

    • 使用 redis-cli 提供的集群管理命令 --cluster create 来初始化集群。你需要指定所有节点的地址,并告诉工具哪些节点是主节点,哪些是它的从节点(通常按顺序排列,前三个是主,后三个分别对应前三个主)。

    • 命令格式:

      bash 复制代码
      redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
      • --cluster create:创建集群。
      • 127.0.0.1:7000 ...:列出所有节点地址。
      • --cluster-replicas 1:指定每个主节点分配 1 个从节点。工具会自动将前 N 个节点视为主节点,后 N * replicas 个节点作为它们的从节点。这里 N=3。
    • 执行命令后,工具会显示它计划分配的槽位分布(每个主节点分配约 5461 个槽)。确认无误后输入 yes

  3. 验证集群状态

    • 连接到任意节点:

      bash 复制代码
      redis-cli -c -p 7000  # -c 表示以集群模式连接
      > CLUSTER INFO  # 查看集群整体状态,应为 "cluster_state:ok"
      > CLUSTER NODES  # 查看所有节点信息,包括角色 (master/slave)、负责的槽位范围、连接状态等
    • 测试读写:尝试写入一个 key。集群模式下的客户端会自动重定向到正确的节点。

      bash 复制代码
      > SET mykey "hello world"
      -> Redirected to slot [14687] located at 127.0.0.1:7002
      OK
      > GET mykey
      -> Redirected to slot [14687] located at 127.0.0.1:7002
      "hello world"

关键点

  • 最小配置要求:至少 3 个主节点才能形成集群(因为故障转移需要多数投票)。
  • 数据分片:客户端需要理解集群协议(如 redis-cli -c 或支持集群的客户端库),否则操作会因 MOVED 错误而失败。
  • 自动故障转移:当主节点故障且被大多数主节点判定为下线时,其对应的从节点会发起选举成为新主节点。
  • 节点发现:新节点加入集群或节点间通信通过集群总线和 Gossip 协议自动完成。
  • 槽位迁移:支持运行时动态添加/删除节点和重新分片 (redis-cli --cluster reshard)。

注意事项

  • 版本:确保所有节点使用相同的主要 Redis 版本。
  • 网络:集群节点间需要双向网络通信(客户端端口和集群总线端口)。
  • 工具redis-cli --cluster help 查看所有集群管理命令(添加节点、删除节点、修复、重新分片等)。
  • 生产环境 :强烈建议将节点部署在不同物理机或虚拟机,避免单点故障。配置合理的 cluster-node-timeout

通过以上步骤,你应该能够成功配置 Redis 主从复制和 Redis Cluster。主从复制提供数据备份和读写分离,而 Redis Cluster 则提供了高可用、高并发、大容量的分布式解决方案。

相关推荐
嵩山小老虎3 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
Leon-zy3 小时前
Redis7.4.5 主备冗余+哨兵模式部署
redis·哨兵模式·主备模式
TM1Club3 小时前
AI驱动的预测:新的竞争优势
大数据·人工智能·经验分享·金融·数据分析·自动化
Fleshy数模3 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
zhang133830890753 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
a41324473 小时前
ubuntu 25 安装vllm
linux·服务器·ubuntu·vllm
az44yao4 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
电商API_180079052474 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
龙山云仓5 小时前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene
一只自律的鸡5 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug