2

Voldemort を使用してセットアップした複数のサーバーに Python クライアントを接続する際に問題が発生しています。Python 2.6.1 と Voldemort 0.81 を使用しています。具体的には、2 ノード クラスタを使用している場合、最初のサーバーへの接続には問題がないように見えますが、2 番目のサーバーへの接続には大きな問題が発生する可能性があります。これが私が使用している構成設定です(これが問題の原因となっている場合に備えて):

    cluster.xml:
    <cluster>
    <name> my_cluster </name>
      <server>
        <id>0</id>
        <host>1.2.3.4</host>
        <http-port>8000</http-port>
        <socket-port>6666</socket-port>
        <admin-port>6667</admin-port>
        <partitions>0,1,2,3</partitions>
      </server>
      <server>
        <id>1</id>
        <host>1.2.3.5</host>
        <http-port>8000</http-port>
        <socket-port>6666</socket-port>
        <admin-port>6667</admin-port>
        <partitions>4,5,6,7</partitions>
      </server>
    </cluster>

    stores.xml:
    <stores>
      <store>
        <name>multiple_nodes</name>
        <replication-factor>2</replication-factor>
        <preferred-reads>2</preferred-reads>
        <required-reads>2</required-reads>
        <preferred-writes>2</preferred-writes>
        <required-writes>2</required-writes>
        <persistence>bdb</persistence>
        <routing>client</routing>
        <key-serializer>
          <type>string</type>
        </key-serializer>
        <value-serializer>
          <type>string</type>
        </value-serializer>
      </store>
    </stores>

    server.properties:
    node.id = 0 #(or 1)
    max.threads = 100
    http.enable = true
    socket.enable = true
    bdb.write.transactions = true
    bdb.flush.transactions = true
    enable.nio.connector = true
    request.format = vp3
    store.configs = voldemort.store.bdb.BdbStorageConfiguration, voldemort.store.readonly.ReadOnlyStoreageConfiguration

また、値がjsonでエンコードされ、永続性がメモリ内にあるだけでこの問題が発生したため、問題がそこにあるとは思いません。2 台のマシンが同じラックにあり (それらの間の通信は些細なことです)、別のラックにある (それでも非常に高速である必要がありますが、直接接続されていません) でこれを試しました。Pythonで取得しているものは次のとおりです。

    >>>import voldemort
    >>>client0 = voldemort.StoreClient('multiple_nodes', [('0', 6666)])
    #That works just fine
    >>>client1 = voldemort.StoreClient('multiple_nodes', [('1', 6666)])
    WARNING:root:Metadata bootstrap from 1:6666 failed: Invalid Argument.
    line 278 in _bootstrap_metadata #(I'm omitting a few other lines here)
    voldemort.client.VoldemortException:'All bootstrap attempts failed'

サーバー「0」が実行されているマシン上にいる場合と、サーバー「1」が実行されているマシン上にいる場合、これと同じ結果になります。1つのクライアントalaから両方のサーバーに接続しようとしました:

    >>>client = voldemort.StoreClient('multiple_nodes', [('0', 6666), ('1', 6666)])

これはときどき機能しますが (ただし、テストの途中で失敗する可能性があります)、「WARNING:root:Metadata bootstrap from 1:6666 failed: Invalid Argument」のような警告で失敗し、クライアント オブジェクトが返されます。

この問題を解決する方法について何か提案はありますか? 私は一般的に、私が見た単一ノード クラスタのパフォーマンスが気に入っており、複数のノードに拡張したいと考えています。

4

0 に答える 0