redis-cli перенаправлен на 127.0.0.1

Я запустил кластер Redis на ПК1, затем подключил его на ПК2. Когда необходимо перенаправить на другой узел кластера, он показывает Redirected to slot [7785] located at 127.0.0.1, но должен показывать Redirected to slot [7785] located at [IP of PC1, like 192.168.1.20], тогда показывает ошибку. Что происходит? Что я могу сделать?

Выход:

[admin@localhost ~]$ redis-cli -c -h 192.168.1.20 -p 30001
192.168.1.20:30001> get foo
-> Redirected to slot [12182] located at 127.0.0.1:30003
Could not connect to Redis at 127.0.0.1:30003: Connection refused
Could not connect to Redis at 127.0.0.1:30003: Connection refused
not connected>

Выход redis-cli -h 192.168.1.20 -p 30001 cluster nodes:

5f6d6f1319318233917aba92b6ab0e244b3260d7 127.0.0.1:30004 slave 4c7b046ecaeb2dc689cbad21ee3466fb43b48fb9 0 14639
84410573 4 connected
e04d5b461cb6a2b48cb2a607e2140b7c1d32af25 127.0.0.1:30006 slave 3fc25c3851f7a9afd09b60739434118c25cd9243 0 14639
84410473 6 connected
3fc25c3851f7a9afd09b60739434118c25cd9243 127.0.0.1:30003 master - 0 1463984410573 3 connected 10923-16383
4c7b046ecaeb2dc689cbad21ee3466fb43b48fb9 127.0.0.1:30001 myself,master - 0 0 1 connected 0-5460
7383830ac84f199db346da3112b5aaf9e124d3cf 127.0.0.1:30005 slave 1eeeb51522aed364fcf9623d6045fa3df2748579 0 14639
84410573 5 connected
1eeeb51522aed364fcf9623d6045fa3df2748579 127.0.0.1:30002 master - 0 1463984410473 2 connected 5461-10922

person Robin Chen    schedule 20.05.2016    source источник
comment
Каков результат redis-cli -h 192.168.1.20 -p 30001 cluster nodes?   -  person neuront    schedule 20.05.2016
comment
@neuront Позвольте мне посмотреть это завтра на моем рабочем компьютере, спасибо за внимание!   -  person Robin Chen    schedule 22.05.2016
comment
@neuront Эй, чувак, я добавил вывод о твоих потребностях в описание вопроса. Кажется, нет проблем с узлами кластера.   -  person Robin Chen    schedule 23.05.2016


Ответы (4)


Эй, не могли бы вы попробовать привязать свой экземпляр кластера Redis к IP-адресу сервера?

Обновите свой redis.conf, чтобы добавить

привязать 172.31.28.76

PS- Обновите IP по мере необходимости

person Anand Jain    schedule 01.06.2018
comment
@RobinChen, если вы удовлетворены ответом. любезно примите это, чтобы помочь сообществу - person Anand Jain; 05.05.2020

Это связано с тем, что все ваши IP-адреса Redis обновлены до 127.0.0.1, и они считают, что другие Redis также находятся в 127.0.0.1. Это не неправильно, если узлы в кластере просто взаимодействуют друг с другом, но определенно неправильно, когда соединение с другого хоста хочет знать о кластере.

В этой ситуации ваш клиент запросил у Redis ключ, которым он не занимается, и Redis сказал клиенту перенаправить на 127.0.0.1:30003. Клиент неправильно понял это и попытался подключиться к порту 30003 на своем локальном хосте и, конечно же, ничего не нашел.

Чтобы исправить это, попробуйте отправить cluster meet с правильным IP-адресом каждому Redis в кластере. Я провел такой эксперимент

# initial, Redis doesn't know its IP before a meet
127.0.0.1:7000> cluster nodes
8af9e47cb96f3bd8fff3800c38da11601157605d :7000 myself,master - 0 0 0 connected

# meet from 127.0.0.1, and their IP addresses updated to 127.0.0.1
127.0.0.1:7000> cluster meet 127.0.0.1 7001
OK
127.0.0.1:7000> cluster nodes
8af9e47cb96f3bd8fff3800c38da11601157605d 127.0.0.1:7000 myself,master - 0 0 0 connected
2c3d9b6c29f21ecd846f42bcfb238099d88b57df 127.0.0.1:7001 master - 0 1463987186714 1 connected

