Redis【有与无】【Lettuce】L4.Redis Sentinel
本文章基于Redis 6.0.9版本,Lettuce 6.0.1.RELEASE版本
目录
1.Redis Sentinel
1.1.直接连接Redis Sentinel节点
1.2.使用Redis Sentinel发现Redis
1.3.例子
示例1. Redis Sentinel节点连接
示例2. Redis upstream发现
2.Upstream Replica
2.1.Redis Sentinel
2.2.独立上游节点/复制节点(Upstream/Replica)
2.3.具有预定义节点地址的静态上游节点/复制节点(Upstream/Replica)
2.4.拓扑发现
2.5.拓扑更新
2.6.事务
2.7.例子
例子1. Redis独立主节点/复制节点
例子2. Redis Redis Sentinel
示例3. AWS ElastiCache集群
1.Redis Sentinel
使用Lettuce时,可以通过多种方式与Redis Sentinel和Redis Sentinel管理的节点进行交互:
- 直接连接到Redis Sentinel,用于发出Redis Sentinel命令
- 使用Redis Sentinel连接到upstream
- 使用Redis Sentinel通过Upstream-Replica API连接到upstream节点和复制节点(replicas)。
在这两种情况下,都需要提供RedisURI
,因为Redis Sentinel集成支持多个Sentinel主节点以提供高可用性。
请注意:Sentinel (Lettuce 3.x)集成仅提供异步连接,不提供连接池。
1.1.直接连接Redis Sentinel节点
Lettuce公开了一个API以直接与Redis Sentinel节点进行交互。 这对于使用生菜执行管理任务很有用。 你可以监视新的upstream节点,查询upstream地址,复制节点等。 通过RedisClient.connectSentinel()
建立与Redis Sentinel节点的连接。 使用发布/订阅连接来订阅Sentinel事件。
1.2.使用Redis Sentinel发现Redis
一个或多个Redis Sentinels可以监视Redis实例。 这些Redis实例通常与Redis实例的复制节点一起操作。 一旦upstream出现故障,复制节点将被提升到upstream。 一旦无法再访问upstream实例,则Redis Sentinels将启动故障转移过程。 通常,客户端连接会终止。 断开连接可能导致以下任何选项:
- upstream返回:连接恢复到Redis实例
- 复制节点被提升到upstream:Lettuce使用masterId执行地址查找。 Redis Sentinel提供地址后,连接即立即恢复到新的Redis实例
在http://redis.io/topics/sentinel上了解更多信息
1.3.例子
示例1. Redis Sentinel节点连接
RedisURI redisUri = RedisURI.create("redis://sentinelhost1:26379");
RedisClient client = new RedisClient(redisUri);RedisSentinelAsyncConnection<String, String> connection = client.connectSentinelAsync();Map<String, String> map = connection.master("myupstream").get();
示例2. Redis upstream发现
RedisURI redisUri = RedisURI.Builder.sentinel("sentinelhost1", "mymaster").withSentinel("sentinelhost2").build();
RedisClient client = RedisClient.create(redisUri);RedisConnection<String, String> connection = client.connect();
注意:每次使用Redis Sentinel连接到Redis实例时,都会使用与Redis Sentinel的新连接来查找Redis upstream。 这可能很耗时,尤其是在使用多个Redis Sentinel且其中一个或多个无法访问时。
2.Upstream Replica
Redis通过使用复制可以提高可用性并读取吞吐量。 从4.2开始,Lettuce为拓扑和ReadFrom-Settings提供了专用的上游节点/复制节点(Upstream/Replica)支持。
Redis Upstream/Replica可以独立运行,也可以与Redis Sentinel一起运行,后者提供自动故障转移和上游(upstream)升级。 从3.1版开始,Lettuce已支持上游连接的故障转移和上游升级。
通过提供客户端,编解码器以及一个或多个RedisURI,可以从MasterReplica
连接提供程序获得连接。
2.1.Redis Sentinel
使用Redis Sentinel的上游节点/复制节点(Upstream/Replica)将Redis Sentinel用作拓扑事件的注册表和通知源。 有关上游及其复制节点的详细信息可从Redis Sentinel获取。 Lettuce订阅Redis Sentinel事件,以通知所有提供的Sentinels。
2.2.独立上游节点/复制节点(Upstream/Replica)
运行独立的上游节点/复制节点(Upstream/Replica)设置需要一个种子地址来建立Redis连接。 提供一个RedisURI
将发现属于上游节点/复制节点(Upstream/Replica)设置的其他节点,并将发现的地址用于连接。 初始URI可以指向上游节点/复制节点(Upstream/Replica)。
2.3.具有预定义节点地址的静态上游节点/复制节点(Upstream/Replica)
在某些情况下,不应启用拓扑发现,或者发现的Redis地址不适合连接。 AWS ElastiCache属于此类。 Lettuce允许将一个或多个Redis地址指定为List并预定义节点拓扑。 在这种情况下,上游节点/复制节点(Upstream/Replica)URI将被视为静态拓扑,并且在这种情况下不会发现其他主节点。 Redis Standalone Upstream / Replica将发现提供的RedisURI的角色,并向适当的节点发出命令。
2.4.拓扑发现
Upstream-Replica拓扑是静态或半静态的。 具有附加复制节点的Redis Standalone实例不提供故障转移/ HA机制。 Redis Sentinel托管实例由Redis Sentinel控制,并允许故障转移(包括上游节点升级)。 MasteReplica
API支持两种机制。 拓扑由TopologyProvider
提供:
UpstreamReplicaTopologyProvider
: 使用INFO REPLICATION
输出进行动态拓扑查找。 复制节点作为replicaN = ...条目列出。 初始连接可以指向上游节点或复制节点,并且拓扑提供程序将发现节点。 如果发生上游节点/复制节点(Upstream/Replica)故障转移或拓扑更改,则需要在Lettuce外部重新建立连接。StaticUpstreamReplicaTopologyProvider
: 拓扑由URI列表和ROLE输出定义。 MasterReplica仅使用提供的节点,而不会在设置中发现其他节点。 如果发生上游节点/复制节点(Upstream/Replica)故障转移或拓扑更改,则需要在Lettuce外部重新建立连接。SentinelTopologyProvider
: 使用Redis Sentinel API进行动态拓扑查找。 特别是SENTINEL MASTER
和SENTINEL SLAVES
输出。 上游节点/复制节点故障转移由Lettuce处理。
2.5.拓扑更新
- 独立的游节点/复制节点(Upstream/Replica):执行一次性拓扑查找,此后仍保持静态
- Redis Sentinel:订阅所有Sentinel并侦听Pub/Sub消息以触发拓扑刷新
2.6.事务
从5.1版开始,将事务期间的事务和命令路由到上游节点,以确保在单个节点上执行原子事务。 事务可以包含读和写操作,因此驱动程序无法预先决定可以使用哪个节点来运行实际事务。
2.7.例子
例子1. Redis独立主节点/复制节点
RedisClient redisClient = RedisClient.create();StatefulRedisMasterSlaveConnection<String, String> connection = MasteReplica.connect(redisClient, StringCodec.UTF8,RedisURI.create("redis://localhost"));
connection.setReadFrom(ReadFrom.UPSTREAM_PREFERRED);System.out.println("Connected to Redis");connection.close();
redisClient.shutdown();
例子2. Redis Redis Sentinel
RedisClient redisClient = RedisClient.create();StatefulRedisMasterReplicaConnection<String, String> connection = MasteReplica.connect(redisClient, StringCodec.UTF8,RedisURI.create("redis-sentinel://localhost:26379,localhost:26380/0#myupstream"));
connection.setReadFrom(ReadFrom.UPSTREAM_PREFERRED);System.out.println("Connected to Redis");connection.close();
redisClient.shutdown();
示例3. AWS ElastiCache集群
RedisClient redisClient = RedisClient.create();List<RedisURI> nodes = Arrays.asList(RedisURI.create("redis://host1"),RedisURI.create("redis://host2"),RedisURI.create("redis://host3"));StatefulRedisMasterSlaveConnection<String, String> connection = MasteReplica.connect(redisClient, new Utf8StringCodec(), nodes);
connection.setReadFrom(ReadFrom.UPSTREAM_PREFERRED);System.out.println("Connected to Redis");connection.close();
redisClient.shutdown();
Redis【有与无】【Lettuce】L4.Redis Sentinel相关推荐
- java整合redis集群_SpringBoot2.X整合Redis(单机+集群+多数据源)-Lettuce版
最近项目尝试从SpringBoot1.X升级到SpringBoot2.X, 但是 Spring Boot 2.0中 Redis 客户端驱动现在由 Jedis变为了 Lettuce, 所以尝试测试一下L ...
- Redis 高级 Java 客户端 Lettuce 的用法及踩坑经验
如果你在网上搜索 Redis 的 Java 客户端,你会发现,大多数文献介绍的都是 Jedis,不可否认,Jedis 是一个优秀的基于 Java 语言的 Redis 客户端,但是,其不足也很明显:Je ...
- Redis异常:JedisException: Can connect to sentinel, but 127.0.0.1:6379 seems to be not monitored...
1. 异常现象 Caused by: redis.clients.jedis.exceptions.JedisException: Can connect to sentinel, but 127.0 ...
- Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:爱宝贝丶 my.oschina.net/zhangxufen ...
- 慢连接 java_记一次redis的java客户端lettuce操作慢的解决方案
因为项目业务需要,我们要把数据库中的大量数据缓存到redis中,并且会随时更新缓存,刚开始更新频率是1Hz,没有什么问题,后来更新频率达到了5Hz,lettuce开始疯狂报错:redis comman ...
- Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson
文章目录 官网 Jedis VS Lettuce Jedis Code POM依赖 配置文件 配置类 单元测试 Lettuce Code Redisson Code POM依赖 配置文件 配置类 单元 ...
- redis java客户端配置,Java的Redis客户端选择-jedis与Lettuce
Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server. Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线 ...
- Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)
摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...
- [工具类] 系列二 Lettuce 访问Redis 工具类 RedisUtil
最近公司Redis集群启用了ssl和密码校验,使用Jedis访问Redis Cluster的时候,支持不太好.看到spring-data-redis 2.x开始使用Lettuce访问Redis,于是开 ...
- 介绍一个基于Spring Redis Lua的无侵入应用级网关限流框架
介绍一个基于Spring Redis Lua的无侵入应用级网关限流框架 项目介绍 为什么选择spring-redis-current-limit Quick Start 1. 引入spring-red ...
最新文章
- leetcode 994. Rotting Oranges | 994. 腐烂的橘子(BFS)
- eclipse插件安装的方法
- PHP的学习--PHP的闭包
- JSP中文及传中文参数乱码解决方法小结
- java 读取 image_如何在java读取sql里头读取image格式的数据转换成图片格式
- 白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?
- 笔记《javascript高级程序设计》 第12章 DOM2和DOM3
- 1_python基础—变量
- C#反射读取和设置类的属性
- javascript本地,宿主,内置对象
- iis应用池解决方案
- 比特币 出块速度多少 为什么每秒7笔 以太坊15TPS
- 流模型 操作 xml
- android 安装apk 代码,Android 8.0安装apk的实例代码
- 04最大类间方差法(OTSU大津法)
- 同步十二进制加法计数电路设计(D触发器)
- SSM+高校教室管理系统 毕业设计-附源码181523
- 惠普HP Deskjet F4238 多功能一体机驱动
- c++保存数据为txt格式
- pygame 等有缘人接盘
热门文章
- 华为防火墙安全区域介绍及配置
- [论文解读 IJCAI 19] LogAnomaly Unsupervised Detection of Sequential and Quantitative Anomalies
- 裸机服务器装系统步骤,服务器裸机安装操作系统
- 胃不好吃什么养胃 三九胃泰提示常吃芝麻更护胃
- 智能机器人JIMI助力用户咨询体验提升
- 计算机用户全部删除,电脑用户怎么删除:批量删除计算机用户方法
- P1195 口袋的天空
- Android Reboot 命令执行过程
- 信安知识竞赛培训笔记
- Ubuntu、ROS、PX4常见问题及其解决办法