Couchbase服务器 - 如果一个节点停止,则无法执行获取或设置

时间:2012-11-09 16:06:23

标签: memcached couchbase

我在两个节点(Windows 2008 R2)上设置了Couchbase 1.8群集。

1)打开两台服务器上的所有必要端口,如下所示: http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-network-ports.html

2)我做了一个简单的设置,最初在一个新的Cluster上创建了Node A(172.30.75.53)。 将IPAddress更改为服务器的静态IP地址,如下所示: http://www.couchbase.com/docs/couchbase-manual-1.8/couchbase-bestpractice-cloud-ip.html 使用默认的Couchbase存储桶创建。

3)然后在节点B上安装Couchbase(172.30.75.55)。 将IPAddress更改为服务器的静态IP地址。

4)回到节点A,我将Node B添加到集群中。

5)Couchbase Web控制台中的初始重新平衡。

6)在Couchbase控制台中,我可以看到两个节点正常运行。

我创建了一个简单的应用程序C#示例应用程序,如下所示进行测试:

在指向节点A的配置文件中

var client = new CouchbaseClient();
var setResult = client.ExecuteStore(StoreMode.Set, "someKey", "someData", new    TimeSpan(7, 0, 0, 0)); 
var resultGet = client.ExecuteGet<string>("someKey");

然后可以执行Get and Set而不会出现任何问题(正如预期的那样)。

然后在我的配置文件中,更改为指向节点B.

然后可以按以下方式执行Get(按预期方式):     var resultGet = client.ExecuteGet(“someKey”);

在节点A上,运行以下命令关闭CouchBase服务: service_stop.bat

我的测试应用程序仍然指向节点B,仍然可以获取和设置(如预期的那样)。

在节点A上,通过运行以下命令启动Couchbase服务: service_start.bat 在节点B上,通过运行以下命令关闭CouchBase服务: service_stop.bat

然后在我的配置文件中,更改为指向节点A.

现在尝试在连接到节点A时执行以下Get和Set:     var setResult = client.ExecuteStore(StoreMode.Set,“someKey”,“someData”,new TimeSpan(7,0,0,0));     var resultGet = client.ExecuteGet(“someKey”);

获取如下错误:

- 存储操作失败,有关详细信息,请参阅InnerResult或StatusCode“ - 无法执行操作 -StatusCode:0

失败。有关详细信息,请参阅InnerException或StatusCode“ StatusCode:Null

因此得出结论:

a)可以使用节点A进行获取和设置,节点B正在运行。 (客户端连接到节点A或节点B)

b)可以在节点A停止和节点B运行时进行获取和设置。 (客户端连接到Node B)

c)无法进行获取和设置节点A正在运行且节点B已停止。 (客户端连接到节点A)

有什么想法吗?

谢谢,

马特

1 个答案:

答案 0 :(得分:0)

您的测试似乎是在单个密钥上进行单次获取/设置。如果是这种情况,那么正在发生的是该密钥在节点B上,因此当您停止节点B时,无法找到密钥。使用Couchbase,当节点关闭时,数据将无法访问,直到您使该节点失败。如果你在生产中运行,那么如果节点B发生故障你会做什么就会使该节点失败,然后一旦你修复了节点所遇到的任何问题,你就会把它添加回来并重新平衡。