В основном я использую StackExchangeRedis клиента для подключения к кластеру Redis с 3 узлами.
Моя конфигурация следующая:
config.EndPoints.Add(IPAddress.Parse("Node1_IP"), port);
config.EndPoints.Add(IPAddress.Parse("Node2_IP"), port);
config.EndPoints.Add(IPAddress.Parse("Node3_IP"), port);
config.Password = "password";
config.DefaultDatabase = 0;
config.ConnectTimeout = ConfigurationOptionsConnectTimeout;
config.AsyncTimeout = ConfigurationOptionsConnectTimeout;
config.ConnectRetry = InitialConnectRetries;
config.ReconnectRetryPolicy = new ExponentialRetry(DeltaBackOffMilliseconds);
config.AbortOnConnectFail = false;
Node1 Диапазон HashSlot от 0-8191
Узел2 Диапазон HashSlot от 8192-16383
Узел 3 не имеет диапазона HashSlot, я думаю, он как раб.
Ошибка :
StackExchange.Redis.RedisConnectionException: Endpoint Node1_IP:Port serving hashslot 14371 is
not reachable at this point of time. Please check connectTimeout value. If it is low, try increasing it
to give the ConnectionMultiplexer a chance to recover from the network disconnect. IOCP:
(Busy=0,Free=1000,Min=6,Max=1000), WORKER: (Busy=0,Free=8191,Min=6,Max=8191), Local-CPU: n/a
Сценарий: попытка сохранить некоторое значение ключа в database.
Вышеуказанная ошибка возникает, когда мой ключ хэшируется (на основе функции Redis ha sh) в слоте ha sh, который относится к диапазону слотов Node2 ha sh. Ключи, которые хэшированы в диапазоне 1 га sh, успешно сохранены.
IF Я переставляю конечные точки в конфигурации, сначала добавляя Node2_IP и во-вторых Node1_IP, а затем ключи, которые хешируются в Node2, ха sh слоты могут быть успешно сохранены, но ключи, которые хэшируются в диапазоне ha sh слотов Node1, выдают ту же ошибку соответственно.