Nel primo articolo abbiamo creato il server che fungerà da storage NFS per le pagine PHP e per i contenuti statici e che risponderà alla porta 80 per servire direttamente i contenuti statici e girare a dei server in load balancing le richeste di elaborazione dei contenuti dinamici PHP.
In questo secondo articolo andremo a creare vm2 che è, appunto, l’application server che servirà i contenuti PHP attraverso php-fpm.
Creiamo questa VM partendo da una installazione “vanilla” di Debian Squeeze (6.0.1), dotando la VM di 1024 MB di RAM, 2 VCPU (CPU virtuale), 0.50 CPU (assegnamo il 50% della potenza di una CPU fisica), 1 schede di rete con IP privato e 2048 MB Disco Swap.
Configurazione di base
Come per vm1 la prima cosa che andremo a fare è modificare alcune delle configurazoni di default, in particolare il file hosts che ci consentirà di raggiungere tramite mnemonico le VM del nostro sistema:
/etc/hosts 10.10.1.1 lb 10.10.1.2 php-appserver1 mysql 10.10.1.3 mysql-server1
e il file /etc/hostname
/etc/hostname php-appserver1
Installazione di nginx
Come per il load balancer, anche su questo server installeremo nginx per tre ragioni: la prima è che così il server potrà servire anche contenuti non PHP ma che non vengono serviti direttamente da vm1 (ad esempio un file statico ma con estensione diversa da quelle dichiarate su vm1), la seconda che potrà essere utile nel caso di guasto di vm1 e la terza è che così si avrà un miglior controllo del numero di richeste contemporanee servite dalla vm.
Per procedere con l’installazione, analogamente a quanto eseguito su vm1, andiamo ad aggiungere la seguente riga al file /etc/apt/sources.list
/etc/apt/sources.list deb http://packages.dotdeb.org stable all
Aggiungiamo la chiave PGP:
wget http://www.dotdeb.org/dotdeb.gpg cat dotdeb.gpg | apt-key add - rm dotdeb.gpg
ed installiamo nginx
apt-get update apt-get install nginx
Creiamo, per semplicità, il link simbolico alla directory /usr/share/nginx/www:
ln -s /usr/share/nginx/www/ /var/www
Modifichiamo il file di configurazione per il server di default:
server {
listen 80;
server_name _;
root /usr/share/nginx/www;
index index.php;
log_not_found off;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/www$fastcgi_script_name;
include fastcgi_params;
}
}
Installazione del client NFS
Ora installiamo il client nfs:
apt-get install nfs-client
e modifichiamo il file /etc/fstab in modo da montare automaticamente il disco di rete aggiungendo la seguente riga:
/etc/fstab lb:/usr/share/nginx/www /usr/share/nginx/www nfs4 hard,intr,_netdev 0 0
Configuriamo identd con:
/etc/default/nfs-common NEED_IDMAPD=yes NEED_GSSD=no
Riavviamo il servizio nfs-common con:
/etc/init.d/nfs-common restart
e montiamo il disco con:
mount -a
Installazione di php-fpm
Per installare php-fpm utilizziamo il package manager di debian. Assieme a php-fpm installeremo alcune estensioni che ci torneranno utili nella configurazione di wordpress:
apt-get install php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd php5-apc php5-memcache php5-memcached php5-suhosin
Ora modifichiamo la configurazione di php-fpm:
/etc/php5/fpm/pool.d/www.conf pm.max_children = 25 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 10 pm.max_requests = 500 request_terminate_timeout = 30s
Questa è una taratura adatta ad una VM con 512MB-1024MB di RAM, ma ovviamente la potenza reale della CPU influisce sulla validità di questi valori.
Ora riavviamo php-fpm per rendere attive le impostazioni.
/etc/init.d/php5-fpm restart
Installazione di memcached
Memcached è un demone per creare una cache distribuita che torna utile per velocizzare gli accessi al database. Per installarla è sufficiente lanciare il comando:
apt-get install memcached
Installazione di mysql-proxy
mysql-proxy è un demone che permette di utilizzare una batteria di server mysql in configurazione master-slave per distribuire il carico delle query in lettura. Al momento avremo un solo server mysql, ma in un futuro potrebbe tornare utile:
apt-get install mysql-client mysql-proxy
E configuriamolo con:
/etc/default/mysql-proxy ENABLED="true" OPTIONS="--proxy-address=:3306 --proxy-backend-addresses=mysql-server1:3306 --pr oxy-read-only-backend-addresses=mysql-server1:3306"