有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Couchbase集群:一个节点关闭=>整个集群关闭?

我正在测试Couchbase服务器2.5`。我有一个包含7个节点和3个复制的集群。在正常情况下,系统工作正常

但我在这个测试用例中失败了: Couchbase cluster提供40000次操作,我在一台服务器上停止Couchbase服务=>;一个节点关闭。在那之后,整个集群的性能会大大降低。它只能在1000次操作以下运行。当我单击fail over(故障转移)时,整个集群将恢复正常

我认为当一个节点关闭时,只有部分请求受到影响。是这样吗

而实际上,当一个节点宕机时,会对整个集群造成很大的影响吗

更新:

我编写了一个使用Spymecached进行负载测试的工具。这个工具创建多线程来连接Couchbase集群。每个线程设置一个密钥并立即获取该密钥进行检查,如果成功,则继续设置/获取另一个密钥。如果失败,它将重试设置/获取,如果失败5次,则通过该键

这是我设置/获取失败时的密钥日志

2014-04-16 16:22:20.405信息网。间谍memcached。MemcachedConnection:由于在{QA sa=/10.0.0.23:11234,#Rops=2,#Wops=0,#iq=0,topRop=Cmd:1不透明:2660829键:test_Key_2681412 Cas:0 Exp:0标志:0数据长度:800,topWop=null,toWrite=0,interest=1}上处理memcached操作时出现异常而重新连接。这可能是由于身份验证失败。 操作异常:服务器:内部错误 在网上。间谍memcached。协议BaseOperationImpl。handleError(BaseOperationImpl.java:192) 在网上。间谍memcached。协议二进制的操作简单。getStatusForErrorCode(OperationImpl.java:244) 在网上。间谍memcached。协议二进制的操作简单。finishedPayload(OperationImpl.java:201) 在网上。间谍memcached。协议二进制的操作简单。readPayloadFromBuffer(OperationImpl.java:196) 在网上。间谍memcached。协议二进制的操作简单。readFromBuffer(OperationImpl.java:139) 在网上。间谍memcached。MemcachedConnection。readBufferAndLogMetrics(MemcachedConnection.java:825) 在网上。间谍memcached。MemcachedConnection。HandlerReads(MemcachedConnection.java:804) 在网上。间谍memcached。MemcachedConnection。HandlerReadsAndWrites(MemcachedConnection.java:684) 在网上。间谍memcached。MemcachedConnection。handleIO(MemcachedConnection.java:647) 在网上。间谍memcached。MemcachedConnection。handleIO(MemcachedConnection.java:418) 在网上。间谍memcached。MemcachedConnection。运行(MemcachedConnection.java:1400) 2014-04-16 16:22:20.405警告网。间谍memcached。MemcachedConnection:关闭并重新打开{QA sa=/10.0.0.23:11234,#Rops=2,#Wops=0,#iq=0,topRop=Cmd:1不透明:2660829密钥:测试密钥2681412 Cas:0 Exp:0标志:0数据长度:800,topWop=null,toWrite=0,interest=1},尝试0。 2014-04-16 16:22:20.406警告网。间谍memcached。协议二进制的BinaryMemcachedNodeImpl:丢弃部分完成的op:Cmd:1不透明:2660829密钥:test_Key_2681412 Cas:0 Exp:0 Flags:0数据长度:800 2014-04-16 16:22:20.406警告网。间谍memcached。协议二进制的BinaryMemcachedNodeImpl:丢弃部分完成的op:Cmd:0不透明:2660830键:test_键_2681412 取消 2014-04-16 16:22:20.407误差网。间谍memcached。协议二进制的StoreOperationImpl:错误:内部错误 2014-04-16 16:22:20.407信息网。间谍memcached。MemcachedConnection:由于在{QA sa=/10.0.0.24:11234、#Rops=2、#Wops=0、#iq=0、topRop=Cmd:1不透明:2660831密钥:测试密钥_2681412CAS:0 Exp:0标志:0数据长度:800、topWop=null、toWrite=0、Interest=1}上处理memcached操作时出现异常而导致重新连接。这可能是由于身份验证失败。 操作异常:服务器:内部错误 在网上。间谍memcached。协议BaseOperationImpl。handleError(BaseOperationImpl.java:192) 在网上。间谍memcached。协议二进制的操作简单。getStatusForErrorCode(OperationImpl.java:244) 在网上。间谍memcached。协议二进制的操作简单。finishedPayload(OperationImpl.java:201)在网上。间谍memcached。协议二进制的操作简单。readPayloadFromBuffer(OperationImpl.java:196) 在网上。间谍memcached。协议二进制的操作简单。readFromBuffer(OperationImpl.java:139) 在网上。间谍memcached。MemcachedConnection。readBufferAndLogMetrics(MemcachedConnection.java:825) 在网上。间谍memcached。MemcachedConnection。HandlerReads(MemcachedConnection.java:804) 在网上。间谍memcached。MemcachedConnection。HandlerReadsAndWrites(MemcachedConnection.java:684) 在网上。间谍memcached。MemcachedConnection。handleIO(MemcachedConnection.java:647) 在网上。间谍memcached。MemcachedConnection。handleIO(MemcachedConnection.java:418) 在网上。间谍memcached。MemcachedConnection。运行(MemcachedConnection.java:1400) 2014-04-16 16:22:20.407警告网。间谍memcached。MemcachedConnection:关闭并重新打开{QA sa=/10.0.0.24:11234,#Rops=2,#Wops=0,#iq=0,topRop=Cmd:1不透明:2660831键:test_键2681412 Cas:0 Exp:0标志:0数据长度:800,topWop=null,toWrite=0,interest=1},尝试0。 2014-04-16 16:22:20.408警告网。间谍memcached。协议二进制的BinaryMemcachedNodeImpl:丢弃部分完成的op:Cmd:1不透明:2660831密钥:test_密钥_2681412 Cas:0 Exp:0标志:0数据长度:800 2014-04-16 16:22:20.408警告网。间谍memcached。协议二进制的BinaryMemcachedNodeImpl:丢弃部分完成的op:Cmd:0不透明:2660832键:test_键_2681412 取消


共 (1) 个答案

  1. # 1 楼答案

    您应该发现,您的6/7(即85%)的业务应继续以相同的性能运行。然而,15%的操作是针对现在已关闭的节点所拥有的vbuckets的,这些操作永远不会完成,并且可能会超时,因此,根据应用程序处理这些超时的方式,总体上可能会看到更大的性能下降

    你是如何设定绩效基准/衡量绩效的

    更新:OP的额外细节

    I wrote a tool to load test use spymemcached. This tool create multi-thread to connect to Couchbase cluster. Each thread Set a key and Get this key to check immediately, if success it continues Set/Get another key. If fail, it retry Set/Get and by pass this key if fail in 5 times.

    Java SDK旨在利用异步操作来实现最高性能,尤其是当集群降级且某些操作将超时时。我建议开始在单个线程中运行,但使用Futures来处理设置之后的get。例如:

    client.set("key", document).addListener(new OperationCompletionListener() {
        @Override
        public void onComplete(OperationFuture<?> future) throws Exception {
            System.out.println("I'm done!");    
        }
    });
    

    这是Java开发者指南Understanding and Using Asynchronous Operations部分的摘录

    基本上没有理由认为,如果代码正确,在85%的节点处于运行状态的情况下,在短时间的停机时间内,您的性能不应该接近最大值的85%

    请注意,如果一个节点长时间停机,则其他节点上的复制队列将开始备份,这可能会影响性能,因此建议使用自动故障切换/重新平衡来恢复到100%的活动存储桶,并重新创建副本,以确保任何进一步的节点故障不会导致数据丢失