Может ли клиент redisson java обнаружить перезапуск неудачной пары мастер-реплика в топологии кластера? - PullRequest
0 голосов
/ 10 декабря 2018

Загрузочное приложение My Spring использует redisson 3.3.0 для получения доступа к топологии кластера redis со следующей конфигурацией YML:

redis:
   cluster:
       nodes: ${CLUSTER_HOST}:6379
       read-mode: 'MASTER'
   connections: 125
   max_wait_millis: 10000
   cluster-scan-interval: 1000

Для кластера redis установлено значение по умолчанию (3 узла с 1 репликой на узел).

Я останавливаю 2 узла, содержащих одинаковые слоты (пара мастер-реплика).Затем, когда мое приложение пытается прочитать ключи из этих слотов, как и ожидалось, я получаю следующее исключение:

org.redisson.client.RedisConnectionException: 
MasterConnectionPool no available Redis entries.  
Disconnected hosts: [/${CLUSTER_HOST}:6379] 

Я полагаю, что это правильно, потому что после проверки узлов redis с помощью команды CLUSTER NODES я вижу, что 2узлы не работают, а их слоты отсутствуют в кластере.

Дело в том, что когда я снова запускаю узлы, я проверяю, используя CLUSTER INFO & CLUSTER NODES, что кластер вернулся.Тем не менее, когда мое приложение пытается снова прочитать данные из кластера, я получаю следующее исключение повторного вызова:

    io.netty.util.concurrent.DefaultPromise: 151 - An 
    exception was thrown by org.redisson.command.CommandAsyncService$9.operationComplete()
java.lang.NullPointerException: null
    at org.redisson.connection.MasterSlaveConnectionManager.connectionReadOp(MasterSlaveConnectionManager.java:731)
    at org.redisson.command.CommandAsyncService.async(CommandAsyncService.java:501)
    at org.redisson.command.CommandAsyncService.checkAttemptFuture(CommandAsyncService.java:751)
    at org.redisson.command.CommandAsyncService.access$300(CommandAsyncService.java:80)
    at org.redisson.command.CommandAsyncService$9.operationComplete(CommandAsyncService.java:610)
    at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:512)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:505)
    at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:484)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:425)
    at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:122)
    at org.redisson.misc.RedissonPromise.tryFailure(RedissonPromise.java:98)
    at org.redisson.client.protocol.CommandData.tryFailure(CommandData.java:78)
    at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:247)
    at ...

Я продолжаю получать это каждый раз, когда мое приложение пытается читать или записывать данные из / в эти конкретные слоты (то естьопределенная пара mater-replica), хотя кластер redis исправен.

Redisson, похоже, не может получить правильный статус для конкретной пары master-replica.

Может ли это быть вопросом конфигурацииили это поведение по умолчанию?

1 Ответ

0 голосов
/ 24 декабря 2018

Эта проблема была исправлена ​​в версии 3.5.4.

...