Я использую Redis Cluster из 48 экземпляров, распределенных на 6 физических серверах. Эти экземпляры Redis работают в контейнерах докеров.
Кластер спроектирован следующим образом:
1) 4 контейнера Docker для Redis Master работают на каждом из этих 4 серверов (M1, M2, M3, M4).
2) У каждого мастера есть 2 подчиненных. Это означает, что 16 Docker-контейнеров для Redis Slave работают на двух остальных серверах (S1, S2).
Я столкнулся с проблемой при получении ключа. Например, я получаю ключ, который хранится на M1D2, используя redis-cli из M1D1, это дает мне следующую ошибку.
# echo "get a " | redis-cli -c -h 172.16.84.181 -p 6351
-> Redirected to slot [3902] located at 172.17.0.1:6350
Could not connect to Redis at 172.17.0.1:6350: Connection refused
Could not connect to Redis at 172.17.0.1:6350: Connection refused
Я совершенно уверен, что эта проблема связана с Docker. Можно ли заставить Docker использовать базовый IP-адрес eth0 для Redis вместо использования docker0 IP?
Он использует сам базовый IP-адрес eth0, чтобы быть доступным за пределами коробки. Поэтому, возможно, измените конфигурацию redis, чтобы использовать IP-адрес экземпляра redis в качестве IP-адреса базового хоста eth0 и переадресации порта на докере
Взгляните на эти две ссылки
https://github.com/developersworkspace/Docker-Samples/tree/master/redis
https://github.com/developersworkspace/Docker-Samples/tree/master/redis-cluster
Это должно решить ваши проблемы.