Installazione Server · 9 min read · Sep 27, 2025

Installazione di un Cluster Web, Email e Database MySQL (Mirror) su Debian 5.0 con ISPConfig 3

Installazione di un Cluster Web, Email e Database MySQL (Mirror) su Debian 5.0 con ISPConfig 3

Versione 1.0
Autore: Till Brehm

Questo tutorial descrive l’installazione di un server Web, Email, Database e DNS clusterizzato da utilizzare per ridondanza, alta disponibilità e bilanciamento del carico su Debian 5 con il pannello di controllo ISPConfig 3. GlusterFS sarà utilizzato per specchiare i dati tra i server e ISPConfig per specchiare i file di configurazione. Utilizzerò un setup di due server qui a scopo dimostrativo, ma la configurazione può scalare a un numero maggiore di server con solo lievi modifiche nei file di configurazione di GlusterFS.

Attualmente c’è una limitazione nell’impostazione del cluster MySQL. Il demone MySQL ha problemi di blocco durante il controllo iniziale di innodb quando il secondo server viene avviato. La soluzione attuale che utilizzo qui è avviare MySQL solo con myisam. Ho trovato diversi rapporti di server MySQL in esecuzione con successo con innodb su GlusterFS, quindi deve essere possibile con alcune regolazioni della configurazione di GlusterFS e/o del file di configurazione di MySQL utilizzare anche innodb. Cercherò di trovare una soluzione per i problemi di blocco e aggiornerò questo tutorial. Se qualcuno conosce una soluzione per innodb su GlusterFS, per favore contattatemi. Se desideri utilizzare il secondo server solo come sistema di standby caldo, allora dovresti essere in grado di utilizzare innodb purché avvii MySQL sul secondo server solo quando il primo server è disconnesso.

