it-swarm.com.de

Redis - Verbindung zum Remote-Server herstellen

Ich habe Redis mit den Anweisungen in der Kurzanleitung auf http://redis.io/topics/quickstart auf meinem Ubuntu 10.10-Server erfolgreich installiert. Ich führe den Dienst als dameon aus (damit er von init.d ausgeführt werden kann)

Der Server ist Teil eines Rackspace-Clusters mit internen und externen IPs. Der Host läuft auf Port 6379 (Standard für Redis)

Ich habe eine Zeile in den iptables hinzugefügt, um eingehende Verbindungen von Port 6379 zuzulassen, wie unten gezeigt:

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

In meinem PHP Code auf einem anderen Server versuche ich hier eine Verbindung zum neuen Redis-Server herzustellen:

$this->load->helper("iredis");

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));

Sobald ich das tue, bekomme ich immer eine Verbindung abgelehnt. In meiner redis.conf-Datei habe ich den local bind-Befehl auskommentiert, sodass er mehr als die localhost-IP überwachen sollte. Ich kann eine Verbindung zur Datenbank auf dem lokalen Computer einfach nicht auf einem anderen Server herstellen. Ich habe die externen und internen IPs ohne Erfolg ausprobiert.

Irgendwelche Vorschläge, damit das funktioniert?

106
gregavola

Zuerst überprüfe ich, ob die IP-Adressen abhören, von denen Sie erwarten, dass sie Folgendes sind:

netstat -nlpt | grep 6379

Je nachdem, wie Sie starten/stoppen, haben Sie die Instanz möglicherweise nicht neu gestartet, als Sie dachten, Sie hätten es getan. Das netstat sagt Ihnen, ob es hört, wo Sie glauben, dass es ist. Wenn nicht, starten Sie ihn neu und stellen Sie sicher, dass er neu gestartet wird .. Wenn das Gerät neu startet und immer noch nicht dort wartet, wo Sie es erwarten, überprüfen Sie Ihre Konfigurationsdatei, um sicherzugehen.

Nachdem Sie festgestellt haben, dass es an dem erwarteten Ort abhört, versuchen Sie Folgendes:

redis-cli -h REMOTE.Host ping

Sie können dies auch vom lokalen Host aus versuchen, aber die IP verwenden, die Sie erwarten, anstatt eines Hostnamens oder Localhost. In beiden Fällen sollten Sie PONG als Antwort sehen. 

Wenn nicht, blockieren Sie Ihre Firewall (s). Dies wäre entweder die lokale IPTables oder möglicherweise eine Firewall zwischen den Knoten. Sie können Ihrer IPtables-Konfiguration eine Protokollierungsanweisung hinzufügen, um Verbindungen über 6379 zu protokollieren, um zu sehen, was passiert. Der Versuch, von lokaler und nichtlokaler IP-Adresse auf dieselbe IP-Adresse umzusteigen, sollte zur Veranschaulichung dienen. Wenn er lokal, aber nicht remote reagiert, neige ich je nach Komplexität der IP-Tabellenregeln auf dem Knoten zu einer dazwischenliegenden Firewall.

117
The Real Bill

Ich habe mich mit dem gleichen Problem befasst und die vorangegangene Antwort hat mir nicht geholfen (wenn auch gut geschrieben).

Die Lösung ist hier: Überprüfen Sie Ihren /etc/redis/redis.conf und stellen Sie sicher, dass Sie die Standardeinstellung ändern

bind 127.0.0.1

zu

bind 0.0.0.0

Starten Sie dann Ihren Dienst neu (service redis-server restart)

Sie können nun prüfen, ob redis auf einer nicht lokalen Schnittstelle mit hört

redis-cli -h 192.168.x.x ping

(ersetzen Sie 192.168.x.x durch Ihre IP-Adresse)

Wichtiger Hinweis: Wie mehrere Benutzer angegeben haben, ist es nicht sicher , dies auf einem Server festzulegen, der dem Internet ausgesetzt ist. Sie sollten sicher sein, dass Sie mit allen Mitteln, die Ihren Bedürfnissen entsprechen, geschützt sind.

300
Orabîg

Neben der hervorragenden Antwort von Orabîg:

Ich habe dieses Problem behoben, indem ich den Abschnitt bind vollständig entfernt und protected-mode auf no gesetzt habe. 

#bind 127.0.0.1
protected-mode no

Verwenden Sie diese Methode niemals auf öffentlich zugänglichen Servern.

9
deafnull

Orabig ist richtig.

Sie können 10.0.2.15 in Ubuntu (VirtualBox) binden und dann eine Portweiterleitung vom Host an den Gast Ubuntu durchführen.

in /etc/redis/redis.conf

bind 10.0.2.15

dann redis neu starten:

Sudo systemctl restart redis

Es soll funktionieren!

2
Michael Qin
  • wenn Sie redis selbst heruntergeladen haben (nicht apt-get install redis-server) und die redis.conf dann mit den oben genannten Vorschlägen bearbeitet haben, vergewissern Sie sich, dass Sie redis mit der configwie so: ./src/redis-server redis.conf starten. 

    • ich füge hinzu, ein Screenshot der Einstellung der virtuellen Box auf Verbinden mit Redis, wenn Sie sich unter Windows befinden und eine Verbindung zu einer Virtualbox-VM herstellen. 

 enter image description here

1
Robot70

Die Einstellung von tcp-keepalive auf 60 (es wurde auf 0 gesetzt) ​​in der Redis-Konfiguration des Servers half mir, dieses Problem zu lösen.

0
Saurabh