【问题标题】:Voldemort replication and failover detailsVoldemort 复制和故障转移详细信息
【发布时间】:2012-03-09 04:42:28
【问题描述】:

我正在评估 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?复制是客户的责任,而不是服务器的责任,我说得对吗?如果是,Node 恢复后应该如何复制数据?

提前致谢。

【问题讨论】:

    标签: replication failover voldemort


    【解决方案1】:

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

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

    【讨论】:

    • 我没有按照我想要的方式解决它。我在 Voldemort 中找到了一些脚本来执行手动集群同步。对我不好,我希望伏地魔会在开始时自动完成。
    • Voldemort 正在自动同步(复制因子)。正如我所展示的情况,复制似乎无法在连续分区中正常工作。请使用脚本生成分区并删除整个区域配置,以便您简化测试用例
    猜你喜欢
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多