Redis集群

一、Redis主从复制

基本概念:

  1. 主节点 (Master):接收写入请求,并将数据更新到它的数据库中。
  2. 从节点 (Slave):从主节点同步数据,并可以处理读取请求,从而减轻主节点的负担。

主从复制的作用:

●数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

●故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

●负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

●高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

主从复制流程:

  • 主节点初始化:主节点在启动时等待从节点的连接请求。
  • 从节点连接:从节点向主节点发送同步请求。
  • 主节点同步数据
    • 全量同步:从节点请求主节点进行全量数据同步。主节点将当前数据库快照发送给从节点。
    • 增量同步:在全量同步完成后,主节点会将后续的写操作日志(AOF日志或复制积累的命令)发送给从节点,以保持数据的一致性。
  • 从节点接收数据:从节点接收并应用主节点的数据快照和增量数据,确保其数据与主节点保持一致。

其他注意事项:

  • 故障转移:可以结合工具如Redis Sentinel或Redis Cluster来实现高可用性和自动故障转移。
  • 持久化:确保主节点和从节点的持久化策略一致,以防数据丢失。
  • 网络延迟:主从复制对网络延迟敏感,确保网络连接稳定。
  • 监控:监控主从复制的状态,以确保数据一致性和性能。

二、Redis哨兵模式

主要概念:

  1. Sentinel:一个守护进程,用于监控Redis主节点和从节点,进行故障检测,并在主节点出现故障时自动进行故障转移。
  2. 主节点 (Master):处理写请求,并将数据同步到从节点。
  3. 从节点 (Slave):从主节点同步数据,并可以处理读取请求。
  4. 故障转移 (Failover):当Sentinel检测到主节点失败时,它会选择一个从节点作为新的主节点,并更新集群中的所有从节点指向新的主节点。

Sentinel工作原理:

  1. 监控:Sentinel不断监控主节点和从节点的状态,检查它们的健康状况。
  2. 故障检测:如果Sentinel检测到主节点失效,会进行进一步的验证,以确认主节点确实不可用。
  3. 故障转移:当确认主节点不可用时,Sentinel会选择一个从节点提升为新的主节点,并更新其他从节点的配置,使它们从新的主节点同步数据。
  4. 通知:Sentinel将新的主节点信息通知客户端和应用程序,以确保它们能够重新连接到正确的主节点。

配置步骤:

  1. 配置主节点和从节点 : 在主节点和从节点的 redis.conf 配置文件中,确保主节点和从节点已经正确配置,并能互相通信。

  2. 配置Sentinel: 在每个Sentinel的配置文件中,需要指定要监控的主节点的信息。配置示例如下:

    sql 复制代码
    sentinel monitor mymaster <master-ip> <master-port> <quorum> 
    sentinel auth-pass mymaster <password> # 如果Redis启用了密码保护 
    sentinel down-after-milliseconds mymaster 5000 
    sentinel failover-timeout mymaster 10000 
    ​​​​​​​sentinel parallel-syncs mymaster 1
    • mymaster:监控的主节点名称(可以是任意自定义名称)。
    • <master-ip> 和**<master-port>**:主节点的IP地址和端口。
    • <quorum>:Sentinel需要的最小同意数,以确认主节点故障。通常是Sentinel实例数的一半加一。
    • down-after-milliseconds:Sentinel判定主节点为故障之前等待的时间。
    • failover-timeout:故障转移过程中的超时时间。
    • parallel-syncs:在故障转移过程中,可以同时进行数据同步的从节点数量。
  3. 启动Sentinel: 启动Redis Sentinel进程,指向配置文件:

    复制代码
    redis-sentinel /path/to/sentinel.conf
  4. 监控和管理 : 使用 SENTINEL 命令监控Sentinel的状态,如 SENTINEL slaves mymasterSENTINEL master mymaster

其他注意事项:

  • 多Sentinel实例:为了确保高可用性,通常建议至少运行三个Sentinel实例,以避免单点故障。
  • 客户端配置:确保客户端库支持Sentinel模式,并能够根据Sentinel提供的信息自动连接到新的主节点。
  • 持久化:确保所有Redis节点的持久化配置正确,以防数据丢失。
  • 网络延迟:Sentinel对网络延迟比较敏感,确保Sentinel和Redis节点之间的网络稳定。

三、Redis集群模式

