我有一个Dockerize Celery在AWS,它使用AWS的ElastiCache(具有多节点的Redis集群)作为消息代理,但我得到以下错误。
当我在本地机器上测试我的Celery worker时,它与单个节点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.
发生此错误是因为键必须在同一个哈希槽中,而不仅仅是同一个节点。要在分片的Redis(启用集群模式)ElastiCache集群中实现多键操作,必须将键散列到同一个哈希槽中。您可以使用哈希标签强制键进入同一个哈希槽。
我还建议检查您的应用程序是否支持使用集群模式的Redis
更多信息在这里和这里