web-dev-qa-db-fra.com

Redis - Connexion au serveur distant

Je viens d’installer Redis avec succès en suivant les instructions du guide de démarrage rapide à http://redis.io/topics/quickstart sur mon serveur Ubuntu 10.10. J'exécute le service en tant que dameon (il peut donc être exécuté par init.d)

Le serveur fait partie de Rackspace Cluster avec des IP internes et externes. L'hôte s'exécute sur le port 6379 (standard pour Redis)

J'ai ajouté une ligne dans iptables pour autoriser les connexions entrantes depuis le port 6379, comme indiqué ci-dessous:

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

Dans mon code PHP sur un autre serveur, j'essaie de me connecter au nouveau serveur Redis ici:

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

$hostname = "IP ADDRESS HERE";

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

Une fois que je fais cela - je reçois toujours une connexion refusée. Dans mon fichier redis.conf, la commande de liaison locale est mise en commentaire. Le système doit donc écouter davantage que l'adresse IP de l'hôte local. Je peux me connecter à la base de données sur la machine locale mais pas sur un autre serveur. J'ai essayé les IP externes et internes sans succès.

Des suggestions pour que cela fonctionne?

106
gregavola

Je vérifie d’abord pour vérifier s’il écoute sur les adresses IP que vous attendez:

netstat -nlpt | grep 6379

En fonction de la manière dont vous démarrez/arrêtez, vous n'avez peut-être pas redémarré l'instance alors que vous pensiez l'avoir. Le netstat vous dira s'il écoute où vous le pensez. Sinon, redémarrez-le et assurez-vous qu'il redémarre . S'il redémarre et n'écoute toujours pas comme vous le souhaitez, vérifiez votre fichier de configuration juste pour être sûr.

Après l’avoir établi, vous êtes à l’écoute où vous le souhaitez, à partir d’un nœud distant auquel vous avez accès, essayez:

redis-cli -h REMOTE.Host ping

Vous pouvez également essayer cela à partir de l'hôte local, mais utilisez l'adresse IP sur laquelle vous prévoyez d'écouter au lieu d'un nom d'hôte ou d'hôte local. Vous devriez le voir PONG en réponse dans les deux cas. 

Sinon, votre ou vos pare-feu vous bloque. Ce serait soit le IPTables local ou éventuellement un pare-feu entre les nœuds. Vous pouvez ajouter une instruction de journalisation à votre configuration IPtables pour consigner les connexions sur 6379 afin de voir ce qui se passe. En outre, essayer de redéfinir les adresses locales et non locales sur la même adresse IP devrait être illustratif. Si le système répond localement mais pas à distance, je préférerais utiliser un pare-feu intermédiaire en fonction de la complexité de vos règles de tables IP sur les nœuds.

117
The Real Bill

Je suis coincé avec le même problème, et la réponse précédente ne m'a pas aidé (bien que bien écrit).

La solution est la suivante: vérifiez votre /etc/redis/redis.conf et assurez-vous de modifier la valeur par défaut.

bind 127.0.0.1

à

bind 0.0.0.0

Puis redémarrez votre service (service redis-server restart)

Vous pouvez maintenant vérifier que Redis écoute sur une interface non locale avec

redis-cli -h 192.168.x.x ping

(remplacez 192.168.x.x par votre adresse IP)

Remarque importante: comme l'ont indiqué plusieurs utilisateurs, il est pas sûr de le définir sur un serveur exposé à Internet. Vous devez être certain que Redis est protégé par tout moyen adapté à vos besoins.

300
Orabîg

En plus de l'excellente réponse donnée par Orabîg:

J'ai résolu ce problème en supprimant entièrement la section bind et en définissant protected-mode sur no

#bind 127.0.0.1
protected-mode no

N'utilisez jamais cette méthode sur des serveurs exposés publiquement.

9
deafnull

Orabig est correct.

Vous pouvez lier 10.0.2.15 dans Ubuntu (VirtualBox) puis effectuer une redirection port de l'hôte à l'invité Ubuntu.

dans /etc/redis/redis.conf

bind 10.0.2.15

puis, redémarrez redis:

Sudo systemctl restart redis

Cela fonctionnera!

2
Michael Qin
  • si vous avez téléchargé vous-même redis (pas apt-get install redis-server), puis édité le redis.conf avec les suggestions ci-dessus, assurez-vous de démarrer redis avec la configme. ./src/redis-server redis.conf 

    • notez également que j’inclus une capture d’écran de paramétrage de boîte virtuelle pour connecter à Redis, si vous êtes sur Windows et que vous vous connectez à une machine virtuelle. 

 enter image description here

1
Robot70

Définir tcp-keepalive sur 60 (la valeur était 0) dans la configuration du serveur redis m'a aidé à résoudre ce problème.

0
Saurabh