Redis-Połącz się ze zdalnym serwerem

Właśnie zainstalowałem Redis z powodzeniem, korzystając z instrukcji Z Quick Start guide na http://redis.io/topics/quickstart na moim serwerze Ubuntu 10.10. Prowadzę serwis jako dameon (więc może być prowadzony przez init.d)

Serwer jest częścią klastra Rackspace z wewnętrznymi i zewnętrznymi adresami IP. Host działa na porcie 6379 (standard dla Redis)

Dodałem wiersz w iptables, aby umożliwić połączenia przychodzące z portu 6379, jak pokazano poniżej:

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

W moim Kod PHP na innym serwerze, próbuję połączyć się z nowym serwerem Redis tutaj:

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

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));
Kiedy to zrobię - zawsze dostaję odmowę połączenia. W moim redis.plik conf, mam komendę local bind, więc powinien nasłuchiwać więcej niż localhost IP. Mogę połączyć się z bazą danych na lokalnym komputerze, ale nie na innym serwerze. Próbowałem zewnętrznych i wewnętrznych IP bez powodzenia. Jakieś sugestie, żeby to zadziałało?
Author: The Real Bill, 2011-12-16

6 answers

Najpierw sprawdziłbym aby sprawdzić czy na IPs się tego spodziewasz:

netstat -nlpt | grep 6379

W zależności od tego, w jaki sposób uruchamiasz/zatrzymujesz instancję, możesz nie uruchamiać jej ponownie, gdy wydawało ci się, że ją masz. Netstat powie Ci, czy słucha tam, gdzie myślisz, że jest. Jeśli nie, uruchom go ponownie i upewnij się, że uruchamia się ponownie. Jeśli uruchamia się ponownie i nadal nie słucha tam, gdzie się spodziewasz, sprawdź plik konfiguracyjny, aby się upewnić.

Po ustaleniu, że jest to słuchanie tam, gdzie się tego spodziewasz, z zdalny węzeł, który powinien mieć dostęp:

redis-cli -h REMOTE.HOST ping

Możesz również spróbować tego z lokalnego hosta, ale użyj adresu IP, na którym oczekujesz, że będzie nasłuchiwał zamiast nazwy hosta lub localhost. W obu przypadkach powinieneś zobaczyć to w odpowiedzi.

Jeśli nie, twój firewall blokuje cię. Byłoby to albo lokalne IPTables lub ewentualnie zapora ogniowa pomiędzy węzłami. Możesz dodać instrukcję logowania do konfiguracji IPtables, aby logować połączenia ponad 6379, aby zobaczyć, co jest dzieje się. Również próba ponownego wyświetlenia Pingu z lokalnego i nielokalnego na ten sam adres IP powinna być ilustracyjna. Jeśli reaguje lokalnie, ale nie zdalnie, chciałbym skłaniać się w kierunku interweniującej zapory w zależności od złożoności reguł tabel IP na węźle.

 115
Author: The Real Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-22 09:55:10

Utknąłem z tym samym problemem, a poprzednia odpowiedź mi nie pomogła (choć dobrze napisana).

Rozwiązanie jest tutaj: sprawdź swoje /etc/redis/redis.conf i upewnij się, że zmienisz domyślną

bind 127.0.0.1

Do

bind 0.0.0.0

Następnie uruchom ponownie usługę (service redis-server restart)

Możesz teraz sprawdzić, czy redis nasłuchuje na nielokalnym interfejsie za pomocą

redis-cli -h 192.168.x.x ping

(zastąpić 192.168.x. X z Twoim adresem IP)

Ważna uwaga: jak stwierdziło kilku użytkowników, jest to nie safe aby ustawić to na serwerze, który jest narażony na dostęp do Internetu. Powinieneś mieć pewność, że redis jest chroniony za pomocą wszelkich środków, które pasują do Twoich potrzeb.

 292
Author: Orabîg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-09 22:55:44

Oprócz doskonałej odpowiedzi udzielonej przez Orabîg:

Rozwiązałem ten problem, usuwając całkowicie sekcję bind i ustawiając protected-mode na no.

#bind 127.0.0.1
protected-mode no

Nigdy nie używaj tej metody na publicznie odsłoniętych serwerach.

 8
Author: deafnull,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 10:40:53
  • Jeśli sam ściągnąłeś redis (nie apt-get install redis-server), a następnie edytowałeś redis.conf with powyższe sugestie, upewnij się, że twój start redis z config like so: ./src/redis-server redis.conf

    • również na marginesie dołączam zrzut ekranu z ustawieniem Wirtualnego pudełka do połącz się z redis, jeśli korzystasz z systemu windows i łączysz się z maszyną wirtualną virtualbox.

Tutaj wpisz opis obrazka

 1
Author: Robot70,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-18 13:33:22

Orabig ma rację.

Możesz powiązać 10.0.2.15 w Ubuntu (VirtualBox) następnie wykonać przekierowanie portów z hosta do gościa Ubuntu.

W /etc / redis / redis.conf

bind 10.0.2.15

Następnie uruchom ponownie redis:

sudo systemctl restart redis
To zadziała!
 1
Author: Michael Qin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 18:11:51

Ustawienie tcp-keepalive na 60 (zostało ustawione na 0) w konfiguracji serwera Redis pomogło mi rozwiązać ten problem.

 0
Author: Saurabh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-16 07:55:04