killme2008 / carmine-sentinel

A Clojure library designed to connect redis by sentinel, make carmine to support sentinel.
Eclipse Public License 1.0
14 stars 4 forks source link

是否需要考虑订阅 majority 个 sentinel #12

Closed ylgrgyq closed 5 years ago

ylgrgyq commented 5 years ago

从目前的实现来看,只会订阅那个能成功拿到 master 节点配置的 sentinel,其它的 sentinel 不会进行订阅。但是比如有 A B C D E 这 5 个节点,如果只订阅 A,剩余节点按说是能凑够 qurum 重新选一个 master 出来的,在网络有隔离的时候 A 可能不知道当前 master 已切换,从而只订阅 A 的话这个 client 收不到 master 切换的通知。

ylgrgyq commented 5 years ago

一个想法是每次 ask-sentinel-master 都依次访问现有 sentinel specs 列表按指定的 master-name 拉取到所有 monitor 这个 master 的 sentinel 并 subscribe 他们。最多时每个 client 都会 subscribe 所有的 sentinel,与所有 sentinel 维持一个连接。任意一个 sentinel 发出 event 都能被 client 的 handler 处理。

或者简单点说就是将 subscribe sentinel 和请求 master 地址两个操作分开。subscribe sentinel 只是用于接收 master 发生切换的事情,收到切换就将现有对应的 master 设置无效。请求 master 地址的操作不再顺带 subscribe sentinel,只根据 subscribe sentinel 时得到的完整的 sentinel 服务列表去请求 master 地址。

考虑这个事情和 #11 分开,等待 #11 完成后再进行。