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模式的客户端库,确保客户端能够正确处理集群模式下的数据路由和故障转移。
相关推荐
Cao_XinYang20 分钟前
springboot+redis+缓存
spring boot·redis·缓存
罗小爬EX1 小时前
MySql批量迁移数据库
数据库·mysql
言成言成啊1 小时前
PostgreSQL维护——解决索引膨胀和数据死行
数据库·postgresql
WZF-Sang1 小时前
【MySQL】数据类型【mysql当中各自经典的数据类型的学习和使用】
linux·数据库·sql·学习·mysql·adb
挠背小能手1 小时前
达梦DIsql使用方法
数据库
迷茫运维路1 小时前
mysql5.7常用操作命令手册
运维·数据库
玖石书2 小时前
etcd 集群搭建与测试指南
数据库·etcd·集群
南叔先生2 小时前
Linux 性能优化 copy
网络·数据库·php
好记忆不如烂笔头abc2 小时前
统计信息的导出导入
数据库
Casual_Lei2 小时前
Neo4j
数据库·oracle·neo4j