Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件(原创)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

对于redis-sentinel我在之前的文章中已经说过,它是一个仲裁者,当主master挂了后,它将在所有slave服务器中进行选举,选举的原则当然可以看它的官方文章,这与我们使用者没有什么关系,而对于sentinel来说,它在进行主从切换时,会触发相关事件,这是和我们开发人员有关系的,如当+switch-master事件被触发时,说明当前Sentinal已经完成了一次主从的切换,并所有服务已经正常运转了。

下面是我这几天作的测试,对于Twemproxy代理和Sentinal哨兵都已经成功使用stackExchange.redis进行了连接,并正常访问了,当然Sentinel只公开了几个redis命令,这个大家要清梦,不明白的可以看我的这篇文章《Redis集群~windows下搭建Sentinel环境及它对主从模式的实际意义》。

连接普通的redis服务器

  ConnectionMultiplexer conn = ConnectionMultiplexer.Connect("127.0.0.1:6379");
  ConfigurationOptions option = new ConfigurationOptions();
  option.EndPoints.Add("127.0.0.1", 6379);
  ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(option);

连接TW代理服务器

    ConfigurationOptions twOption = new ConfigurationOptions();
    twOption.EndPoints.Add("127.0.0.1", 22122);
    twOption.EndPoints.Add("127.0.0.1", 22123);
    twOption.Proxy = Proxy.Twemproxy;//代理的类型
    ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(twOption);

连接Sentinal仲裁哨兵服务器

           //连接sentinel服务器
            ConfigurationOptions sentinelConfig = new ConfigurationOptions();
            sentinelConfig.ServiceName = "master1";
            sentinelConfig.EndPoints.Add("192.168.2.3", 26379);
            sentinelConfig.EndPoints.Add("192.168.2.3", 26380);
            sentinelConfig.TieBreaker = "";//这行在sentinel模式必须加上
            sentinelConfig.CommandMap = CommandMap.Sentinel;
            // Need Version 3.0 for the INFO command?
            sentinelConfig.DefaultVersion = new Version(3, 0);
            ConnectionMultiplexer conn = ConnectionMultiplexer.Connect(sentinelConfig);

有了上面的代码后,我们可以成功的连接一个sentinel服务器,对这个连接的实际意义在于:当一个主从进行切换后,如果它外层有Twemproxy代理,我们可以在这个时机(+switch-master事件)通知你的Twemproxy代理服务器,并更新它的配置文件里的master服务器的地址,然后从起你的Twemproxy服务,这样你的主从切换才算真正完成。

对于Twemproxy-sentinal-master/slave主从切换实现图

我们可以使用.netcore开发一个跨平台的程序,将它放在linux的tw代理服务器上,使用dotnet run去运行它,然后当收到由sentinel发来的+switch-master事件时,将更新tw配置文件并从起它的服务。

希望大家对技术多一点深度的研究,找不到答案就看看它的源代码,可能会有意外的收获!

欢迎大家关注大叔博客!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件(原创),如需转载请自行联系原博主。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
19天前
|
Linux 网络安全 数据安全/隐私保护
SSH工具连接远程服务器或者本地Linux系统
SSH工具连接远程服务器或者本地Linux系统
20 0
|
4天前
|
运维 数据安全/隐私保护
Finalshell 私钥连接服务器
Finalshell 私钥连接服务器
12 0
|
1天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
13 6
|
12天前
|
监控 安全 持续交付
【专栏】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。
【4月更文挑战第29天】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。常用于持续集成部署、第三方服务集成、实时数据同步和监控告警。具有实时性、高效性和灵活性优势,但也面临安全风险和调试挑战。理解并善用Webhook能提升系统性能,广泛应用于现代软件开发和集成。
|
16天前
|
监控 Linux 网络安全
Linux服务器如何查询连接服务器的IP
【4月更文挑战第17天】Linux服务器如何查询连接服务器的IP
15 1
|
20天前
|
消息中间件 数据安全/隐私保护
MQTT微消息队列服务器连接报错:Error: Connection refused: Not authorized
使用MQTTX工具进行测试时,通过AccessKey创建了Client ID的用户名和密码。配置了公网接入点及端口1883,但尝试连接时出现错误。已附上工具截图:![](https://ucc.alicdn.com/pic/developer-ecology/3byii5uar64gg_36327474e991439da422f38c450ef153.png)。确认过用户名、密码和Client ID无误,问题仍未解决,期待回复!
|
22天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
23天前
|
存储 Java 网络安全
ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
【4月更文挑战第10天】ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
35 1
|
16天前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
17天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
27 0