Instalación Servidor · 10 min read · Sep 27, 2025

Instalación de un clúster de Web, Email y Base de Datos MySQL (Espejo) en Debian 5.0 con ISPConfig 3

Instalación de un clúster de Web, Email y Base de Datos MySQL (Espejo) en Debian 5.0 con ISPConfig 3

Versión 1.0
Autor: Till Brehm

Este tutorial describe la instalación de un servidor clúster de Web, Email, Base de Datos y DNS que se utilizará para redundancia, alta disponibilidad y balanceo de carga en Debian 5 con el panel de control ISPConfig 3. Se utilizará GlusterFS para reflejar los datos entre los servidores e ISPConfig para reflejar los archivos de configuración. Usaré una configuración de dos servidores aquí con fines de demostración, pero la configuración puede escalar a un mayor número de servidores con solo modificaciones menores en los archivos de configuración de GlusterFS.

Actualmente hay una limitación en la configuración del clúster de MySQL. El demonio de MySQL tiene problemas de bloqueo durante la verificación inicial de innodb cuando se inicia el segundo servidor. La solución actual que utilizo aquí es iniciar MySQL solo con myisam. He encontrado varios informes de servidores MySQL que funcionan correctamente con innodb en GlusterFS, por lo que debe ser posible con algunos ajustes finos del archivo de configuración de GlusterFS y/o MySQL utilizar innodb también. Intentaré encontrar una solución para los problemas de bloqueo y actualizaré este tutorial. Si alguien conoce una solución para innodb en GlusterFS, por favor contácteme. Si desea usar el segundo servidor solo como sistema de espera caliente, entonces debería poder usar innodb siempre que inicie MySQL en el segundo servidor solo cuando el primer servidor esté desconectado.

