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 则提供了高可用、高并发、大容量的分布式解决方案。

相关推荐
大树882 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
大志哥1233 小时前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
bush43 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 小时前
Linux 11 动态监控指令top
linux
小小工匠4 小时前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
果丁智能4 小时前
物联网智能锁赋能集中式住宿:身份核验与远程权限管控的全链路技术实践
大数据·人工智能·物联网·智能家居
不会C语言的男孩5 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
ApacheSeaTunnel5 小时前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
古城小栈5 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix