Redis集群(三):主从配置一

本文详细介绍了Redis主从配置的搭建过程及使用方法,并探讨了不同场景下主从状态的变化,包括Master和Slave节点的故障恢复策略。还介绍了如何利用哨兵模式实现主节点的自动监控与故障转移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis集群(三):主从配置一

 

一、本文目的

         Redis的主从配置分为两篇文章,第一篇主要介绍了Redis主从配置的搭建过程及使用,第二篇主要说明各种情况下Redis主从状态,如Master挂掉,Slaver挂掉,挂掉后重新加入等。

 

二、常用命令

  1. 根据配置文件启动redis:   src/redis-server  redis.confg
  2. 启动redis客户端:redis-cli -p port
  3. Slaver连接Master:slaveof host:ip          (测试时使用slaveof手动连接master,正式环境使用配置文件)
  4. 关闭Redis:shutdown
  5. 查看主从信息:info Replication

 

三、Redis的配置

    1、按照1主2从的结构搭建,即1个Master,2个Slaver节点

    2、Redis配置文件redis.conf的配置

 daemonize
(后台运行)
pidfileportlogfile(日志,src目录)# slaveof <masterip> <masterport>
  (测试时使用slaveof手动连接master,正式环境使用配置文件)
Masteryes/var/run/redis6379.pid6379"redis6379.log" 
Slaver1yes/var/run/redis6381.pid6381"redis6381.log"slaveof 127.0.0.1 6379
Slaver2yes/var/run/redis6382.pid6382"redis6382.log"slaveof 127.0.0.1 6379

    3、配置完成后3个节点都是Master

    4、配置主从节点(通过info replication查看主从关系)

  5、Master节点设置key后异步同步到Slaver节点;Slaver节点只能读取数据,不能修改

 6、主节点挂掉后,手动将S1子节点升级为Master(命令:slaveof no one 手动将Slaver节点升级为Master节点)

   操作步骤如下:

    a) Master节点:Shutdown关闭节点

    b) Slaver1节点:slaveof no one将其升级为Master节点

    c) Slaver2节点:使用slaveof 127.0.0.1 6381 重连Slaver2将其视为Master节点

    d) 原来的Master节点:重新启动后,可以使用slaveof 127.0.0.1 6381 连接Slaver2将其视为Master节点,自己成为Slaver节点

 7、使用哨兵模式,自动监视Master节点,当前挂掉后,自动将Slaver节点变为Master节点

       a) sentinel.conf配置文件,修改sentinel monitor host6379 127.0.0.1 6379 1,其它使用默认即可
           host6379 主机名称,随便起    主机IP 端口 1表示选举,某个slaver得到超过1票则成成为Master节点

       b) daemonize yes

       b) 启动sentinel: ./redis-sentinel ../sentinel.conf

       c)tail -f /var/log/redis/sentinel.log

   8、手动shutdown Master节点后,等待一段时间(大概一分钟),sentinel会重新选举Master节点。下面将6381选举为Master节点,6382自动重连6381的Master节点

     6379 原来的Master节点重启后变成Slaver节点

 

 

四、总结

  1. Master可读可写,Slaver只能读,不能写
  2. Master可以对应多个Slaver,但是数量越多压力越大,延迟就可能越严重
  3. Master写入后立即返回,几乎同时将写入异步同步到各个Slaver,所以基本上延迟可以忽略
  4. 可以通过slaveof no one命令将Slaver升级为Master(当Master挂掉时,手动将某个Slaver变为Master)
  5. 可以通过sentinel哨兵模式监控Master,当Master挂掉时自动选举Slaver变为Master,其它Slaver自动重连新的Master

 

### 主从复制模式 主从复制模式是 Redis 提供的种基础集群方案,用于解决高并发读取问题。该模式由个主节点(Master)和多个从节点(Slave)组成,其中主节点负责处理写请求,而从节点则通过异步复制机制同步主节点的数据[^1]。 在主从复制中,客户端的写操作仅作用于主节点,而读操作可以分发到任意从节点,从而实现读写分离。这种架构显著提升了系统的吞吐量,并提供了基本的数据冗余能力,以应对主节点故障的情况[^5]。 ```bash # 示例:配置从节点 replicaof <master-ip> <master-port> ``` 尽管主从复制能够提高读性能,但它并不具备自动故障转移能力。旦主节点发生故障,整个集群将无法接受新的写请求,直到手动恢复主节点或切换至个新的主节点。 ### 哨兵模式 为了解决主从复制模式下缺乏自动故障转移的问题,Redis 引入了哨兵(Sentinel)机制。哨兵模式是种高可用性解决方案,它通过引入独立的监控进程(即哨兵节点)来实现对主从节点的健康检查,并在主节点不可用时自动完成故障转移。 哨兵节点定期与主从节点通信,检测其状态。当多数哨兵节点认为主节点宕机时,它们会基于 Raft 算法选举出个领导者,由该领导者决定如何选择个新的从节点作为新的主节点,并协调其他从节点更新其复制源[^2]。 ```bash # 示例:配置哨兵 sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 ``` 哨兵模式不仅支持自动故障转移,还支持客户端通知机制,使得客户端能够在主节点变更后及时调整连接目标。然而,由于哨兵本身也是独立运行的进程,因此需要额外部署并维护这些节点。 ### 分片集群Redis Cluster) Redis Cluster 是 Redis 官方提供的分布式集群解决方案,旨在解决单机性能瓶颈和高可用性需求。它通过数据分片(sharding)实现横向扩展,并通过节点间的通信机制保障数据致性和故障转移能力[^4]。 在 Redis Cluster 中,所有数据被划分为 16384 个哈希槽(hash slot),每个键通过 CRC16 校验后对 16384 取模得到对应的槽位,从而决定该键存储在哪个主节点上。每个主节点负责部分槽位,而从节点则用于主节点的故障转移备份[^3]。 ```python def get_slot(key): import crc16 return crc16.crc16xmodem(key.encode()) % 16384 ``` Redis Cluster 使用 Gossip 协议进行节点间通信,主要包括 PING、PONG、MEET、FAIL 和 PUBLISH 消息类型。Gossip 协议的优点是去中心化、传播速度快;缺点是可能存在短暂的数据不致情况,以及在网络不稳定时容易产生误判[^1]。 当某个主节点被标记为“疑似下线”(PFAIL)后,其他节点会通过定时间确认其确实不可达,随后将其标记为“已下线”(FAIL)。此时,与其相关的从节点将发起选举流程,争取成为新的主节点。选举基于 Raft 算法的思想,确保只有个从节点最终胜出并接管原主节点的工作负载[^2]。 Redis Cluster 支持部分批量命令,但要求涉及的所有键必须位于同个槽内,否则客户端需要自行拆分成多个请求发送至不同节点执行。这限制了某些场景下的效率,但也简化了实现复杂度并降低了跨节点事务管理的成本[^4]。 ### 使用场景对比 - **主从复制模式**适用于读多写少的应用场景,如缓存系统中的热点数据加速访问。它适合那些对数据致性要求不高且可以容忍短时间服务不可用的环境。 - **哨兵模式**更适合需要高可用性的应用场景,例如在线交易系统或实时数据分析平台。在这种环境中,即使主节点出现故障,也必须保证服务继续可用,同时尽可能减少人工干预。 - **分片集群Redis Cluster)**则适用于大规模数据集和高并发写入需求的场景,比如大型电商平台的商品库存管理或者社交网络中的用户行为追踪。它可以水平扩展以承载更大的数据量和更高的流量负载,同时也提供了较好的容错能力和自动化运维特性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值