我在让 Python 客户端连接到我使用 voldemort 设置的多个服务器时遇到问题。我正在使用 Python 2.6.1 和 Voldemort 0.81。具体来说,如果我有一个双节点集群,连接到第一台服务器似乎没有任何问题,但连接到第二台服务器时可能会出现大问题。这是我正在使用的配置设置(以防这导致一些问题):
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 编码并且持久性只是在内存中的问题,所以我不相信问题就在那里。我已经尝试过将两台机器放在同一个机架中(它们之间的通信很简单),并且在不同的机架中(仍然应该非常快,但不是直接连接)。这是我在 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”的机器上,我会得到相同的结果。我什至尝试从一个客户端 ala 连接到两台服务器:
>>>client = voldemort.StoreClient('multiple_nodes', [('0', 6666), ('1', 6666)])
这偶尔会起作用(尽管它可能会在测试过程中出错),但偶尔会失败并出现类似于“WARNING:root:Metadata bootstrap from 1:6666 failed: Invalid Argument”的警告,同时仍然给我一个客户端对象。
有关如何解决此问题的任何建议?我通常喜欢我见过的单节点集群性能,并希望扩展到多个节点。