很难理解一些事情。我在一个网关后面有两个复制服务主机(a和b)(将来最多可以扩展到3个)。每个服务主机需要保存其各自主机的一些数据/状态(键值)。为了避免spof,需要将相同的状态/数据复制到两台主机上,这样,如果一台服务器宕机,那么另一台服务器应该可以提供服务。请提出一些解决这个问题的机制(非常具体(如果有分布式框架)
主从复制:主机a为主,主机b从。但我的问题是:
来自主机b的所有写请求将通过主机a路由,然后最终路由到主机b。
另外,假设主机a坏了,那么就没有写操作,而b将被卡住,直到a恢复。
我的理解是正确的,写不能在奴隶?如果有一些解决办法,例如从主机升级到从主机,仍然存在重新路由问题,如前所述。
我认为解决方案可以使用其他方法(多主和无领导)实现,但不能得出任何结论。我试着比较其中的几个:
redis-默认情况下它是主从的,但是企业版也有主-主配置。所以这可能是一个可行的解决方案。
迪纳摩风格-里亚克,Cassandra,伏地魔等。不确定所涉及的复杂性
要求:
解决方案必须更简单、更轻量级,而不消耗服务主机的大量资源。
数据采用键值格式
读/写速度应该很快(最好是在内存中)
读/写操作的发生/频率不是很快。
数据量也非常少。任何主机上任何点的数据总大小不得超过1 mb。
2条答案
按热度按时间vyswwuz21#
cassandra的p2p特性使它明显优于其他系统,在这些系统中,用户不必担心如何以实现最大冗余的方式分发主服务器和从服务器。
使用sentinel有一个缺点-如果sentinel节点本身失败,那么整个系统都会受到影响。最好是水平和垂直缩放,即多主多从设置,主设备和从设备分布在节点上。
m0rkklqb2#
在集群模式或sentinel模式下使用redis都是一种选择。
redis集群:可以设置多个主从节点。当主机关闭时,redis将处理故障转移。
redis sentinel:您可以设置单个主从节点或多个,以及一个sentinel集群。故障转移时,sentinel将处理新的主选择。
我认为你不需要为你服务的每一个主机建立一个单独的数据库。相反,所有主机都可以连接到相同的redis集群。当其中一个主机或redis节点关闭时,它不会影响您的服务。