Esta es actualmente una configuración de prueba de concepto, por lo que aún no hay experiencia sobre cómo esta configuración escala en sistemas de producción. La única parte que podría causar problemas es el directorio de datos compartido de MySQL. Otra solución para acceder a bases de datos MySQL desde varios servidores simultáneamente es utilizar una configuración de clúster de MySQL (http://www.mysql.com/products/database/cluster/) o replicación maestro/maestro de MySQL (https://www.howtoforge.com/mysql_master_master_replication).

Para aprender a usar ISPConfig 3, recomiendo encarecidamente descargar el Manual de ISPConfig 3.

En casi 300 páginas, cubre el concepto detrás de ISPConfig (administrador, revendedores, clientes), explica cómo instalar y actualizar ISPConfig 3, incluye una referencia para todos los formularios y campos de formulario en ISPConfig junto con ejemplos de entradas válidas, y proporciona tutoriales para las tareas más comunes en ISPConfig 3. También detalla cómo hacer que su servidor sea más seguro y viene con una sección de solución de problemas al final.

1 Configuración de los Dos Sistemas Base

En esta configuración habrá un servidor maestro (que ejecuta la interfaz del panel de control ISPConfig) y un servidor esclavo que refleja los servicios de web (apache), email (postfix y dovecot) y base de datos (MySQL) del servidor maestro.

Para instalar la configuración en clúster, necesitamos dos servidores con una instalación mínima de Debian 5.0. La configuración base se describe en el siguiente tutorial en los pasos 1 - 6:

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

¡Instale solo los pasos 1 - 6 del tutorial del servidor perfecto y no los otros pasos ya que difieren para una configuración en clúster!

En mi ejemplo, utilizo los siguientes nombres de host y direcciones IP para los dos servidores:

Servidor Maestro
Nombre de host: server1.example.tld
Dirección IP: 192.168.0.105

Servidor Esclavo
Nombre de host: server2.example.tld
Dirección IP: 192.168.0.106

Dondequiera que estos nombres de host o direcciones IP aparezcan en los siguientes pasos de instalación, deberá cambiarlos para que coincidan con las IPs y nombres de host de sus servidores.

2 Instalación de los Dos Servidores

Los siguientes pasos deben ejecutarse en el servidor maestro y en el servidor esclavo. Si un paso específico es solo para el maestro o esclavo, he agregado una nota en la descripción en rojo.

vi /etc/hosts
127.0.0.1       localhost
192.168.0.105   server1.example.tld
192.168.0.106   server2.example.tld
# Las siguientes líneas son deseables para hosts compatibles 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

Establezca el nombre de host del servidor:

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

Utilice server1.example.tld en el primer servidor y server2.example.tld en el segundo servidor.

Edite el archivo sources.list…

vi /etc/apt/sources.list 

… y asegúrese de que contenga las siguientes dos líneas. La primera es para el repositorio volátil de debian para obtener paquetes actualizados para el software antivirus ClamAV y SpamAssassin y la segunda es para el repositorio de backports que contiene paquetes actuales de 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

Ejecute…

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

… para instalar la clave del repositorio de backports y actualizar la base de datos de paquetes apt; luego ejecute …

apt-get upgrade

… para instalar las últimas actualizaciones (si las hay).

Es una buena idea sincronizar el reloj del sistema con un servidor NTP ( n etwork t ime p rotocol) a través de Internet. Simplemente ejecute…

apt-get -y install ntp ntpdate

… y su hora del sistema siempre estará sincronizada.

Instale postfix, dovecot y 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

Ingrese la nueva contraseña para mysql cuando lo solicite el instalador y responda las siguientes preguntas como se describe a continuación:

¿Crear directorios para la administración basada en web? <– No
¿Tipo general de configuración? <– Sitio de Internet
¿Nombre de correo? <– server1.mydomain.tld
¿Certificado SSL requerido? <– Ok

Queremos que MySQL escuche en todas las interfaces, no solo en localhost, por lo tanto editamos /etc/mysql/my.cnf y comentamos la línea bind-address = 127.0.0.1:

vi /etc/mysql/my.cnf
[...]  
# En lugar de skip-networking, el valor predeterminado ahora es escuchar solo en  
# localhost, lo cual es más compatible y no menos seguro.  
#bind-address           = 127.0.0.1  
[...]  

Luego reinicie MySQL:

/etc/init.d/mysql restart

Para instalar amavisd-new, SpamAssassin y ClamAV, ejecutamos:

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 

Luego instale Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear y mcrypt de la siguiente manera:

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 

Verá la siguiente pregunta:

Servidor web para reconfigurar automáticamente: <– apache2

Luego ejecute el siguiente comando para habilitar los módulos de Apache suexec, rewrite, ssl, actions e include:

a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digest

PureFTPd y quota se pueden instalar con el siguiente comando:

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

Edite /etc/fstab. El mío se ve así (agregué,usrquota,grpquota a la partición con el punto de montaje /):

vi /etc/fstab
# /etc/fstab: información estática del sistema de archivos.  
#  
#                  
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

Para habilitar quota, ejecute estos comandos:

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

Instale el servidor DNS BIND:

apt-get -y install bind9 dnsutils

Instale vlogger, webalizer y awstats:

apt-get -y install vlogger webalizer awstats 

Instale Jailkit: Jailkit solo es necesario si desea chroot usuarios SSH. Se puede instalar de la siguiente manera (importante: Jailkit debe instalarse antes de ISPConfig - ¡no se puede instalar después!):

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*

Instale fail2ban: Esto es opcional pero recomendado, porque el monitor de ISPConfig intenta mostrar el registro:

apt-get install fail2ban

Instale GlusterFS y Fuse:

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

Elimine los archivos de configuración de ejemplo de GlusterFS:

rm -f /etc/glusterfs/*.vol 

Cree los directorios de datos para los volúmenes de 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

Cree el archivo de configuración del servidor GlusterFS:

vi /etc/glusterfs/glusterfsd.vol
# Configuración para el volumen del servidor 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
# Configuración para el volumen del servidor 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
# Configuración para el volumen del servidor 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
# exportar todos los volúmenes
volume server
  type protocol/server
  option transport-type tcp
  subvolumes brick-mysql brick-vmail brick-www
  
  # opciones de autenticación para el volumen 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
  
  # Opciones de autenticación para el volumen 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
  
  # opciones de autenticación para 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

Reemplace las direcciones IP con las IPs de sus servidores y reemplace la contraseña 7wQav7ExkFg6eW con una contraseña de su elección.

Inicie el servidor GlusterFS:

/etc/init.d/glusterfs-server start 

Ahora creamos los tres archivos de volumen del cliente que necesitamos para montar los sistemas de archivos de 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

Antes de montar nuestros volúmenes en los directorios, tendremos que detener algunos servicios y hacer una copia de seguridad de los datos actuales:

/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

Agregue las líneas:

/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

Ahora monte las unidades ejecutando:

mount -a

Cambia el propietario del directorio mysql al usuario y grupo mysql:

chown mysql:mysql /var/lib/mysql

Copia los datos de mysql y www de vuelta.

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

Copia de vuelta los datos (¡solo en el servidor maestro! ¡Salte este paso en el esclavo!).

Apague innodb ya que causa problemas de bloqueo cuando MySQL se inicia.

vi /etc/mysql/my.cnf

Cambia la línea:

#skip-innodb

a:

skip-innodb   

y agregue la línea

innodb_file_per_table  

en la sección [mysqld] del archivo my.cnf.

Cuando configure el servidor esclavo, copie el archivo /etc/mysql/debian.cnf del servidor maestro al servidor esclavo antes de reiniciar MySQL.

Ahora inicie los servicios nuevamente:

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

Cambie el orden de inicio de GlusterFS para asegurarse de que el servidor GlusterFS siempre se inicie antes que 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

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.