it-swarm-pt.tech

Redis - Conecte-se ao servidor remoto

Acabei de instalar o Redis com sucesso usando as instruções no Guia de Início Rápido em http://redis.io/topics/quickstart no meu servidor Ubuntu 10.10. Estou executando o serviço como dameon (para que ele possa ser executado pelo init.d)

O servidor faz parte do cluster Rackspace com IPs internos e externos. O host está sendo executado na porta 6379 (padrão para Redis)

Eu adicionei uma linha no iptables para permitir conexões de entrada da porta 6379 como mostrado abaixo:

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

No meu código PHP em outro servidor, estou tentando se conectar ao novo servidor Redis aqui:

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

$hostname = "IP ADDRESS HERE";

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

Depois de fazer isso, sempre recebo uma conexão recusada. No meu arquivo redis.conf, eu tenho o comando de ligação local comentado, então ele deve estar escutando mais do que o IP do host local. Eu posso conectar ao banco de dados na máquina local, mas não em outro servidor. Eu tentei os IPs externos e internos sem sorte.

Alguma sugestão sobre como fazer isso funcionar?

106
gregavola

Primeiro eu checaria para verificar se está escutando nos IPs que você espera que sejam:

netstat -nlpt | grep 6379

Dependendo de como você iniciar/parar, você pode não ter realmente reiniciado a instância quando pensou que tinha. O netstat lhe dirá se está ouvindo onde você pensa que está. Se não, reinicie-o e certifique-se de que ele reinicia. Se ele reiniciar e ainda não estiver escutando onde você espera, verifique seu arquivo de configuração apenas para ter certeza.

Depois de estabelecer que está escutando onde você espera, de um nó remoto que deve ter acesso tente:

redis-cli -h REMOTE.Host ping

Você também pode tentar isso a partir do Host local, mas usar o IP que espera que ele esteja escutando, em vez de um hostname ou localhost. Você deve ver o PONG em resposta nos dois casos. 

Se não, seu firewall está bloqueando você. Este seria o IPTables local ou possivelmente um firewall entre os nós. Você pode adicionar uma instrução de log à sua configuração IPtables para registrar conexões acima de 6379 para ver o que está acontecendo. Além disso, tentar redis ping de local e não local para o mesmo IP deve ser ilustrativo. Se ele responder localmente, mas não remotamente, eu me inclinaria em direção a um firewall intermediário, dependendo da complexidade de suas regras de Tables IP no nó.

117
The Real Bill

Fui preso com o mesmo problema, e a resposta anterior não me ajudou (embora bem escrita).

A solução está aqui: verifique seu /etc/redis/redis.conf e certifique-se de alterar o padrão

bind 127.0.0.1

para

bind 0.0.0.0

Então reinicie seu serviço (service redis-server restart)

Agora você pode verificar se o redis está escutando na interface não local com

redis-cli -h 192.168.x.x ping

(substitua 192.168.x.x pelo seu endereço IP)

Nota importante: como vários usuários afirmaram, é não é seguro configurá-lo em um servidor que está exposto à Internet. Você deve estar certo de que você redis é protegido com qualquer meio que atenda às suas necessidades.

300
Orabîg

Além da excelente resposta dada por Orabîg:

Eu resolvi esse problema removendo completamente a seção bind e definindo protected-mode como no

#bind 127.0.0.1
protected-mode no

Nunca use este método em servidores publicamente expostos.

9
deafnull

Orabig está correto.

Você pode vincular 10.0.2.15 em Ubuntu (VirtualBox) e fazer um encaminhamento port do Host para convidado Ubuntu.

em /etc/redis/redis.conf

bind 10.0.2.15

em seguida, reinicie o redis:

Sudo systemctl restart redis

Vai funcionar!

2
Michael Qin
  • se você baixou o redis você mesmo (não o apt-get install redis-server) e então editou o redis.conf com as sugestões acima, certifique-se de que seu start redis with o config [.____. então: ./src/redis-server redis.conf 

    • também nota lateral eu estou incluindo uma captura de tela de configuração de caixa virtual para conectar-se a redis, se você estiver no windows e se conectar a um virtualbox vm. 

enter image description here

1
Robot70

Configurar tcp-keepalive para 60 (foi definido como 0) na configuração de redis do servidor me ajudou a resolver esse problema.

0
Saurabh