大连全瓷种植牙齿制作中心 发表于 2024-11-27 08:03:04

Redis 主从架构

1. Redis 主从架构概述

在 Redis 主从架构中,通常包含一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理写请求,并将数据同步到从节点。读请求可以由从节点处理,从而实现读写分离,提拔性能。
1.1 Redis 主从架构的特点



[*]读写分离:写请求由主节点处理,读请求可以由从节点处理,如许可以分担主节点的压力,进步读性能。
[*]数据冗余:通过将数据复制到多个从节点,可以进步数据的可用性,防止单点故障导致的数据丢失。
[*]高可用性:假如主节点发生故障,可以手动或自动将某个从节点提拔为主节点,从而继续提供服务。
2. Redis 主从架构的搭建

要搭建 Redis 主从架构,需要至少两台 Redis 服务器(或实例),一个作为主节点,另一个作为从节点。
2.1 设置主节点

首先,需要设置主节点。通常,Redis 默认设置就可以作为主节点利用。
假设 Redis 主节点的设置文件为 redis.conf,启动主节点:
redis-server /path/to/redis.conf
2.2 设置从节点

从节点需要设置成主节点的从节点,可以在从节点的设置文件中指定主节点的 IP 地址和端口,或者通过下令行参数指定。
假设主节点的 IP 地址为 192.168.1.100,端口为 6379,从节点的设置文件为 slave-redis.conf:
slaveof 192.168.1.100 6379
或者,启动从节点时利用下令行参数指定主节点:
redis-server --slaveof 192.168.1.100 6379

2.3 验证主从同步

启动主从节点后,可以通过 Redis CLI 工具连接到从节点,执行 INFO replication 下令来查看主从同步状态:
redis-cli -h 127.0.0.1 -p 6379 INFO replication
在输出中可以看到从节点的状态和正在跟随的主节点信息。
3. Redis 主从同步机制

Redis 主从架构的焦点在于主从同步机制,从节点通过复制主节点的数据来保持数据一致性。主从同步有两种模式:全量同步和增量同步。
3.1 全量同步

当从节点初次连接到主节点时,或在某些环境下(例如从节点数据丢失或数据与主节点不一致时),会触发全量同步。全量同步的步调如下:

[*]快照生成:主节点生成当前数据的快照(RDB 文件),并将其发送给从节点。
[*]数据传输:从节点接收到 RDB 文件后,加载数据到内存中。
[*]增量数据同步:在全量同步过程中,主节点仍然在接收写请求,这些新数据会被缓存在主节点的复制缓冲区中。在从节点加载完 RDB 文件后,主节点会将复制缓冲区中的数据发送给从节点。
全量同步可能会占用大量的网络带宽,且在同步期间从节点无法提供读服务。
3.2 增量同步

在全量同步之后,假如主从节点之间的连接保持稳定,主节点会将所有写操纵记录到复制积存缓冲区(Replication Backlog)。假如从节点再次断开连接后重连,主节点会根据从节点的偏移量(Offset)只发送增量数据,从而实现增量同步。
增量同步的优势在于它的高效性,只需传输变化的数据即可,减少了网络带宽的占用。
4. 在 Java 中利用 Redis 主从架构

Java 应用程序中可以利用 Jedis 或 Redisson 等 Redis 客户端库来与 Redis 主从架构进行交互。以下是利用 Jedis 实现 Redis 主从架构操纵的示例代码。
4.1 引入 Jedis 依靠

在 Maven 项目标 pom.xml 文件中添加 Jedis 依靠:
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.0.0</version>
</dependency>
4.2 利用 Jedis 与 Redis 主从架构交互

利用 Jedis 提供的 Jedis 类连接到主节点,利用 JedisSentinelPool 类连接到主从架构中的哨兵节点,实现自动化的主从切换和高可用性。
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Set;

public class RedisMasterSlaveExample {
    public static void main(String[] args) {
      // 定义哨兵节点集合
      Set<String> sentinels = new HashSet<>();
      sentinels.add("127.0.0.1:26379"); // 哨兵节点1
      sentinels.add("127.0.0.1:26380"); // 哨兵节点2

      // 创建Jedis哨兵池
      try (JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels)) {
            // 从哨兵池中获取连接
            try (Jedis jedis = pool.getResource()) {
                // 操作Redis
                jedis.set("key", "value");
                System.out.println("key: " + jedis.get("key"));
               
                // 模拟主从切换
                jedis.sentinelFailover("mymaster");
               
                // 重新获取连接,测试主从切换
                try (Jedis jedisAfterFailover = pool.getResource()) {
                  System.out.println("After failover, key: " + jedisAfterFailover.get("key"));
                }
            }
      } catch (Exception e) {
            e.printStackTrace();
      }
    }
}
在这个示例中,我们首先定义了哨兵节点的集合,然后创建了 JedisSentinelPool 对象来管理 Redis 主从架构的连接。我们可以通过哨兵节点进行主从切换和高可用性管理。
5. Redis 主从架构的高级特性

5.1 主从切换

Redis 主从架构支持手动和自动的主从切换。在 Redis Sentinel 架构中,当主节点发生故障时,哨兵节点会自动选择一个从节点提拔为新的主节点,继续提供服务。Jedis 客户端可以通过 JedisSentinelPool 自动检测并重新连接到新的主节点。
5.2 只读从节点

Redis 从节点默认是只读的,不能接受写请求。这可以防止数据不一致和数据辩说。在某些场景下,可以将从节点设置为可读写(利用 slave-read-only no 设置),但这需要额外的辩说管理和一致性控制。
6. Redis 主从架构的利用场景

Redis 主从架构适用于以了局景:


[*]读多写少的场景:在读取请求远远多于写入请求的场景下,主从架构可以通过增加从节点来扩展读取能力,进步体系性能。
[*]数据高可用性:主从架构通过数据复制机制,实现了数据的冗余和高可用性,适合需要高可用性的数据存储场景。
[*]灾备切换:在数据中心或跨地区部署场景下,可以利用主从架构实现数据的灾备切换和故障恢复。
7. Redis 主从架构的限定和留意事项



[*]主节点的写压力:所有的写请求都需要由主节点处理,假如写请求量非常大,主节点可能成为瓶颈。
[*]数据一致性问题:在主从切换过程中,可能会存在数据不一致的问题,需要通过业务逻辑进行处理。
[*]故障恢复时间:在故障发生时,从节点接受主节点可能需要一定的时间,期间可能会有服务不可用的风险。
8. 总结

Redis 主从架构是一种常用的数据库高可用和扩展办理方案,通过数据复制和读写分离机制,实现了高可用性和性能优化。在 Java 中,可以利用 Jedis 或其他 Redis 客户端库方便地与 Redis 主从架构进行交互,管理和处理数据。通过合理的架构设计和设置,Redis

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Redis 主从架构