Sentinel API

默认情况下,Sentinel使用TCP端口26379运行(6379是正常的Redis端口)。

Sentinel 命令

  • PING 这个命令只返回PONG.
  • SENTINEL masters 显示受监视的主节点列表及其状态。
  • SENTINEL master 显示指定master的状态和信息 。
  • SENTINEL slaves 显示指定master的从节点列表及其状态 。
  • SENTINEL sentinels 显示指定master的sentinel列表及其状态。
  • SENTINEL get-master-addr-by-name    根据master名称返回主机的ip和端口号。 如果此主服务器的故障转移正在进行或已成功终止,它将返回从slave提升master的服务器的地址和端口。
  • SENTINEL reset 此命令将重置所有满足名称匹配的masters。pattern参数是一个全局样式的模式。 重置进程会清除master进程中的任何先前状态( 包括正在进行的故障转移), 并移除所有已发现并与主节点关联的从属节点和哨兵节点。
  • SENTINEL failover 强制进行故障转移,就像master节点不可用的状态一样,并且没有请求其他 Sentinels的同意
  • SENTINEL ckquorum 检查当前 Sentinel配置是否能够达到 master故障转移所需的法定人数 , 以及授权故障转移所需的大多数仲裁 。 此命令应用于监视系统,以检查 Sentinel 部署是否正常。
  • SENTINEL flushconfig 强制Sentinel重写配置到磁盘上,包括当前的Sentinel状态。 通常,每当某个配置的状态发生变化时,Sentinel都会重写该配置 ( 持久化在磁盘上的状态子集的上下文能在重新启动时继续有效 ). 然而,有时配置文件可能由于操作错误、磁盘故障、包升级脚本或配置管理器而丢失。 在这些情况下,强制Sentinel重写配置文件的方法非常方便。 即使完全没有前面的配置文件,该命令也可以工作。

运行时重配置Sentinel

从Redis 2.8.4版本开始,Sentinel提供了一个API,用于添加、删除或更改给定 master的配置。 注意,如果您有多个 sentinels ,应该将更改应用于所有实例,以使Redi sentinels 正常工作。 这意味着,更改单个 Sentinel的配置不会自动将更改传播到网络中的其他Sentinel。

下面是用于更新Sentinel实例配置的SENTINEL子命令列表。

  • SENTINEL MONITOR 此命令告诉Sentinel开始监视给定名称、ip、端口和法定人数的新master。 它与sentinel.conf配置文件中的sentinel monitor配置指令相同,不同之处在于不能在ip中使用主机名,但需要提供IPv4或IPv6地址。
  • SENTINEL REMOVE 用于删除指定的master: master将不再被监视,并且将完全从Sentinel的内部状态中移除,因此 SENTINEL masters 命令将不会列出它的信息。
  • SENTINEL SET SET命令与Redis的 CONFIG SET 命令非常相似,用于更改指定 master的配置参数。 可以指定多个选项/值对(或者根本不指定)。 可以通过sentinel.conf配置的所有配置参数也可以使用SET命令进行配置。

下面是一个SENTINEL SET命令示例,用于修改名为objects-cache的master的down-after-milliseconds 配置

SENTINEL SET objects-cache-master down-after-milliseconds 1000

如前所述,可以使用SENTINEL SET设置启动配置文件中可设置的所有配置参数。 此外,可以只更改主仲裁配置,而无需删除和重新添加主仲裁,只需简单地使用

SENTINEL SET objects-cache-master quorum 5

增加或移除Sentinels

向部署中添加一个新的Sentinel是一个简单的过程,因为Sentinel实现了自动发现机制。你所需要做的就是启动新的Sentinel,此sentinel被配置监视当前活跃的master。 在10秒内, Sentinel 将获得其他 Sentinel的名单和附属于 master 的一组 slaves。 如果您需要同时添加多个 Sentinels,建议一个接一个地添加,等待新添加的sentinel完全加入通信之后再继续添加下一个。这是为了防止在添加的过程当中出现网络分区,保证大多数节点在正常的网络分区内。在添加结速之后,可以使用命令SENTINEL MASTER mastername来检查所有 Sentinels 是否同意监视MASTER的 Sentinels 总数。

移除一个 Sentinel有点复杂: Sentinels永远不会丢弃已经通信过的Sentinels的信息 即使很长一段时间都无法通信。 因此,要删除一个 Sentinel,应该在没有网络分区的情况下执行以下步骤:

  1. 停止要删除的Sentinel进程。
  2. 在所有其它的Sentinel实例实行 SENTINEL RESET * 命令( 如果只想重置单个master,将*号换成确切的master名称)。 一个接一个地操作,在实例之间至少等待30秒。
  3.  在每个 Sentinel 执行 SENTINEL MASTER mastername 命令,检查所有Sentinels是否同意当前活跃的Sentinels数量。

移除旧master或无法访问的slaves

Sentinels永远不会丢弃某个master的salves,即使他们长时间无法通信。 这很有用,因为Sentinels应该能够在网络分区或故障事件之后正确地重新配置返回的 slave节点。 此外,在故障转移之后,故障转移后的master实际上作为新master的一个slave被添加进集群,通过这种方式,它将被重新配置,以便从新主服务器复制数据从而达到尽可能快地可用。

然而,有时您想要从 Sentinels监视的 slaves 列表中永远删除一个 slave (可能是旧的master)。

为此,您需要在所有的Sentinels 中执行 SENTINEL RESET mastername 命令: 他们将在接下来的10秒内刷新slaves列表, 只添加从当前 master INFO输出中正确复制的从服务器列表。

发布/订阅 消息

客户端可以使用一个 Sentinel,因为它是一个与Redis兼容的发布/订阅 服务器( 但是不能使用 PUBLISH) 以便 SUBSCRIBE 或 PSUBSCRIBE 频道并获取关于特定事件的通知。

channel名称与事件名称相同。 例如,名为+sdown的通道将接收与输入SDOWN条件的实例相关的所有通知(SDOWN意味着从要查询的Sentinel的角度来看,该实例不再是可访问的 )。

要获得所有消息,只需使用 PSUBSCRIBE * 订阅即可。

下面是有频道列表和使用此API可以接收消息格式 。 第一个单词是 频道/事件名,剩下的是数据格式。

    @   

标识master的部分(从@参数到结尾)是可选的并且仅当实例本身不是master时才需要指定。

  • +reset-master -- master被重置。
  • +slave -- 发现并连接了一个新slave。
  • +failover-state-reconf-slaves -- 故障转移状态更改为reconf-slaves状态。
  • +failover-detected -- 检测到由另一个 Sentinel或任何其他外部实体启动的故障转移 (依附的slave变成master)。
  • +slave-reconf-sent -- leader sentinel会发送SLAVEOF 命令给此实例,以便将它重新配置为salve。

 

 

 

转载于:https://my.oschina.net/jennerlo/blog/3071256

你可能感兴趣的:(数据库,网络)