2016-05-20 7 views
2

Ich habe Redis-Cluster auf PC1 gestartet und dann auf PC2 verbunden. Wenn erforderlich, um zu einem anderen Clusterknoten umzuleiten, zeigt es Redirected to slot [7785] located at 127.0.0.1, sollte aber Redirected to slot [7785] located at [IP of PC1, like 192.168.1.20] anzeigen, dann wird ein Fehler angezeigt. Was ist los? Was kann ich tun?Redis-Cli umgeleitet zu 127.0.0.1

Der Ausgang:

[[email protected] ~]$ 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> 

Ausgabe von 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 
+0

Was ist die Ausgabe eines 'redisis-cli -h 192.168.1.20-p 30001 Cluster Nodes'? – neuront

+0

@neuront Lass es mich morgen auf meinem Arbeitscomputer sehen, danke für deine Aufmerksamkeit! –

+0

@neuront Hey Mann, ich habe die Ausgabe Ihrer Bedürfnisse in Frage Beschreibung hinzugefügt.Scheint kein Problem über die Cluster-Knoten. –

Antwort

1

Das liegt daran, dass alle Ihre Redis IP-Adressen 127.0.0.1 aktualisiert haben, und sie glauben, andere Redis in 127,0 befinden. 0,1 auch. Das ist nicht falsch, wenn Knoten in einem Cluster nur miteinander kommunizieren, aber definitiv nicht korrekt, wenn eine Verbindung von einem anderen Host über den Cluster informiert werden soll.

In dieser Situation fragte Ihr Client eine Redis nach einem Schlüssel, der nicht verantwortlich ist, und die Redis wies den Client an, zu 127.0.0.1:30003 umzuleiten. Der Client hat es falsch verstanden und versucht, den Port 30003 in seinem localhost zu verbinden, und hat sicherlich nichts gefunden.

Um es zu beheben, versuchen Sie, cluster meet mit der richtigen IP zu jedem Redis im Cluster zu senden. Ich habe ein Experiment wie diese

# 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 

In Ihrem Fall hat Sie mehr cluster meet Befehle an jeden Redis senden kann seine IP an allen seinen Kollegen aktualisiert, um sicherzustellen.

+0

Ich denke schon. Aber wie kann ich dies im Produktserver tun? Es sollte konfigurieren zu setzen, oder? –

+0

Ich benutze die offizielle "redis-trib.rb" Datei, um den Cluster zu erstellen, vielleicht ist es der Grund? Der Befehl lautet: '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', ist hier sollte sei "192.168.1.20" nicht "127.0.0.1"? –

+0

@RobinChen Nein, die Knotenliste ist eine dynamische Konfiguration, die in der Datei 'cluster-config-file' gespeichert ist. Sie müssen es jedoch nicht manuell bearbeiten oder einen der Redis-Server neu starten. Das Senden von 'cluster meet' Befehlen über redis-cli reicht aus. – neuront

Verwandte Themen