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?
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.
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.
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.
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!
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.
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.