Ошибка AWS + Celery + ElasticCache (кластер Redis): ключи CROSSSLOT в запросе не хэшируются в один и тот же слот

У меня есть сервис Dockerized Celery на AWS, и он использует ElaticCache (Redis Cluster с несколькими узлами) от AWS в качестве брокера сообщений, но я получаю следующую ошибку.

Когда я тестировал своих работников из Celery на моей локальной машине, он общался с одним узлом Redis совершенно нормально. Как мне исправить эту проблему?

[I 180518 18:54:20 mixins:224] Connected to redis://....use1.cache.amazonaws.com:6379//

[E 180518 18:54:20 events:123] Failed to capture events: 'CROSSSLOT Keys in request don't hash to the same slot', trying again in 1 seconds.

...

[E 180518 18:54:23 events:123] Failed to capture events: 'Command # 1 (LLEN celeryev....2d788) of pipeline caused error: MOVED 11904 10.0.x.xxx:6379', trying again in 1 seconds.

1 ответ

Эта ошибка возникает из-за того, что ключи должны находиться в одном и том же хэш-слоте, а не в одном и том же узле. Для реализации операций с несколькими ключами в изолированном кластере ElastiCache Redis (режим кластера включен) ключи должны быть хэшированы в один и тот же слот хэша. Вы можете принудительно ввести ключи в один и тот же слот хеша, используя хеш-теги.

Я также рекомендую проверить, поддерживает ли ваше приложение Redis в режиме кластера.

Больше информации здесь и здесь

Другие вопросы по тегам