У меня проблемы с подключением клиентов 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'. Я даже пытался подключиться к обоим серверам с одного клиента аля:
>>>client = voldemort.StoreClient('multiple_nodes', [('0', 6666), ('1', 6666)])
Иногда это работает (хотя в середине тестирования это может сорваться), но иногда происходит сбой с предупреждением, похожим на «ПРЕДУПРЕЖДЕНИЕ: root: Начальная загрузка метаданных из 1: 6666 fail: Invalid Argument», но при этом у меня остается клиент объект обратно.
Есть предложения, как решить эту проблему? Мне обычно нравится производительность кластера с одним узлом, которую я видел, и я хотел бы расширить ее до нескольких узлов.