• seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Memcached: installazione e configurazione in Linux CentOS e PHP

di :: 23 settembre 2020
Memcached: installazione e configurazione in Linux CentOS e PHP

Memcached è un database di tipo NoSQL (Not Only SQL), che archivia i dati in maniera completamente differente dai classici database relazionali come ad esempio MySQL.

Oltre a Memcached, tra i NoSQL, possiamo menzionare Apache Cassandra, MongoDB, Redis e Amazon DynamoDB.

I database NoSQL si dividono in quattro differenti tipologie: chiave-valore, orientato ai documenti, a grafo, orientati alle colonne: Memcached utilizza la tipologia "chiave-valore" in cui ogni singolo elemento viene salvato con una chiave assieme al suo valore. Vedremo nel prossimo articolo esempi pratici il suo utilizzo.

Oggi ci occupiamo dell'installazione di Memcached su una distribuzione Centos 8 e PHP 7.

Installazione di Memcached

Utilizziamo yum, o dnf, per installare Memcached, assieme alla libreria libmemcached

# yum install memcached libmemcached

yum install memcached

Ultimata l'installazione, per esser certi della sua installazione, e per conoscere la versione installata, digitiamo

# rpm -q memcached

Otteniamo come risposta la versione installata

memcached-1.5.9-3.el8.x86_64

Per avere informazioni aggiuntive sull'installazione effettuata aggiungiamo l'attributo "i"

# rpm -qi memcached

Ecco il risultato

Name        : memcached
Epoch       : 0
Version     : 1.5.9
Release     : 3.el8
Architecture: x86_64
Install Date: Wed 23 Sep 2020 09:26:13 AM CEST
Group       : System Environment/Daemons
Size        : 280586
License     : BSD
Signature   : RSA/SHA256, Tue 07 Apr 2020 03:18:39 AM CEST, Key ID 05b555b38483c65d
Source RPM  : memcached-1.5.9-3.el8.src.rpm
Build Date  : Mon 06 Apr 2020 10:41:42 PM CEST
Build Host  : x86-01.mbox.centos.org
Relocations : (not relocatable)
Packager    : CentOS Buildsys <bugs@centos.org>
Vendor      : CentOS
URL         : https://www.memcached.org/
Summary     : High Performance, Distributed Memory Object Cache
Description :
memcached is a high-performance, distributed memory object caching
system, generic in nature, but intended for use in speeding up dynamic
web applications by alleviating database load.

Configurazione di Memcached

Il file di configurazione è localizzato sotto "/etc/sysconfig" e si chiama "memcached".

Per verificare il suo contenuto utilizziamo il comando "cat" come segue

# cat -n /etc/sysconfig/memcached

Questo il contenuto del file di configurazione

1  PORT="11211"
2  USER="memcached"
3  MAXCONN="1024"
4  CACHESIZE="64"
5  OPTIONS="-l 127.0.0.1,::1"

Queste sono le configurazioni previste di default

  1. La porta del servizio è la 11211
  2. L'utente associato a questo servizio è memcached
  3. Il numero massimo di connessioni previste è 1024
  4. La quantità di RAM destinata alla memorizzazione dei dati è 64 MB

  5. la nostra applicazione (il nostro sito) utilizza Memcached localizzato sulla stessa macchina, per cui l'ip indicato è 127.0.0.1

Questa configurazione è ovviamente modificabile.

Ad esempio per aumetare la sicurezza, essendo il protocollo UDP più sogggetto a queste tipologie di attacchi di tipo DOS (denial of service) possiamo disabilitare la porta UDP, lanciando aperta la sola TPC

Per fare questo aggiungiamo il parametro "-U 0" ad "OPTIONS"

5 OPTIONS="-l 127.0.0.1 -U 0"

Se invece volessimo connetterci ad una macchina diversa, quindi con un IP diverso, sostituiamo o aggiungiamo all'ip 127.0.0.1, l'ip della macchina, ad esempio l'ip 192.168.100.30

5 OPTIONS="-l 127.0.0.1,192.168.100.30,::1 -U 0"

Configurazione del firewall

Se la macchina che si collega a Memcahced è localizzata sulla stessa macchiana su cui è installato Memcached, probabilmente non dovrebe far nulla a livello firewall perchè normalmente le chiamate provenineti da localhost vengono accettate. Ma se, come nel nostro esempio, la chiamata avviene da una macchina diversa, la 192.168.100.30, dobbiamo aggiungere delle regole.