Attualmente si tratta di un setup di prova di concetto, quindi non ci sono esperienze su come questa configurazione scala nei sistemi di produzione. L’unica parte che potrebbe causare problemi è la directory dei dati MySQL condivisa. Un’altra soluzione per accedere ai database MySQL da più server simultaneamente è utilizzare un’impostazione di cluster MySQL ( http://www.mysql.com/products/database/cluster/) o la replica MySQL master/master ( https://www.howtoforge.com/mysql_master_master_replication).

Per imparare a utilizzare ISPConfig 3, consiglio vivamente di scaricare il Manuale di ISPConfig 3.

Su quasi 300 pagine, copre il concetto dietro ISPConfig (amministratore, rivenditori, clienti), spiega come installare e aggiornare ISPConfig 3, include un riferimento per tutti i moduli e i campi modulo in ISPConfig insieme a esempi di input validi e fornisce tutorial per i compiti più comuni in ISPConfig 3. Illustra anche come rendere il tuo server più sicuro e include una sezione di risoluzione dei problemi alla fine.

1 Impostazione dei Due Sistemi di Base

In questo setup ci sarà un server master (che esegue l’interfaccia del pannello di controllo ISPConfig) e un server slave che specchia i servizi web (apache), email (postfix e dovecot) e database (MySQL) del server master.

Per installare il setup clusterizzato, abbiamo bisogno di due server con un’installazione minima di Debian 5.0. La configurazione di base è descritta nel seguente tutorial nei passaggi 1 - 6:

https://www.howtoforge.com/perfect-server-debian-lenny-ispconfig3

Installa solo i passaggi 1 - 6 del tutorial del server perfetto e non gli altri passaggi poiché differiscono per un setup clusterizzato!

Nel mio esempio utilizzo i seguenti nomi host e indirizzi IP per i due server:

Server Master
Nome host: server1.example.tld
Indirizzo IP: 192.168.0.105

Server Slave
Nome host: server2.example.tld
Indirizzo IP: 192.168.0.106

Dove questi nomi host o indirizzi IP si presentano nei prossimi passaggi di installazione, dovrai cambiarli per corrispondere agli IP e ai nomi host dei tuoi server.

2 Installazione dei Due Server

I seguenti passaggi devono essere eseguiti sul server master e sul server slave. Se un passaggio specifico è solo per il master o lo slave, ho aggiunto una nota nella descrizione in rosso.

vi /etc/hosts
127.0.0.1       localhost
192.168.0.105   server1.example.tld
192.168.0.106   server2.example.tld
# Le seguenti righe sono desiderabili per host compatibili con IPv6
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Imposta il nome host del server:

echo server1.example.tld > /etc/hostname
/etc/init.d/hostname.sh start

Utilizza server1.example.tld sul primo server e server2.example.tld sul secondo server.

Modifica il file sources.list…

vi /etc/apt/sources.list 

… e assicurati che contenga le seguenti due righe. La prima è per il repository volatile di debian per ottenere pacchetti aggiornati per il software antivirus ClamAV e SpamAssassin e la seconda è per il repository backports che contiene i pacchetti attuali di GlusterFS.

deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb http://www.backports.org/debian/ lenny-backports main contrib non-free

Esegui…

apt-get install debian-backports-keyring
apt-get update

… per installare la chiave del repository backports e aggiornare il database dei pacchetti apt; quindi esegui …

apt-get upgrade

… per installare gli aggiornamenti più recenti (se ce ne sono).

È una buona idea sincronizzare l’orologio di sistema con un server NTP ( n etwork t ime p rotocol) su Internet. Esegui semplicemente…

apt-get -y install ntp ntpdate

… e il tuo orario di sistema sarà sempre sincronizzato.

Installa postfix, dovecot e mysql con un solo comando:

apt-get -y install postfix postfix-mysql postfix-doc mysql-client mysql-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d sudo

Inserisci la nuova password per mysql quando richiesta dall’installatore e rispondi alle domande successive come descritto di seguito:

Crea directory per l’amministrazione basata sul web? <– No
Tipo generale di configurazione? <– Sito Internet
Nome email? <– server1.mydomain.tld
Certificato SSL richiesto <– Ok

Vogliamo che MySQL ascolti su tutte le interfacce, non solo su localhost, quindi modifichiamo /etc/mysql/my.cnf e commentiamo la riga bind-address = 127.0.0.1:

vi /etc/mysql/my.cnf
[...]  
# Invece di skip-networking il predefinito è ora ascoltare solo su  
# localhost che è più compatibile e non è meno sicuro.  
#bind-address           = 127.0.0.1  
[...]  

Quindi riavvia MySQL:

/etc/init.d/mysql restart

Per installare amavisd-new, SpamAssassin e ClamAV, eseguiamo:

apt-get -y install amavisd-new spamassassin clamav   clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract   apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon   libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip   libnet-dns-perl 

Quindi installa Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear e mcrypt come segue:

apt-get -y install apache2 apache2.2-common apache2-doc   apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5   php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli   php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth   php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libopenssl-ruby libapache2-mod-ruby sudo 

Vedrai la seguente domanda:

Server web da riconfigurare automaticamente: <– apache2

Quindi esegui il seguente comando per abilitare i moduli Apache suexec, rewrite, ssl, actions e include:

a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digest

PureFTPd e quota possono essere installati con il seguente comando:

apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatool

Modifica /etc/fstab. Il mio appare così (ho aggiunto,usrquota,grpquota alla partizione con il punto di montaggio /):

vi /etc/fstab
# /etc/fstab: informazioni statiche sul file system.  
#  
#                  
proc            /proc           proc    defaults        0       0  
/dev/sda1       /               ext3    errors=remount-ro,usrquota,grpquota 0       1  
/dev/sda5       none            swap    sw              0       0  /dev/hda        
/media/cdrom0   udf,iso9660 user,noauto     0       0  
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Per abilitare la quota, esegui questi comandi:

touch /quota.user /quota.group
chmod 600 /quota.*
mount -o remount /

quotacheck -avugm
quotaon -avug

Installa il server DNS BIND:

apt-get -y install bind9 dnsutils

Installa vlogger e webalizer e awstats:

apt-get -y install vlogger webalizer awstats 

Installa Jailkit: Jailkit è necessario solo se desideri chrootare gli utenti SSH. Può essere installato come segue (importante: Jailkit deve essere installato prima di ISPConfig - non può essere installato successivamente!):

apt-get -y install build-essential autoconf automake1.9 libtool flex bison

cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.11.tar.gz
tar xvfz jailkit-2.11.tar.gz
cd jailkit-2.11
./configure
make
make install
cd ..
rm -rf jailkit-2.11*

Installa fail2ban: Questo è facoltativo ma raccomandato, perché il monitor ISPConfig cerca di mostrare il log:

apt-get install fail2ban

Installa GlusterFS e Fuse:

apt-get -y –force-yes -t lenny-backports install fuse-utils
apt-get -y –force-yes install glusterfs-server glusterfs-client

Rimuovi i file di configurazione di esempio di GlusterFS:

rm -f /etc/glusterfs/*.vol 

Crea le directory di dati per i volumi GlusterFS:

mkdir /data/
mkdir /data/export-mysql
mkdir /data/export-mysql-ns
mkdir /data/export-vmail
mkdir /data/export-vmail-ns
mkdir /data/export-www
mkdir /data/export-www-ns

Crea il file di configurazione del server GlusterFS:

vi /etc/glusterfs/glusterfsd.vol
# Configurazione per il volume del server mysql
volume posix-mysql
  type storage/posix
  option directory /data/export-mysql
  option background-unlink yes
end-volume
volume locks-mysql
  type features/locks
  option mandatory-locks on
  subvolumes posix-mysql
end-volume
volume brick-mysql
  type performance/io-threads
  option thread-count 8
  subvolumes locks-mysql
end-volume
# Configurazione per il volume del server vmail
volume posix-vmail
  type storage/posix
  option directory /data/export-vmail
end-volume
volume locks-vmail
  type features/locks
  subvolumes posix-vmail
end-volume
volume brick-vmail
  type performance/io-threads
  option thread-count 8
  subvolumes locks-vmail
end-volume
# Configurazione per il volume del server www
volume posix-www
  type storage/posix
  option directory /data/export-www
end-volume
volume locks-www
  type features/locks
  subvolumes posix-www
end-volume
volume brick-www
  type performance/io-threads
  option thread-count 8
  subvolumes locks-www
end-volume
# esporta tutti i volumi
volume server
  type protocol/server
  option transport-type tcp
  subvolumes brick-mysql brick-vmail brick-www  
  
  # opzioni di autenticazione per il volume mysql
  option auth.addr.brick-mysql.allow 192.168.0.105,192.168.0.106
  option auth.login.brick-mysql.allow user-mysql
  option auth.login.user-mysql.password 7wQav7ExkFg6eW  
  
  # opzioni di autenticazione per il volume vmail
  option auth.addr.brick-vmail.allow 192.168.0.105,192.168.0.106
  option auth.login.brick-vmail.allow user-vmail
  option auth.login.user-vmail.password 7wQav7ExkFg6eW  
  
  # opzioni di autenticazione per www
  option auth.addr.brick-www.allow 192.168.0.105,192.168.0.106
  option auth.login.brick-www.allow user-www
  option auth.login.user-www.password 7wQav7ExkFg6eW  
  
end-volume

Sostituisci gli indirizzi IP con gli IP dei tuoi server e sostituisci la password 7wQav7ExkFg6eW con una password a tua scelta.

Avvia il server GlusterFS:

/etc/init.d/glusterfs-server start 

Ora creiamo i tre file di volume client di cui abbiamo bisogno per montare i filesystem GlusterFS.

vi /etc/glusterfs/glusterfs-mysql.vol
volume remote1-mysql
  type protocol/client
  option transport-type tcp
  option remote-host 192.168.0.105
  option remote-subvolume brick-mysql
  option username user-mysql
  option password 7wQav7ExkFg6eW
end-volume
volume remote2-mysql
  type protocol/client
  option transport-type tcp
  option remote-host 192.168.0.106
  option remote-subvolume brick-mysql
  option username user-mysql
  option password 7wQav7ExkFg6eW
end-volume
volume replicate-mysql
  type cluster/replicate
  subvolumes remote1-mysql remote2-mysql
end-volume
volume cache-mysql
  type performance/io-cache
  option cache-size 25MB
  subvolumes replicate-mysql
end-volume
vi /etc/glusterfs/glusterfs-vmail.vol
volume remote1-vmail
  type protocol/client
  option transport-type tcp
  option remote-host 192.168.0.105
  option remote-subvolume brick-vmail
  option username user-vmail
  option password 7wQav7ExkFg6eW
end-volume
volume remote2-vmail
  type protocol/client
  option transport-type tcp
  option remote-host 192.168.0.106
  option remote-subvolume brick-vmail
  option username user-vmail
  option password 7wQav7ExkFg6eW
end-volume
volume replicate-vmail
  type cluster/replicate
  subvolumes remote1-vmail remote2-vmail
end-volume
volume writebehind-vmail
  type performance/write-behind
  option window-size 1MB
  subvolumes replicate-vmail
end-volume
volume cache-vmail
  type performance/io-cache
  option cache-size 256MB
  subvolumes writebehind-vmail
end-volume
vi /etc/glusterfs/glusterfs-www.vol
volume remote1-www
  type protocol/client
  option transport-type tcp
  option remote-host 192.168.0.105
  option remote-subvolume brick-www
  option username user-www
  option password 7wQav7ExkFg6eW
end-volume
volume remote2-www
  type protocol/client
  option transport-type tcp
  option remote-host 192.168.0.106
  option remote-subvolume brick-www
  option username user-www
  option password 7wQav7ExkFg6eW
end-volume
volume replicate-www
  type cluster/replicate
  subvolumes remote1-www remote2-www
end-volume
volume writebehind-www
  type performance/write-behind
  option window-size 1MB
  subvolumes replicate-www
end-volume
volume cache-www
  type performance/io-cache
  option cache-size 256MB
  subvolumes writebehind-www
end-volume

Prima di montare i nostri volumi nelle directory, dovremo fermare alcuni servizi e fare un backup dei dati attuali:

/etc/init.d/mysql stop
/etc/init.d/apache2 stop
/etc/init.d/postfix stop
/etc/init.d/dovecot stop

mv /var/lib/mysql /var/lib/mysql_bak
mv /var/www /var/www_bak

mkdir /var/lib/mysql
mkdir /var/www
mkdir /var/vmail

vi /etc/fstab

Aggiungi le righe:

/etc/glusterfs/glusterfs-mysql.vol  /var/lib/mysql  glusterfs  defaults  0  0
/etc/glusterfs/glusterfs-vmail.vol  /var/vmail  glusterfs  defaults  0  0
/etc/glusterfs/glusterfs-www.vol  /var/www  glusterfs  defaults  0  0

Ora monta i dischi eseguendo:

mount -a

Cambia il proprietario della directory mysql all’utente e al gruppo mysql:

chown mysql:mysql /var/lib/mysql

Copia i dati mysql e www indietro.

cp -prf /var/lib/mysql_bak/ /var/lib/mysql/
cp -prf /var/www_bak/
/var/www/

Copia indietro i dati (solo sul server master! Salta questo passaggio sullo slave!).

Disattiva innodb poiché causa problemi di blocco quando MySQL si avvia.

vi /etc/mysql/my.cnf

Cambia la riga:

#skip-innodb

in:

skip-innodb   

e aggiungi la riga

innodb_file_per_table  

nella sezione [mysqld] del file my.cnf.

Quando imposti il server slave, copia il file /etc/mysql/debian.cnf dal server master al server slave prima di riavviare MySQL!

Ora riavvia i servizi:

/etc/init.d/mysql start
/etc/init.d/apache2 start
/etc/init.d/postfix start
/etc/init.d/dovecot start

Cambia l’ordine di avvio di GlusterFS per garantire che il server GlusterFS venga sempre avviato prima di MySQL.

mv /etc/rc2.d/S20glusterfs-server /etc/rc2.d/S19glusterfs-server
mv /etc/rc3.d/S20glusterfs-server /etc/rc3.d/S16glusterfs-server
mv /etc/rc4.d/S20glusterfs-server /etc/rc4.d/S16glusterfs-server
mv /etc/rc5.d/S20glusterfs-server /etc/rc5.d/S16glusterfs-server

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.