StackExchange Redis - Net Framework - RedisConnectionException - Обслуживание HashSlot недоступно - PullRequest
0 голосов
/ 31 марта 2020

В основном я использую 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, выдают ту же ошибку соответственно.

...