2011-12-16 21 views
99

Ho appena installato Redis con successo utilizzando le istruzioni sulla guida di avvio rapido su http://redis.io/topics/quickstart sul mio server Ubuntu 10.10. Sto eseguendo il servizio come dameon (quindi può essere eseguito da init.d)Redis - Connessione al server remoto

Il server fa parte di Rackspace Cluster con IP interni ed esterni. L'host è in esecuzione sulla porta 6379 (standard per Redis)

Ho una fila nei iptables per consentire le connessioni in entrata da porta 6379 come illustrato di seguito:

ACCEPT  tcp -- anywhere    anywhere   tcp dpt:6379 

Nel mio codice PHP su un altro server , sto cercando di connettersi al nuovo server Redis qui:

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

$hostname = "IP ADDRESS HERE"; 

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

una volta che faccio questo - ho sempre una connessione rifiutata. Nel mio file redis.conf, ho il commento del comando bind locale, quindi dovrebbe essere in ascolto su più dell'IP localhost. Posso connettermi al database sul computer locale solo su un altro server. Ho provato gli IP esterni e interni senza fortuna.

Qualche suggerimento su come farlo funzionare?

+0

È possibile connettersi utilizzando lo strumento da riga di comando Redis? 'redis-cli -h hostname' – jlundqvist

+0

Server Fault ha una domanda canonica su [Connection Refused] (http://serverfault.com/questions/725262/what-causes-the-connection-refused-message). – Raedwald

risposta

107

Prima mi piacerebbe controllare per verificare che è in ascolto sul IP che ci si aspetta che sia:

netstat -nlpt | grep 6379 

seconda di come si START/STOP non si può avere in realtà riavviato l'istanza, quando si pensava di avere . Il netstat ti dirà se sta ascoltando dove pensi che sia. In caso contrario, riavviarlo e assicurarsi che si riavvia. Se si riavvia e continua a non ascoltare dove ti aspetti, controlla il tuo file di configurazione solo per essere sicuro.

Dopo aver stabilito che è in ascolto, dove ci si aspetta che, da un nodo remoto che dovrebbero avere accesso prova:

redis-cli -h REMOTE.HOST ping 

si potrebbe anche provare che dall'host locale, ma utilizzare l'IP che ci si aspetta che sia ascolto on invece di un hostname o localhost. Dovresti vederlo PONG in risposta in entrambi i casi.

In caso contrario, i firewall stanno/stanno bloccando. Questo potrebbe essere il IPTables locale o possibilmente un firewall tra i nodi. È possibile aggiungere un'istruzione di registrazione alla configurazione IPtables per registrare le connessioni oltre 6379 per vedere cosa sta succedendo. Inoltre, provare a redisare ping da locale e non locale allo stesso IP dovrebbe essere illustrativo. Se risponde localmente ma non da remoto, preferirei un firewall intermedio in base alla complessità delle regole delle tabelle IP su nodo.

+16

Quindi, per essere chiari, stai facendo downvoting di una risposta al problema postato perché hai un problema correlato (ma chiaramente non identico) che non affronta? Anche se sono d'accordo con la pubblicazione della soluzione, fare downvoting di una risposta corretta perché il tuo problema era diverso non sembra la cosa giusta da fare. Detto questo, la soluzione non è una buona scelta per la domanda perché l'OP ha più IP e potrebbe non voler ascoltarli tutti e l'OP fa riferimento in modo specifico alla sezione di bind nel file di configurazione nella domanda. Quindi la tua soluzione non risponde alla domanda posta. –

+2

Bene, ho letto di nuovo la domanda, e per me non è sembrato così ovvio che OP abbia impostato il conf corretto per questa linea 'bind'. Inoltre, non sono sicuro che nessun firewall sia coinvolto nel suo caso. Ad ogni modo, posso rimuovere il mio -1 se pensi che sia maleducato. Ho appena scoperto che la tua risposta era totalmente fuori tema e che non sarebbe stata di grande aiuto per la maggior parte degli utenti che arrivavano qui con un problema molto comune ... (il parametro di bind predefinito) –

+1

L'OP ha detto che ha commentato il locale regola di binding, che dice a redis di collegarsi a tutti gli indirizzi sul sistema. Non definirei il -1 scortese, semplicemente inappropriato. Il PO in particolare ha dichiarato che aveva regole IPtables in atto, quindi è chiaro che ci sono regole firewall in vigore nella domanda posta. Data la presenza dichiarata di un firewall e la rimozione del binding locale nella configurazione, la risposta non è corretta o pertinente per la domanda posta. –

278

Sono stato bloccato con lo stesso problema e la risposta precedente non mi ha aiutato (anche se ben scritto).

La soluzione è qui: controllare il /etc/redis/redis.conf, e assicurarsi di modificare il valore predefinito

bind 127.0.0.1 

a

bind 0.0.0.0 

Quindi riavviare il servizio (service redis-server restart)

È quindi possibile ora controlla che redis stia ascoltando sull'interfaccia non locale con

redis-cli -h 192.168.x.x ping 

(sostituire 192.168.x.x con il vostro indirizzo IP)

Nota importante: come molti utenti hanno affermato, è non è sicuro per impostare questo su un server che è esposto a Internet. Dovresti essere certo che i tuoi redis siano protetti con qualsiasi mezzo che soddisfi le tue esigenze.

+14

Questa era la risposta giusta per me. – d512

+1

Stessa cosa qui, dovresti consentire le connessioni remote dal server Redis in primo luogo prima di pensare alle impostazioni del firewall o ai problemi di rete. Grazie Orabig – securecurve

+0

Grazie Orabîg, ha funzionato anche per me! – rajibchowdhury

0

L'impostazione tcp-keepalive su 60 (era impostata su 0) nella configurazione redis del server mi ha aiutato a risolvere questo problema.

8

Oltre all'ottima risposta data da Orabîg:

ho risolto questo problema rimuovendo la sezione bind del tutto e l'impostazione protected-mode a no.

#bind 127.0.0.1 
protected-mode no 

Mai utilizzare questo metodo sui server esposti pubblicamente.

+1

Per chi usa il metodo non protetto: Proteggi il tuo Redis Server !! o perderai tutti i tuoi file :( Il mio server è stato compromesso perché non sto proteggendo Redis . Server L'attaccante vuole farmi pagare una certa quantità di denaro (abbastanza grande per me) L'attaccante qualcosa di simile a questo:. https://duo.com/blog/over-18000-redis-instances-targeted-by-fake -ransomware – MonkimoE

1
  • se avete scaricato Redis te stesso (non apt-get install Redis-server) e quindi modificato il redis.conf con i suggerimenti di cui sopra, assicurarsi che le Redis inizio con il config in questo modo: ./src/redis-server redis.conf

    • nota anche lato sto includendo uno screenshot del box virtuale impostazione connettersi a Redis, se siete su Windows e collegamento di una macchina virtuale VirtualBox.

enter image description here

0

Orabig è corretto.

È possibile associare 10.0.2.15 a Ubuntu (VirtualBox) poi fare una porta spedizioni da host a guest Ubuntu.

in /etc/redis/redis.conf

bind 10.0.2.15 

poi, Redis riavvio:

sudo systemctl restart redis 

Si devono lavorare!

Problemi correlati