当前位置:首页 > 问答 > 正文

Redis集群主复制怎么搭建,方案和步骤聊聊看

需要明确一点,我们通常说的“Redis集群主复制”可能指的是两种不同的东西,一种是简单的主从复制(Master-Slave Replication),另一种是Redis官方提供的分布式集群方案(Redis Cluster),这两种的搭建复杂度和适用场景完全不同,我会把这两种方案都聊一聊。

Redis主从复制(Master-Slave Replication)

这个方案最简单,理解起来也最直观,就像是一个老板(主节点)带着几个手下(从节点)干活,所有的写操作(比如新增、修改、删除数据)都必须找老板,老板处理完后,会把操作命令同步给所有的手下,让手下也更新自己手里的数据,读操作则可以找老板,也可以找任何一个手下,这样可以分担压力。

来源参考: 这种模式在Redis官方文档的“Replication”部分有详细说明,是Redis最基本的高可用和数据冗余机制。

搭建步骤非常简单:

Redis集群主复制怎么搭建,方案和步骤聊聊看

  1. 准备机器: 至少需要两台服务器,可以是物理机也可以是虚拟机,假设我们有两台,IP分别是192.168.1.10(打算作为主节点)和192.168.1.11(打算作为从节点)。
  2. 安装Redis: 在这两台机器上都安装相同版本的Redis软件,安装过程很简单,下载源码编译或者用系统包管理工具(如yum、apt)安装都可以。
  3. 配置主节点(192.168.1.10): 主节点的配置几乎不用改,就用默认的配置文件redis.conf就行,主要确认一下绑定的IP地址,如果是不同机器,最好改成0.0.0或者本机IP,别只绑127.0.0.1,不然别的机器连不上,然后启动主节点的Redis服务。
  4. 配置从节点(192.168.1.11): 这是关键一步,打开从节点的redis.conf配置文件,找到replicaof(在老版本里可能叫slaveof)这个配置项,把它改成: replicaof 192.168.1.10 6379 这行命令的意思就是告诉这台Redis:“你去给IP是192.168.1.10,端口是6379的那个Redis当小弟,同步它的所有数据。” 保存配置文件,然后启动从节点的Redis服务。
  5. 检查状态: 连接上主节点的Redis命令行,输入命令info replication,在输出信息里,你应该能看到一个叫connected_slaves的项目,数字是1,表示已经有一个从节点连上来了,同样,你连接到从节点的Redis命令行,输入同样的命令,会看到自己的角色(role)是slave,并且能看到主节点的地址,这时候,你在主节点上写入一个数据,马上在从节点上就能读出来,说明主从复制已经正常工作了。

这个方案的优点是搭建容易,配置简单,能实现数据备份和读写分离,缺点是主节点只有一个,如果主节点宕机了,整个系统就不能写入了,需要人工干预把某个从节点升级成新的主节点,不够自动化。


Redis集群(Redis Cluster)

这个方案就复杂一些了,是为了解决大规模数据和高并发的问题而生的,它采用了一种“分片”(Sharding)的策略,想象一下,如果把所有数据比作一本书,这本书太厚了,一个人(一个节点)拿不动也读不过来,Redis Cluster的做法是把这本书拆成很多个章节(16384个槽位,slot),然后找好几组人(多个主节点和对应的从节点),每组人负责保管和阅读其中几个章节。

Redis集群主复制怎么搭建,方案和步骤聊聊看

来源参考: 这是Redis官方在3.0版本后推出的分布式解决方案,在其文档的“Redis Cluster”部分有完整介绍。

搭建步骤(以三主三从最简集群为例):

  1. 准备机器: 至少需要6个Redis实例,可以是6台独立的机器,也可以是在3台机器上每台跑两个Redis实例(用不同端口),我们以3台机器,每台跑两个实例(端口用6379和6380)为例,IP分别是192.168.1.20, 192.168.1.21, 192.168.1.22。
  2. 安装Redis: 在每台机器上都安装Redis,版本要一致。
  3. 配置每个实例: 为每个Redis实例创建单独的配置文件(比如redis_6379.conf, redis_6380.conf),配置文件中有几个关键项必须修改:
    • port 6379:每个实例用自己的端口。
    • cluster-enabled yes:这是最重要的,开启集群模式。
    • cluster-config-file nodes-6379.conf:集群自动生成的配置文件,每个实例要不同。
    • cluster-node-timeout 15000:节点超时时间。
    • 同样,注意bind配置,要允许其他IP连接。
  4. 启动所有实例: 按照配置文件,把6个Redis实例全部启动起来,这时候它们还是独立的,彼此不认识。
  5. 组建集群: 这是最关键的一步,我们需要一个“牵线人”来告诉这6个实例如何组成三主三从的集群,Redis提供了一个叫redis-cli的工具,用一行命令就能完成: redis-cli --cluster create 192.168.1.20:6379 192.168.1.21:6379 192.168.1.22:6379 192.168.1.20:6380 192.168.1.21:6380 192.168.1.22:6380 --cluster-replicas 1 这命令的意思是:用后面列出的6个地址来创建集群,--cluster-replicas 1表示每个主节点带1个从节点,所以工具会自动把前三个分配为主节点,后三个分别认前三个为主,形成一一对应的主从关系,它还会把16384个槽位平均分配给三个主节点。
  6. 验证集群: 命令执行成功后,连接上集群中的任何一个节点,输入cluster info可以查看集群状态,cluster nodes可以查看每个节点的详细信息,包括它们的主从关系和负责的槽位范围,你的Redis集群就搭建好了。

这个方案的优点是能横向扩展,数据自动分片,具备自动故障转移的能力(任何一个主节点宕机,它的从节点会自动升级为主节点),缺点是配置和运维相对复杂,客户端也需要支持集群协议才能正常使用。

如果你的数据量不大,主要是为了做数据备份和读写分离,用简单的主从复制就够了,省心,如果你的数据量单机根本存不下,或者并发量极高,那就必须用Redis Cluster了,选择哪种方案,完全看你的实际业务需求。