# send another meet, use the eth0 IP other than lo
127.0.0.1:7000> cluster meet 172.31.28.76 7001
OK
127.0.0.1:7000> cluster nodes
8af9e47cb96f3bd8fff3800c38da11601157605d 127.0.0.1:7000 myself,master - 0 0 0 connected
2c3d9b6c29f21ecd846f42bcfb238099d88b57df 172.31.28.76:7001 master - 0 1463987192672 1 connected

# connect to :7001, its cluster nodes are what we expect
127.0.0.1:7001> cluster nodes
2c3d9b6c29f21ecd846f42bcfb238099d88b57df 172.31.28.76:7001 myself,master - 0 0 1 connected
8af9e47cb96f3bd8fff3800c38da11601157605d 172.31.28.76:7000 master - 0 1463987203631 0 connected
# send another meet to fix
127.0.0.1:7001> cluster meet 172.31.28.76 7000
OK

# back to :7000, its address updated
127.0.0.1:7000> cluster nodes
8af9e47cb96f3bd8fff3800c38da11601157605d 172.31.28.76:7000 myself,master - 0 0 0 connected
2c3d9b6c29f21ecd846f42bcfb238099d88b57df 172.31.28.76:7001 master - 0 1463987210539 1 connected

В вашем случае вы можете отправить несколько команд cluster meet каждому Redis, чтобы обеспечить обновление его IP-адреса на всех его одноранговых узлах.

person neuront    schedule 23.05.2016
comment
Я так думаю. Но как я могу это сделать на сервере продуктов? Он должен настроить для установки, не так ли? - person Robin Chen; 23.05.2016
comment
Я использую официальный файл redis-trib.rb для создания кластера, может в этом причина? Команда :redis-trib.rb create --replicas 1 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006, здесь должно быть 192.168.1.20, а не 127.0.0.1? - person Robin Chen; 23.05.2016
comment
@RobinChen Нет, список узлов представляет собой динамическую конфигурацию, хранящуюся в файле, указанном cluster-config-file. Но вам не нужно редактировать его вручную или перезапускать какой-либо из серверов redis. Отправка cluster meet команд через redis-cli подойдет. - person neuront; 23.05.2016
comment
@RobinChen Это наверняка вызовет проблему. Вы должны использовать 192.168.1.20 (адрес eth0) в первую очередь. - person neuront; 23.05.2016
comment
И затем я использую StackExchange.Redis в проекте .Net, как мне быть? это ни за что - person Robin Chen; 23.05.2016
comment
Я когда-либо делал это, но кажется, что три ведомых узла не запускаются. Позвольте мне попробовать еще раз, спасибо за вашего пациента! - person Robin Chen; 23.05.2016
comment
Эй, чувак, я пытался перейти на 192.168.1.20. Это не работа, это сводит меня с ума. Также встречается 127.0.0.1. - person Robin Chen; 23.05.2016
comment
@RobinChen Не могли бы вы дать более подробную информацию в разделе обновлений вашего вопроса? Включая то, что вы сделали, и последние журналы, выводимые каждым Redis. Журнал, например IP-адрес для этого узла, будет отображаться, если адрес будет обновлен. - person neuront; 23.05.2016
comment
Эй, братан, я исправил это. Вот и кеш выдает ошибку. Я чищу файлы конфигурации кластера, использую команду redisCluster clean и запускаю и создаю, все работает. Большое тебе спасибо. :) - person Robin Chen; 23.05.2016
comment
Эй, братан, давай дружить? Ты мне нравишься! :) - person Robin Chen; 23.05.2016

Вы сказали, что используете сервер Redis на ПК1. Затем укажите IP-адрес ПК1 (в вашем случае это 192.168.1.20), упомянув параметр привязки в файлах конфигурации узла redis.

Пример файла конфигурации узла для кластера -

bind 192.168.1.20  
port 6000  
cluster-enabled yes  
cluster-config-file "nodes.conf"  
cluster-node-timeout 5000
appendonly yes
person Niveditha Gowda    schedule 09.02.2020

вы должны использовать опцию -c, например, вы хотите использовать клиент на порту 6379

$ service redis-server start

$ redis-cli -c -p 6379

person Issa    schedule 07.03.2020