假设典型web服务的关注点的典型分离:
为确保客户端API(自定义代码)的正常运行时间,Cassandra的高可用性特性是什么?
典型的解决办法包括:
然而,我似乎找不到太多提到这一点,包括提到“最佳实践”或“这是我所做的”。
具体来说,我目前正在学习Cassandra,我有兴趣将它介绍给Zend Framework (PHP)项目,并想知道从多个客户机-API机器到Cassandra的高可用性连接的最佳实践。
可以管理一次故障,但由于单个节点失败而导致的服务停机时间显然不理想。
此外,在上述的高可用性环境中,解释如何在Cassandra中管理拆分大脑的奖励积分也是如此。
发布于 2013-09-10 06:00:39
卡桑德拉通过设计支持容错/ HA。要理解这一点,请阅读卡桑德拉中的暗示的传递和消息路由。
对于拆分大脑处理,您可能会考虑使用笼 java库来实现分布式同步功能/锁等。
来自http://www.datastax.com/documentation/articles/cassandra/cassandrathenandnow.html
Cassandra使用复制来实现高可用性和持久性。每个数据项在N个主机上被复制,其中N是配置为\per-实例的复制因子。每个键k被分配给一个协调器节点。协调器负责复制属于其范围内的数据项。除了在其范围内本地存储每个密钥之外,协调器还在环中的N-1节点上复制这些密钥。Cassandra为客户端提供了各种需要复制数据的选项。Cassandra通过放宽仲裁要求,为节点故障和网络分区的存在提供持久性保证。
如果客户端正在连接到集群中的随机节点(例如node1 ),则可能出现以下情况:
读
成功的node1已启动,并具有所请求的数据
成功的node1已经启动,并且没有被请求的数据,因此充当一个协调节点,并将请求路由到有数据的副本,node2说。假设node2已打开,并可以为请求提供服务
节点下移,node1已关闭,并具有所请求的数据。客户端接收UnAvailableException并可以连接到集群中的其他节点。如果提供查询所需的最小副本能够响应,那么它将是成功的。
node1下的副本节点是向上的,没有请求的数据,因此充当协调节点,并将请求路由到具有数据的副本,node2说。假设node2已关闭,不能为请求提供服务。如果其他副本没有死,并能够满足请求,它将是成功的。如果副本在发送请求时启动,但在抛出TimedOutException之后立即下降。客户端可以连接到集群中的其他节点。
写
成功的node1已经启动,并且还应该存储所请求的数据
成功的node1已经启动,并且没有请求的数据令牌范围(没有存储此数据的责任),因此充当一个协调节点,并将请求路由到副本,比如node2,它应该存储数据。假设node2已启动,并可以为请求提供服务。
节点下移,node1被关闭,并且还假设存储所请求的数据。客户端接收UnAvailableException并可以连接到集群中的其他节点。由于主节点已关闭,暗示的传递请求将存储在副本中。
node1下的副本节点是向上的,并且没有请求的数据令牌范围(没有存储此数据的责任),因此充当一个协调节点,并将请求路由到副本,比如node2,它应该存储数据。假设node2已关闭,不能为请求提供服务。如果其他副本没有死,并能够满足请求,它将是成功的。暗示的切换将写在副本/协调器节点上。
https://stackoverflow.com/questions/18696685
复制相似问题