2012-04-12 67 views
2

我遇到的情况是,我目前有3个memcached实例在3个不同的服务器上运行。我的应用程序目前位于同一个3个不同的节点上。所有的应用程序服务器都知道所有的memcached服务器,但是如果其中一个出现故障,我无法注意到。 这个想法是将memcached服务器移动到自己的节点。使用memcached存储桶掌握Couchbase

我已经开始考虑CouchBase作为解决这个问题的替代方案,但不确定它会工作。

它会工作吗,以便我在每个应用程序节点上都有一个CouchBase集群,然后将它们连接到不同的memcached服务器,然后CouchBase将监视并知道哪些存活?

在这种情况下,如果某个memcached实例关闭,那么当前绑定到memcached实例的应用程序如何知道如何获取数据?或者是CouchBase会成为中间人关心在哪里存储它?

回答

2

Couchbase是一个非常自适应的平台,可以在替换标准memcached实例时使用。它允许您将很多容错从应用程序移动到couchbase实例。

当您使用PHP时,我建议您在访问Couchbase集群时使用PHP SDK。它可以在这里获得:http://www.couchbase.com/develop/php/current

现在,重要的是知道PHP的SDK是'vbucket意识'。这意味着当您使用它连接到Couchbase集群时,它将从您放入构造函数的地址收集所有节点的所有信息。例如:

#Create the Couchbase object 
$cb_obj = new Couchbase("127.0.0.1:8091", "user", "pass", "default"); 

这将创建一个对象,你可以通过将它自己的运行命令,能够处理所有的故障转移应该节点下去,所需等。每种语言都有它自己的小代码过程(我通常自己使用Python),但是一旦你熟悉它们,它们就非常有效。

可以通过命令行界面或通过访问http://<nodehostname>:8091/的网址来管理群集。这也是您在安装初始群集后将访问的URL。

我强烈建议Couchbase作为独立memcached的替代方案。

+0

谢谢,关于收集所有节点的信息的一个问题。这是否意味着如果我有一个带有e.x 2 couchbase服务器的集群,只需连接其中一个服务器,就可以使对象了解这两个节点?如果提供的服务器出现故障,它是否会尝试从其他节点获取?只是想知道当couchbase服务器出现故障时会发生什么情况,而不仅仅是memcached存储桶出现故障。 – Nitro 2012-04-16 09:04:13

+1

因此,初始通信获取vbuckets的列表,但它会检查更新vbucket信息的位置。通常最好的办法是设置一些像nginx这样的虚拟IP接口或代理,让您可以在所有节点上进行循环负载平衡。这样,如果其中一个节点出现故障,您仍然可以连接并获得这些vbucket更新,而无需更改代码以支持故障切换。除此之外,是的。只要它与Couchbase SDK交谈初始节点,它就会知道所有其他服务器并相应地分配流量。 – Drahkar 2012-04-18 16:21:48

1

借助Couchbase,您可以创建一个由三个节点组成的群集。在您的应用程序中,创建一个PHP(?)Couchbase客户端实例,并为其至少一个节点提供URI。客户端将从这些节点中的任何节点了解群集的拓扑。

客户端维护到集群的流式连接,并会通知拓扑结构的任何更改。如果一个节点关闭,客户端将作出相应的反应。

您可以设置自动故障转移和通知来提醒您自动故障转移事件。