Фрагмент кода для запуска контейнера:
Код: Выделить всё
Network network = Network.newNetwork();
RedisContainer redisContainer = new RedisContainer(DockerImageName.parse("redis:7.0.5"))
.withExposedPorts(port)
.withCommand("redis-server --port " + port +
" --requirepass " + redisPassword + // Password for clients
" --masterauth " + redisPassword + // Password for inter-node communication
" --cluster-enabled yes" +
" --cluster-config-file nodes.conf"+
" --cluster-node-timeout 5000"+
" --appendonly yes" +
" --bind 0.0.0.0" )
.withNetwork(network)
.withNetworkMode("bridge")
.withNetworkAliases("redis-" + i)
.waitingFor(Wait.forListeningPort());
Я попытался создать кластер с одним узлом, для которого для параметра включения кластера установлено значение «да», а для реплики установлено значение 0. Я попытался подключиться к нему с помощью JedisCluster.< /p>
Проблемы и исправления:
Изначально я получал сообщение об ошибке: Слоты кластера не выделены. Я решил эту проблему, запустив команду CLUSTER ADDSLOTS для выделения диапазона слотов.
После этого я запустил команду CLUSTER NODES и получил следующий результат:
Код: Выделить всё
1f2673c5fdb45ca16d564658ff88f815db5cbf01 172.29.0.2:6379@16379 myself,master - 0 0 1 connected 0-16383
Код: Выделить всё
redis.clients.jedis.exceptions.JedisClusterOperationException: Cluster retry deadline exceeded.Вывод информации о кластере:
Код: Выделить всё
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:1
cluster_current_epoch:1
cluster_my_epoch:1
cluster_stats_messages_pong_sent:1
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:2
cluster_stats_messages_pong_received:1
cluster_stats_messages_meet_received:1
cluster_stats_messages_received:2
total_cluster_links_buffer_limit_exceeded:0
Код: Выделить всё
1) 1) (integer) 0
2) (integer) 16383
3) 1) "172.29.0.2"
2) (integer) 6379
3) "b47f7da9be31ce953d4b4fbf9e3a737d1c9b7a58"
4) (empty array)
Я также попробовал настроить кластер из 6 узлов (3 главных и 3 подчиненных).
Наблюдения:
JedisCluster.getClusterNodes() вернул правильную информацию об узле для всех трех главных узлов (IP и порт).
Однако, когда я попытался записать данные в кластер с помощью JedisCluster, я получил следующее ошибка:
Код: Выделить всё
redis.clients.jedis.exceptions.JedisClusterOperationException: Cluster retry deadline exceeded.
Возможная проблема
Я пытаюсь запустить Redis в контейнере с помощью модуля TestContainer. Я подозреваю, что узлы в кластере не могут должным образом взаимодействовать друг с другом. В случае кластера с одним узлом некоторая конфигурация может отсутствовать. Некоторые
Любая помощь в решении этой проблемы будет принята с благодарностью. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... rs-in-java
Мобильная версия