Redis è un database open source particolarmente veloce grazie ai suoi dati che possono essere salvati sia sulla memoria che sul disco. Rappresenta una delle migliori soluzioni per lo sviluppo di applicazioni che richiedono l'elaborazione dei dati in tempo reale.
Questo tutorial fornisce una spiegazione dettagliata di come installare e configurare il database Redis su un server con distribuzione Linux CentOS 7 e di come migliorare la sicurezza del database e creare un'installazione di replica.
Per prima cosa, connettiti al tuo server tramite una connessione SSH. Se non l'hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. Nel caso di un server locale, vai al passaggio successivo e apri il terminale del tuo server.
Installazione di Redis
Per installare Redis, usa il gestore di pacchetti yum:
$ sudo yum install redis
Una volta completata l'installazione, avvia il servizio e installalo sul sistema:
$ sudo systemctl start redis
$ sudo systemctl enable redis
Verifica dell'installazione
Per verificare la corretta installazione di Redis, usa il client a riga di comando redis-cli, impostando un valore di test nel tuo database:
$ redis-cli set test 123456
OK
Se tutto funziona correttamente, il server risponderà con "OK". Pertanto, controlla se il valore è stato salvato correttamente:
$ redis-cli get test
"123456"
Redis restituirà il valore appena salvato (in questo caso la stringa "123456"). Quindi, elimina questa chiave di prova:
$ redis-cli del test
(integer) 1
Migliorare la sicurezza della tua installazione
La configurazione iniziale di Redis permette di connettersi al database solo da un indirizzo locale e senza richiedere alcuna password o forma di autenticazione.
Tutte le impostazioni Redis vengono lette dal file di configurazione in /etc/redis.conf e possono essere sovrascritte in qualsiasi momento e in tempo reale, utilizzando qualsiasi software client tramite i comandi CONFIG SET / CONFIG GET. Ricorda però che le impostazioni modificate dal client non vengono salvate nel file di configurazione e, , andranno perse al successivo avvio di Redis. .
Per migliorare la sicurezza del tuo database, imposta una password di autenticazione, modificando o inserendo la voce requirepass nel file di configurazione:
requirepass 5eMX822gZ0lCGdd81rSIrTvPCUfeEFYAUIgyJNs4
La password viene salvata nel file di configurazione in chiaro e deve essere abbastanza lunga da resistere agli attacchi bruteforce poiché Redis è in grado di gestire più connessioni al secondo.
Tra le impostazioni più importanti troviamo anche il bind che imposta che all'indirizzo Redis deve abilitare la ricezione delle connessioni:
bind 127.0.0.1
Solo l'indirizzo locale 127.0.0.1 è abilitato per impostazione predefinita. Tuttavia, se è necessario esporre il server Redis all'esterno, è possibile aggiungere ulteriori indirizzi, come:
bind 127.0.0.1 51.125.63.201
Un altro errore comune è lasciare la porta predefinita impostata per ascoltare le connessioni in entrata. Ciò consente a qualsiasi software di scansione delle porte di individuare il server Redis.
port 2589
Modificando la porta da 6379 a 2589, il servizio Redis può essere nascosto e aggiungere un ulteriore livello di sicurezza alla tua installazione.
Dopo aver completato tutte le modifiche al file di configurazione, riavvia il servizio:
$ sudo systemctl restart redis
Per verificare i parametri appena applicati, utilizzare redis-cli per ottenere, ad esempio, il parametro di binding corrente, utilizzando la nuova porta configurata e la password impostata sopra:
$ redis-cli -a 5eMX822gZ0lCGdd81rSIrTvPCUfeEFYAUIgyJNs4 -p 2589 config get bind
Il server dovrebbe rispondere con i parametri richiesti:
1) "bind"
2) "127.0.0.1"
Creazione di un'installazione di replica
Redis consente di configurare un server di replica (copia) in pochi passaggi. Rispetto alla versione master, questo server di replica viene aggiornato in tempo reale.
Attraverso questa configurazione può essere offerto un servizio di backup per la lettura in caso di malfunzionamento del server principale.
Dopo esserti connesso al server secondario slave, completa l'installazione di Redis usando yum:
$ sudo yum install redis
Le stesse procedure di sicurezza del paragrafo precedente possono essere applicate anche per proteggere questa istanza Redis. Nell'esempio seguente verranno utilizzati i parametri predefiniti.
Per essere sincronizzata con il server principale (master), la macchina slave deve comunicare correttamente con la macchina master. Verificare che nella configurazione della macchina master sia presente l'indirizzo IP pubblico (parametro bind) e verificare se la connessione funziona avviando il comando dalla macchina slave:
$ redis-cli -h [MASTER_IP_ADDRESS] -a [PASSWORD_MASTER] ping
PONG
Se viene fornita una risposta al comando ping, lo slave è in grado di comunicare correttamente.
Procedere quindi con la configurazione vera e propria dello slave, modificando i seguenti parametri nel file di configurazione /etc/redis.conf:
# If it is there, specify the master connection password too.
masterauth password
# The slaveof directory specifies the master connection parameters (ADDRESS_IP PORT)
slaveof 195.231.4.71 6379
Al termine, salva la configurazione e avvia il server slave Redis, digitando:
$ sudo systemctl start redis
$ sudo systemctl enable redis
Per verificare che la sincronizzazione sia stata attivata correttamente, utilizzare tail per visualizzare le ultime righe del file di log del servizio:
$ tail /var/log/redis/redis.log
6345:S 02 Jul 10:53:46.695 * MASTER <-> SLAVE sync: receiving 77 bytes from master
6345:S 02 Jul 10:53:46.695 * MASTER <-> SLAVE sync: Flushing old data
6345:S 02 Jul 10:53:46.695 * MASTER <-> SLAVE sync: Loading DB in memory
6345:S 02 Jul 10:53:46.695 * MASTER <-> SLAVE sync: Finished with success
Le ultime righe confermano che la sincronizzazione è attiva e funziona correttamente.
Quindi, esegui un vero test, impostando un valore nel tuo database e verificando che sia letto correttamente dal server master.
Imposta la chiave di prova dal server principale:
$ redis-cli -a password set test hello
OK
lo stesso valore viene letto dal server slave:
$ redis-cli get test
"hello"
Come puoi vedere, sia master che slave hanno memorizzato lo stesso valore. Ciò significa che la replica funziona correttamente!