`
powersoft
  • 浏览: 198614 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
53a63413-d61c-321e-8dc6-5008e88923c6
Redis官方文档翻译和源...
浏览量:191383
社区版块
存档分类
最新评论

Redis官方文档(17) ——高可用客户端指引

阅读更多
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男,至今。欢迎大家收听我的公众账号。
1
1
分享到:
评论

相关推荐

    Redis官方文档.zip_redis

    **Redis官方文档详解** Redis,全称Remote Dictionary Server,是一个开源的、支持网络的、键值存储系统。它通常被用作数据库、缓存和消息代理。Redis以其高性能、丰富的数据结构以及简单易用的API而闻名。此文档将...

    redis的mac客户端管理工具

    redis客户端的连接工具,mac版本,版本号0.9.3,通过该软件可以再mac上查询redis数据库中的相关数据,比起命令行方便很对

    Redis图形化桌面客户端

    **Redis图形化桌面客户端详解** Redis,全称Remote Dictionary Server,是一种开源的、基于内存的键值存储系统,常用于数据库、缓存和消息中间件等场景。它以其高性能、低延迟以及丰富的数据结构而备受青睐。为了...

    redis客户端工具(绿色版)

    Redis是一种高性能的键值对数据存储系统,常用于缓存、消息队列和数据库等多个场景。RedisClient作为Redis的客户端工具,为开发者提供了一个图形化的界面来与Redis服务器交互,使得管理和操作Redis数据库变得更加...

    redis客户端免安装版

    Redis是一款开源、高性能的键值对存储系统,常被用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,适用于处理各种数据存储需求。本资源提供的“redis客户端免安装版”是...

    redis客户端

    RedisClient是Redis客户端的GUI工具,使用Java swt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用。RedisClient将redis数据以资源管理器的界面...

    redis客户端连接工具 RedisDesktopManager

    Redis是世界上最受欢迎的内存数据存储系统之一,常用于构建高性能、低延迟的数据缓存和数据库。RedisDesktopManager是一款跨平台的图形用户界面(GUI)工具,使得开发者和管理员能够便捷地管理和操作Redis服务器,...

    linux版连接redis客户端

    日常使用linux版连接redis客户端Another-Redis-Desktop-Manager.1.3.9

    redis mac 客户端

    在使用过程中,如果遇到任何问题,可以通过查阅官方文档或在线社区寻求帮助,因为作为一款开源软件,它拥有活跃的开发者社区和丰富的资源支持。总的来说,Redis Desktop Manager for Mac 0.9.3.39是Mac用户管理和...

    Redis 中文文档.pdf

    Redis 的 Sentinel 集群是一种高可用性的解决方案,允许客户端创建一个或多个 Sentinel 节点,用于监控 Redis 服务器的状态、自动故障转移、实现高可用性等功能。 八、命令参考 Redis 提供了多种命令,包括 STRING...

    最新版redis官方中文说明文档(2016)

    主从复制是Redis高可用性方案的一部分,通过复制数据到多个从节点,可以提高服务的可用性和容错性。当主节点出现问题时,可以快速切换到从节点。此外,Redis还支持Sentinel哨兵系统,监控并自动处理主从故障。 发布...

    redis 高可用详细文档

    为了更好地管理和使用Redis Sentinel系统,文档还提供了一些实用资源,例如源码包和配置文件,以及相关的参考文章和常见问题解答(FAQ),以便于读者更好地理解和操作Redis Sentinel高可用架构。

    redis-windows客户端

    redis-windows客户端redis-windows客户端redis-windows客户端redis-windows客户端

    redis-desktop-manager 客户端

    Redis 客户端Redis 客户端Redis 客户端Redis 客户端Redis 客户端Redis 客户端Redis 客户端

    Redis 中文文档

    Redis 的官方文档非常详尽,包含了从基础概念到高级特性的详细介绍。下面将根据提供的部分内容,对Redis中的关键知识点进行解析。 #### 三、键空间通知(keyspace notification) 键空间通知是Redis为客户端提供的...

    Redis高可用集群Java(jedis客户端)操作源码.zip

    本资料包含的是使用Java的jedis客户端操作Redis高可用集群的源码示例。通过这份资料,我们可以深入理解如何在Java应用中实现对Redis集群的高效且可靠的访问。 首先,让我们了解一下Redis集群的基本概念。Redis集群...

    Redis 中文文档-01061629.pdf

    Redis 的集群功能使得多个 Redis 服务器可以组成一个集群,以便提供更高的性能和可用性。 通信协议(Protocol) Redis 的通信协议是基于 TCP 的,可以通过 Telnet 等工具来连接 Redis 服务器。 命令参考 Redis ...

    redis安装包(windows版)及客户端

    1. 高性能:Redis是基于内存的,数据读取速度极快,适合处理高并发的场景。 2. 数据结构丰富:Redis提供了字符串、哈希、列表、集合、有序集合等多种数据结构,适合构建复杂的应用场景。 3. 支持事务:Redis支持事务...

    redis官网最新客户端

    "redis官网最新客户端"指的是Redis官方发布的最新版本的客户端软件,它具备强大的功能,尤其是能够修改Redis中的单条数据。 Redis客户端的基本操作包括但不限于以下几点: 1. **连接与断开**:客户端需要连接到...

    redis官方图形化客户端

    8. **跨平台性**:作为官方客户端,它通常会提供Windows、Linux和macOS等主流操作系统的版本,以满足不同用户的需求。 9. **版本兼容性**:客户端会定期更新,以保持与最新版本的Redis服务器兼容,确保用户能顺利...

Global site tag (gtag.js) - Google Analytics