Ошибка 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 в режиме кластера.