Redis3官方文档(17)
——高可用客户端指引
本文档是一篇草案,其包含的指引将来可能会随着Sentinel项目的进展而改变。
支持Redis Sentinel的Redis客户端指引
Redis Sentinel是Redis实例的监控解决方案,处理Redis主服务器的自动故障转移和服务发现(谁是一组实例中的当前主服务器)。由于Sentinel具有在故障转移期间重新配置实例,以及提供配置给连接Redis主服务器或者从服务器的客户端的双重责任,客户端需要有对Redis Sentinel的显式支持。
这篇文档针对Redis客户端开发人员,他们想在其客户端实现中支持Sentinel,以达到如下目标:
- 通过Sentinel实现客户端的自动配置。
- 改进Sentinel自动故障转移的安全性。
要想获得Redis Sentinel如何工作的细节,请查看相关文档(请查看本系列相关文章,译者注),本文只包含Redis客户端开发人员需要的信息,期待读者已经比较熟悉Redis Sentinel的工作方式。
通过Sentinel实现Redis服务发现(Redis service discovery)
Redis Sentinel通过像”stats”或”cache”这样的名字来识别每个主服务器。每个名字实际上标识了一组实例,由一个主服务器和若干个从服务器组成。
网络中用于特定目的的Redis主服务器的地址,在一些像自动故障转移,手工触发故障转移(例如,为了提升一个Redis实例),或者其他原因引起的这样的事件后可能会改变。
通常,Redis客户端中有一些硬编码的配置来指定IP地址和端口作为网络中Redis主服务器的地址。但是,如果主服务器的地址改变了,就需要手工介入到每个客户端了。
支持Sentinel的Redis客户端可以从使用Sentinel的主服务器的名称自动发现Redis的地址。所以支持Sentinel的客户端应该可以从输入中获得,而不是硬编码的IP地址和端口:
- 指向已知的Sentinel实例的ip:port对列表。
- 服务的名称,像”timelines”或者”cache”。
下面是客户端为了从Sentinel列表和服务名称获得主服务器地址而需要遵循的步骤。
第1步:连接第一个Sentinel(connecting to the first Sentinel)
客户端应该迭代Sentinel地址列表。应该尝试使用较短的超时(大约几百毫秒)来连接到每一个地址的Sentinel。遇到错误或者超时就尝试下一个Sentinel地址。
如果所有的Sentinel地址都没有尝试成功,就返回一个错误给客户端。
第一个回应客户端请求的Sentinel被置于列表的开头,这样在下次重连时,我们会首先尝试在上一次连接尝试是可达的Sentinel,以最小化延迟。
第2步:请求主服务器地址(ask for master address)
一旦与Sentinel的连接建立起来,客户端应该重新尝试在Sentinel上执行下面的命令:
SENTINEL get-master-addr-by-name master-name
这里的master-name应该被替换为用户指定的真实服务名称。
调用的结果可能是下面两种回复之一:
- ip:port对。
- 一个null回复。这表示Sentinel不知道这个主服务器。
如果收到了ip:port对,这个地址应该用来连接到Redis主服务器。否则,如果收到了一个null回复,客户端应该尝试列表中的下一个Sentinel。
第3步:在目标实例中调用ROLE命令(call the ROLE command in the target instance)
一旦客户端发现了主服务器实例的地址,就应该尝试与主服务器的连接,然后调用ROLE命令来验证实例的角色真的是一个主服务器。
如果ROLE命令不可用(Redis 2.8.12引进的),客户端可以使用INFO replication命令来解析角色:输出中的某一个字段。
如果实例不是期待中的主服务器,客户端应该等待一小段时间(几百毫秒)然后再尝试从第1步开始。
处理重连(Handling reconnections)
一旦服务名称被解析为主服务器地址,并且与Redis主服务器实例的连接已经建立,每次需要重新连接时,客户端应该重新从第1步开始使用Sentinel来解析地址。例如,下面的情况下需要重新联系Sentinel:
- 如果客户端在超时或者socket错误后重连。
- 如果客户端因为被显式关闭或者被用户重连而重连。
在上面的情况下或者任何客户端丢失了与Redis服务器连接的情况下,客户端应该再次解析主服务器地址。
Sentinel故障转移断开(Sentinel failover disconnection)
从Redis 2.8.12开始,当Redis Sentinel改变了实例的配置,例如,提升从服务器为主服务器,故障转移后降级主服务器来复制新的主服务器,或者只是改变一个旧的(stale)从服务器的主服务器地址,会发送一个CLIENT KILL类型的命令给实例,来确保所有的客户端都与重新配置过的实例断开。这会强制客户端再次解析主服务器地址。
如果客户端要联系一个还未更新信息的Sentinel,通过ROLE命令验证Redis实例角色会失败,允许客户端发现联系上的Sentinel提供了旧的(stale)信息,然后会重试。
注意:一个旧的主服务器返回在线的同时,客户端联系一个旧的Sentinel实例是有可能的,所以客户端可能连接了一个旧的主服务器,然而ROLE的输出也是匹配的。但是,当主服务器恢复回来以后,Sentinel将会尝试将其降级为从服务器,触发一次新的断开。这个逻辑也适用于连接到一个旧的从服务器,其会被重新配置来复制一个不同的主服务器。
连接从服务器(Connecting to slaves)
有时候客户端有兴趣连接到从服务器,例如,为了分离(scale)读请求。简单修改一下第2步就可以支持连接从服务器。不是调用下面的命令:
SENTINEL get-master-addr-by-name master-name
客户端应该调用:
SENTINEL slaves master-name
用于检索从服务器实例的清单。
相应地,客户端应该使用ROLE命令来验证实例真的是一个从服务器,以防止分离读请求到主服务器。
连接池(Connection pools)
对于实现了连接池的客户端,当单个连接重连时,应该要再次联系Sentinel,如果是主服务器的地址改变了,所有已经存在的连接都要关闭并且重新连接到新的地址。
错误报告(Error reporting)
客户端应该在遇到错误时正确的返回信息给用户,尤其是:
- 如果没有Sentinel能够联系上(这样客户端不可能从SENTINEL get-master-addr-by-name获得回复),应该返回明确表明Redis Sentinel不可达的错误。
- 如果所有池中的Sentinel返回null回复,用户必须被通知Sentinel不认识这个主服务器名称的错误。
Sentinel列表自动刷新(Sentinels list automatic refresh)
一旦收到get-master-addr-by-name的成功回复,客户端会按照下面的步骤来更新其内部的Sentinel节点的列表:
- 使用SENTINEL sentinels <master-name>命令获取这台主服务器的其他Sentinel列表。
- 添加每个不在列表中的ip:port对到列表的后面。
客户端不需要更新自己的配置文件来持久化列表。更新内存中表示的Sentinel列表的能力对改进可靠性已经很有用了。
订阅Sentinel事件来改进响应能力(Subscribe to Sentinel events to improve responsiveness)
介绍Sentinel的文档中展示了客户端可以使用发布订阅来连接Sentinel以订阅Redis实例的配置变更。
这种机制可以用来加快客户端的重配置,也就是,客户端可以监听发布订阅,以知道配置变更什么时候发生,从而运行上文解释的三步协议来解析新的Redis主服务器(或者从服务器)地址。
但是,通过发布订阅收到的变更消息不能代替上面的步骤,因为不能保证客户端可以收到所有的变更消息。
额外信息(Additional information)
要获得额外信息或者讨论这个指引的特定方面,请发消息到Redis Google Group。
===============================================================================
大家好,我是阮威。华中科技大学,计算机软件专业硕士。毕业后加入腾讯,先后在腾讯电子商务部和无线游戏产品部工作,现供职于欢聚时代基础产品部。IT男,至今。欢迎大家收听我的公众账号。
分享到:
相关推荐
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
内容概要:本文介绍了使用 Matlab 实现 SO-CNN-SVM 框架进行多输入单输出回归预测的全过程。该框架利用蛇群优化算法(SO)优化卷积神经网络(CNN)和 支持向量机(SVM),实现高效的特征提取和回归预测。文章详细描述了数据预处理、模型构建、SO算法优化、模型训练、可视化和 GUI 设计的步骤,并提供了完整的代码示例。 适合人群:具备一定机器学习和深度学习基础,熟悉 Matlab 编程的研究人员和开发人员。 使用场景及目标:① 工业制造中的设备故障预测和质量控制;② 金融分析中的市场价格预测和风险管理;③ 环境监测中的气候变化和空气质量预测。该框架的目标是提高预测精度,优化模型参数,缩短训练时间,增强模型泛化能力。 阅读建议:本文不仅详细介绍了理论背景和技术细节,还提供了实际操作的代码和 GUI 设计思路,建议读者在阅读过程中结合实际数据和代码进行实验,以更好地理解和掌握相关技术。
Java系统源码+社区养老服务系统 内容概要: 本资源包含了完整的Java前后端源码及说明文档,适用于想要快速搭建并部署Java Web应用程序的开发者、学习者。 技术栈: 后端:Java生态系统,包含Spring Boot、Shiro、MyBatis等,数据库使用Mysql 前端:Vue、Bootstrap、Jquery等 适用场景示例: 1、毕业生希望快速启动一个新的Java Web应用程序。 2、团队寻找一个稳定的模板来加速产品开发周期。 3、教育机构或个人学习者用于教学目的或自学练习。 4、创业公司需要一个可以立即投入使用的MVP(最小可行产品)。
Java系统源码+健身房管理系统 内容概要: 本资源包含了完整的Java前后端源码及说明文档,适用于想要快速搭建并部署Java Web应用程序的开发者、学习者。 技术栈: 后端:Java生态系统,包含Spring Boot、Shiro、MyBatis等,数据库使用Mysql 前端:Vue、Bootstrap、Jquery等 适用场景示例: 1、毕业生希望快速启动一个新的Java Web应用程序。 2、团队寻找一个稳定的模板来加速产品开发周期。 3、教育机构或个人学习者用于教学目的或自学练习。 4、创业公司需要一个可以立即投入使用的MVP(最小可行产品)。
阵列信号处理中,均匀线阵条件下,分析不同信噪比条件下,幅相误差对于测向角度偏差的影响
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
瓶罐检测26-CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rarDetectResiduos-V1 2024-02-24 3:32 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括6821张图像。 工具以创建格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 应用以下扩展来创建每个源图像的3个版本: *水平翻转的50%概率 *垂直翻转的50%概率 * -15和+15度之间的随机旋转 * 0到1.5像素之间的随机高斯模糊
名片管理系统.pdf
瓶子检测3-YOLOv9数据集合集.rarMY_DATASET11-V1 2022-12-28 1:46 AM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括1001张图像。 塑料 - 玻璃金属纸纸以yolov9格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整到224x224(拉伸) 没有应用图像增强技术。
水瓶瓶罐检测58-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rarQaldyq Suryptau-V2 2024-02-26 8:05 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括2328张图像。 以可可格式注释了金属 - 柔性 - plastmassa-qaldyq。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为416x416(拉伸) 应用以下扩展来创建每个源图像的3个版本: *随机裁剪图像的0%至10% * -15和+15度之间的随机旋转 *随机的BRIGTHNESS调整-10%至+10% * -7%至 +7%之间的随机暴露调整
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
使用精品酒销售管理系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等。 用户可以实现主页、个人中心、我的收藏管理、订单管理等。 前台首页可以实现商品信息、新闻资讯、我的、跳转到后台、购物车等。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
1_io_thread_1734442494401.wmv
java 一个基于Java Web的在线问卷调查系统源码实例 一个基于Java Web的在线问卷调查系统源码实例
网站前台注重的功能实现包括会员注册、系统公告、项目查看、在线留言、关注收藏项目、众筹项目申请,网站后台注重的功能实现包括系统用户管理、用户注册审核、项目类别管理、项目信息管理、投资申请查看、投资申请审核、申请结果反馈。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
以下是一个关于毕业设计的资源描述和项目源码的简要概述: 资源描述 该毕业设计项目为一个基于Spring Boot的在线学习系统。该项目使用了丰富的资源来确保项目的顺利完成。首先,通过数字图书馆和在线数据库(如谷歌学术)获取了大量的相关文献和最新研究成果,为项目的理论基础提供了坚实的支撑。其次,参考了一些电子书籍和国内外教程资源,学习了相关的开发技巧和最佳实践。此外,项目还利用了Spring Boot、MyBatis等开源框架,以及MySQL数据库,这些资源大大提高了开发效率和系统的稳定性。 在开发过程中,还参与了线上和线下的技术培训和研讨会,与其他开发者交流经验,解决了一些技术难题。这些活动不仅提供了宝贵的学习机会,还帮助更好地理解了项目的需求和实现方式。 项目源码概述 该项目源码主要包括以下几个部分: 后端代码:基于Spring Boot框架,实现了用户管理、课程管理、在线学习、模拟考试等功能。 前端代码:使用HTML、CSS和JavaScript(可能使用Vue.js或React.js)等技术,构建了友好的用户界面,使用户能够方便地浏览课程、进行在线学习和考试。 数据库脚本
如果在运维环境中,尤其是乙方,甲方客户为了安全一般不允许上传破解/绿色版等运维软件,这时候如果有官网下载的运维工具且是免费的,那不就可以正常使用了。 8款软件,显示版本到6,以后可不可以不清楚,现在我用绿色版用不上这个。 包含:xfile、xftp、xlpd、xmanager、xmanager 3d、xmanager powersuite、xshell、xshell plus
广东省深圳市公司申请助理级职称的主要步骤
杂货产品检测43-YOLO(v5至v9)、CreateML、Paligemma、TFRecord、VOC数据集合集.rarIPCV分配-V6 2024-01-21 6:10 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括7012张图像。 家庭废物以createMl格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 没有应用图像增强技术。