1

我正在评估 Voldemort,遇到了一些与复制和故障转移相关的令人困惑的事情。我尝试制作一个简单的 2 节点集群配置,其中每个节点都是另一个节点的备份。因此,写入节点 1 的数据应复制到节点 2,反之亦然。在节点 1 故障转移的情况下,第二个节点应服务于客户端请求。节点 1 恢复后数据应该被传输回节点 1。我认为这是非常常见和明确的情况。所以我做了以下配置。

<cluster>
        <name>perf_cluster</name>

        <server>
                <id>0</id>
                <host>10.50.3.156</host>
                <http-port>8081</http-port>
                <socket-port>6666</socket-port>
                <admin-port>6667</admin-port>
                <partitions>0, 1, 2, 3</partitions>
                <zone-id>0</zone-id>
        </server>

        <server>
                <id>1</id>
                <host>10.50.3.157</host>
                <http-port>8081</http-port>
                <socket-port>6666</socket-port>
                <admin-port>6667</admin-port>
                <partitions>4, 5, 6, 7</partitions>
                <zone-id>0</zone-id>
        </server>
</cluster>

<stores>
  <store>
    <name>perftest</name>
    <persistence>memory</persistence>
    <description>Performance Test store</description>
    <owners>owner</owners>
    <routing>client</routing>
    <replication-factor>2</replication-factor>
    <required-reads>1</required-reads>
    <required-writes>1</required-writes>
    <key-serializer>
      <type>string</type>
    </key-serializer>
    <value-serializer>
      <type>java-serialization</type>
    </value-serializer>
  </store>
</stores> 

我执行以下测试:

  • 启动两个节点;
  • 使用 'bin/voldemort-shell.sh perftest tcp://10.50.3.156:6666' 通过 shell 连接集群;
  • 把键值“1”“a”;
  • 执行 'preflist "1"' 返回我的 'Node 1' 'Node 0' 所以我假设 'get' 请求将首先发送到节点 1;
  • 崩溃节点 1;
  • 获取密钥“1”。我看到一些与连接丢失有关的错误,但最终它返回了正确的值;
  • 启动节点 1;
  • 获取密钥“1”。它说节点 1 可用,但返回“null”而不是值。所以我假设节点 1 没有从节点 0 获取数据,并且由于我的 required-reads = 1 它不要求节点 0 并返回 null。
  • 崩溃节点 0;
  • 密钥“1”永远丢失,因为它没有复制到节点 1。

我非常确定我误解了配置或集群复制详细信息中的某些内容。您能否解释一下为什么恢复后数据不会从节点 0 复制回节点 1?复制是客户的责任,而不是服务器的责任,我说得对吗?如果是这样,节点恢复后应该如何复制数据?

提前致谢。

4

1 回答 1

0

我不知道你是否已经解决了这个问题,但看看:http ://code.google.com/p/project-voldemort/issues/detail?id=246

请记住,内存存储仅用于测试(junit)目的,您应该使用 readonly 或 bdb 存储。

于 2012-03-08T20:42:28.507 回答