2015-07-10 104 views
1

我指的是this文档的应用程序堆栈部分中的Couchbase服务器,概述了Couchbase群集的所需架构。Couchbase群集故障转移架构

我注意到图中的5个Couchbase节点都有相应的Web服务器。我也知道Couchbase SDK旨在建立到单个节点的连接,并为所有请求保留该连接,但故障切换事件除外。

首先,我想确认图中5个Web服务器中的每一个都将建立到5个Couchbase节点之一的单个连接。我认为会导致1:1的关系;每个Web服务器都将连接到相应的Couchbase节点,从而不会有2个Web服务器建立到同一个Couchbase节点的连接。

如果是这种情况,那么在发生Couchbase节点故障时,假设该节点是不可恢复的,我应该删除相应的Web服务器吗?这可能看起来不直观,但这里的情况是我的理解:

  1. Couchbase节点#1死
  2. Web服务器#1(连接到Couchbase节点1#)建立到下一个可用节点的连接, Couchbase节点#2(大多数SDK处理这个,FAIA)
  3. Couchbase节点#2现在有2个已建立的连接;从Web服务器#2(其对应的服务器)和现在也从网络服务器#1(其对应Couchbase节点是死的)

我担心的是我已经注意到短暂端口耗尽问题与Couchbase Server中,建立更多的时候而不是1个连接到单个节点。 This generally results in client timeouts

获取http://0.0.0.0:8091/pools:拨打TCP 0.0.0.0:8091:操作超时 出

再次,在此基础上,当Couchbase节点死亡是否也应该删除相应的Web服务器,以避免到同一个Couchbase节点的多个连接,以及潜在的临时端口耗尽?

回答

1

Web服务器和Couchbase节点之间没有1:1的关系。每个Web服务器都有连接到每个Couchbase节点。在Couchbase中,群集的每个节点的整个数据集的百分比均处于活动状态,而不是完整副本。 Couchbase自动分割数据,并且这些分片(vBuckets)均匀分布在整个集群中。

因此,当Web服务器或应用程序服务器要读取/写入对象时,它将转到拥有该对象所在的vBucket的集群中的对应节点。在Couchbase软件开发工具包中有一个一致的散列,它取得每个对象的ID,散列的输出是1到1024之间的数字。有1024个活动vBuckets,每个副本有另外1024个。因此,该一致性的输出是vBucket对象将居住的ID是否有意义?然后,SDK快速查找其集群映射的副本(每当集群拓扑发生变化时都会更新),集群的哪个节点位于该集群的哪个节点上,然后直接与该对象的特定节点进行交互。

所以你的失败情况并不完全正确。如果Couchbase群集的节点发生故障,则只有该节点上的vBuckets不可用。所以只有整个数据集的一个百分比。如果您启用了自动故障(默认为关闭),那么在群集中设置超时之后,群集将自动使节点超时失效,并将副本v箱料提升为活动状态,从而使您回到100%活动数据集。集群基本上牺牲了这些副本vBuckets。由于这是一个拓扑变化,所以新的群集映射会通过SDK发送到您的客户端应用程序,并且实时移动。此外,您需要重新平衡群集以重新生成那些现在缺少副本vBuckets并让您恢复正常。

至于你的临时端口耗尽,你如何管理你的集群连接?您是否重复使用连接或每次打开新连接然后不关闭它们?你想打开连接并重复使用它们,而不是一遍又一遍地打开新的连接。如果你每次打开新文件而没有清理,你肯定会耗尽你的端口,因此文件描述符。就像我说的,重用它们。

相关问题