首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Cassandra高可用性

Apache Cassandra高可用性
EN

Stack Overflow用户
提问于 2013-09-09 10:58:07
回答 1查看 1.2K关注 0票数 1

假设典型web服务的关注点的典型分离:

  • 多个客户端-API机器(、Apache2/PHP、自定义代码)
  • 卡桑德拉存储集群
  • 5+客户端-API机器每卡桑德拉节点

为确保客户端API(自定义代码)的正常运行时间,Cassandra的高可用性特性是什么?

典型的解决办法包括:

  • 具有健康监测功能的内部负载平衡器(普通负载平衡器HA适用于此处)
  • 或在客户端库中配置多个备份节点in,以随机或顺序尝试连接。
  • 在应用程序代码中模拟客户机库对此的处理(尝试多个节点,直到一个节点连接)

然而,我似乎找不到太多提到这一点,包括提到“最佳实践”或“这是我所做的”。

具体来说,我目前正在学习Cassandra,我有兴趣将它介绍给Zend Framework (PHP)项目,并想知道从多个客户机-API机器到Cassandra的高可用性连接的最佳实践。

可以管理一次故障,但由于单个节点失败而导致的服务停机时间显然不理想。

此外,在上述的高可用性环境中,解释如何在Cassandra中管理拆分大脑的奖励积分也是如此。

EN

回答 1

Stack Overflow用户

发布于 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已关闭,不能为请求提供服务。如果其他副本没有死,并能够满足请求,它将是成功的。暗示的切换将写在副本/协调器节点上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18696685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档