Abbiamo detto che la porta usata dal servizio è la 11211, dobbiamo aprire quindi questa porta sul firewall all'ip 192.168.100.30.

Se utilizziamo IPtables aggiungiamo questa regola

# iptables -A INPUT -p tcp -s 192.168.100.30/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Se invece utilizziamo Firewalld, aggiungiamo una nuova zona chiamata "memcached", specifichiamo poi la porta tpc 11211 da aprire, e infine abilitiamo l'ip che può accedere.

# firewall-cmd --permanent --new-zone=memcached
# firewall-cmd --permanent --zone=memcached --add-port=11211/tcp
# firewall-cmd --permanent --zone=memcached --add-source=192.168.100.30/32

Ricorda di riavviare il firewall!

Avviamo Memcached

Bene, abbiamo ultimato l'installazione. Procediamo con l'avvio del servizio

# systemctl start memcached

Per abilitare il servizio all'avvio automatico al riavvio del server

# systemctl enable memcached

Per verificare lo stato del servizio

# systemctl status memcached

Verifichiamo, con netstat, che Memcached sia associato all'interfaccia locale e ascolti solo le connessioni TCP

# netstat -plunt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      23499/memcached
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      8730/systemd-resolv
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      21452/rpc.mountd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      8029/sshd
tcp        0      0 0.0.0.0:57079           0.0.0.0:*               LISTEN      8764/rpc.statd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      8098/master
tcp        0      0 0.0.0.0:40029           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::3306                 :::*                    LISTEN      16445/mysqld
tcp6       0      0 ::1:11211               :::*                    LISTEN      23499/memcached
tcp6       0      0 :::5355                 :::*                    LISTEN      8730/systemd-resolv
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
tcp6       0      0 :::20048                :::*                    LISTEN      21452/rpc.mountd
tcp6       0      0 :::80                   :::*                    LISTEN      374/httpd
tcp6       0      0 :::34549                :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      8029/sshd
tcp6       0      0 :::443                  :::*                    LISTEN      374/httpd
tcp6       0      0 :::57339                :::*                    LISTEN      8764/rpc.statd
tcp6       0      0 :::2049                 :::*                    LISTEN      -
udp        0      0 0.0.0.0:20048           0.0.0.0:*                           21452/rpc.mountd
udp        0      0 0.0.0.0:37570           0.0.0.0:*                           8764/rpc.statd
udp        0      0 0.0.0.0:47310           0.0.0.0:*                           -
udp        0      0 127.0.0.53:53           0.0.0.0:*                           8730/systemd-resolv
udp        0      0 51.195.4.100:68         0.0.0.0:*                           7234/NetworkManager
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd
udp        0      0 127.0.0.1:323           0.0.0.0:*                           3989/chronyd
udp        0      0 127.0.0.1:884           0.0.0.0:*                           8764/rpc.statd
udp        0      0 0.0.0.0:5355            0.0.0.0:*                           8730/systemd-resolv
udp6       0      0 :::20048                :::*                                21452/rpc.mountd
udp6       0      0 :::36581                :::*                                -
udp6       0      0 :::42714                :::*                                8764/rpc.statd
udp6       0      0 :::111                  :::*                                1/systemd
udp6       0      0 ::1:323                 :::*                                3989/chronyd
udp6       0      0 :::5355                 :::*                                8730/systemd-resolv

PHP e Memcached

Affinchè PHP possa lavorare con Memcached, dobbiamo installare l'estensione php-pecl-memcached

Questa estensione non è disponibile nei repositori di default di CentOS 8, ma dobbiamo abilitare i noti repo "epel" e "remi"

E' importante anche conoscere la versione di PHP installata sul nostro server, e per farlo utilizziamo il comando "php -v". Noi abbiamo la 7.2.11

Bene, possiamo procedere con l'installazione

# yum install epel-release
# yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Conoscendo la versione di PHP installata, nel nostro caso la 7.2, procediamo così

# yum module enable php:remi-7.2

Ed infine

# yum install php-pecl-memcache php-pecl-memcached

Riavviamo il webserver Apache (o Nginx) e verifichiamo che sia l'estensione sia effettivamente installata creando un file php, ad esempio info.php, con dentro questo codice

<?php
phpinfo();
?>

Apriamolo da browser e se individuiamo le sezioni relative a Memached, significherà che l'installazione è andata a buon fine!

php memcached

Nel prossimo articolo vedremo esempi relativi all'utilizzo di Memached con PHP.

Stay tuned!

Potrebbe interessarti

Approfondimenti

 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

 
 
 
x

ATTENZIONE