主要概念:

  1. 集群节点:Redis Cluster由多个Redis节点组成,包括主节点和从节点。主节点负责数据存储和处理请求,从节点用于数据备份和故障转移。
  2. 分片 (Sharding):Redis Cluster将数据分布到多个主节点上,通过分片机制实现数据的水平扩展。数据通过哈希槽(hash slots)分布在不同的主节点上。
  3. 哈希槽 (Hash Slots):Redis Cluster将数据键值映射到16384个哈希槽上,每个主节点负责一部分哈希槽。
  4. 故障转移和副本:每个主节点可以有一个或多个从节点(副本)。如果主节点发生故障,从节点会被提升为新的主节点,确保数据的高可用性。

Redis Cluster工作原理:

  1. 数据分片:Redis Cluster通过哈希槽将数据分布到不同的主节点上。每个主节点负责一部分哈希槽,从而分担存储和处理数据的负担。
  2. 请求路由:客户端请求会根据数据的键被路由到相应的主节点。如果主节点不可用,客户端会根据集群的响应自动重试。
  3. 故障检测和转移:Redis Cluster会定期检查主节点的健康状况,如果检测到主节点故障,会通过选举机制将从节点提升为新的主节点,并重新配置集群。
  4. 数据复制:主节点会将数据同步到其从节点,以确保数据的备份和高可用性。

配置步骤:

  1. 准备环境: 确保你有多个Redis节点用于集群配置。每个节点需要有足够的存储空间和计算资源。

    配置Redis节点 : 在每个Redis节点的配置文件(redis.conf)中,需要启用集群模式并配置集群相关选项。例如:

    sql 复制代码
    port 6379
    
    cluster-enabled yes
    
    cluster-config-file nodes.conf
    
    cluster-node-timeout 5000
    
    appendonly yes
    • cluster-enabled yes:启用集群模式。
    • cluster-config-file nodes.conf:指定存储集群节点信息的文件。
    • cluster-node-timeout 5000:节点超时时间,单位为毫秒。
  2. 启动Redis实例: 启动Redis实例,确保每个实例的配置文件正确。

  3. 创建Redis Cluster : 使用 redis-cli 工具创建集群。例如:

    sql 复制代码
    redis-cli --cluster create <node1-ip>:6379 <node2-ip>:6379 <node3-ip>:6379 <node4-ip>:6379 <node5-ip>:6379 <node6-ip>:6379 --cluster-replicas 1

    这里 <node1-ip>:6379 等是你要加入集群的节点地址。--cluster-replicas 1 指定每个主节点有一个从节点。

  4. 验证集群状态: 使用以下命令检查集群状态:

    sql 复制代码
    redis-cli --cluster info <node-ip>:6379
  5. 管理和监控 : 通过 redis-cliCLUSTER 命令可以管理和监控集群状态。例如:

    • CLUSTER NODES:查看集群中的节点信息。
    • CLUSTER MEET:将新节点加入集群。
    • CLUSTER FORGET:从集群中移除节点。

其他注意事项:

  • 数据迁移:Redis Cluster会在节点之间自动迁移数据,以实现负载均衡。
  • 网络配置:确保集群节点之间的网络连接稳定,以便节点可以正常通信。
  • 客户端支持:使用支持Redis Cluster模式的客户端库,确保客户端能够正确处理集群模式下的数据路由和故障转移。
相关推荐
水水沝淼㵘2 分钟前
嵌入式开发学习日志(数据库II && 网页制作)Day38
服务器·c语言·网络·数据结构·数据库·学习
时序数据说4 分钟前
时序数据库IoTDB结合SeaTunnel实现高效数据同步
大数据·数据库·开源·时序数据库·iotdb
云闲不收1 小时前
mysql如何快速生成测试大数据库
数据库·mysql·oracle
Cyrus_柯1 小时前
网络编程(数据库:SQLite)
linux·c语言·数据库·sqlite
2501_915374351 小时前
如何彻底删除Neo4j中的所有数据:完整指南
数据库·oracle·neo4j
老纪的技术唠嗑局3 小时前
世事洞明皆学问 — 如何理解 OB 4.x 版本中的日志流?
数据库
小扳3 小时前
Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:智驿AI系统(前后端源码 + 数据库 sql 脚本)
java·数据库·人工智能·spring boot·transformer·课程设计
加什么瓦3 小时前
Mybatis
java·开发语言·mybatis
神奇萝卜头4 小时前
GO语言使用gorm的dbresolver插件实现数据库读写分离
数据库·golang·gorm