Instalación Servidores · 7 min read · Sep 28, 2025

Instalación de un clúster de Web, Correo y Base de Datos MySQL en Debian 6.0 con ISPConfig 3

Instalación de un clúster de Web, Correo y Base de Datos MySQL en Debian 6.0 con ISPConfig 3

Versión 1.0
Autor: Till Brehm

Este tutorial describe la instalación de un servidor web, de correo, base de datos y DNS en clúster que se utilizará para redundancia, alta disponibilidad y balanceo de carga en Debian 6 con el panel de control ISPConfig 3. Se utilizará la replicación Master/Master de MySQL para replicar las bases de datos de clientes de MySQL entre los servidores y Unison se utilizará para sincronizar las carpetas /var/www (sitios web) y /var/vmail (datos de cuentas de correo).

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), correo (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 6.0. La configuración base se describe en el siguiente tutorial en los pasos 1 - 8:

https://www.howtoforge.com/perfect-server-debian-squeeze-with-bind-and-dovecot-ispconfig-3

¡Instala solo los pasos 1 - 8 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, tendrás que cambiarlos para que coincidan con las IP y nombres de host de tus 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 el esclavo, he añadido 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

Establece el nombre de host del servidor:

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

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

Edita el archivo sources.list…

vi /etc/apt/sources.list 

… y asegúrate de que tu /etc/apt/sources.list contenga el repositorio squeeze-updates (esto asegura que siempre obtengas las actualizaciones más recientes para el escáner de virus ClamAV - este proyecto publica versiones muy a menudo, y a veces las versiones antiguas dejan de funcionar).

[...]  
deb http://ftp.de.debian.org/debian/ squeeze-updates main  
[...]  

Ejecuta

apt-get update
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 ejecuta

apt-get -y install ntp ntpdate

y tu hora del sistema siempre estará sincronizada.

En el servidor 1:

Ahora creamos un par de claves privada/pública en server1.example.tld:

ssh-keygen -t dsa

root@server1:~# ssh-keygen -t dsa
Generando par de claves dsa pública/privada.
Introduce el archivo en el que guardar la clave (/root/.ssh/id_dsa): <– ENTER
Directorio creado ‘/root/.ssh’.
Introduce la frase de paso (vacío para no usar frase de paso): <– ENTER
Introduce la misma frase de paso de nuevo: <– ENTER
Tu identificación se ha guardado en /root/.ssh/id_dsa.
Tu clave pública se ha guardado en /root/.ssh/id_dsa.pub.
La huella de la clave es:
1b:95:bc:4a:f4:9f:d8:ea:24:31:0f:c9:72:d5:a7:80 [email protected]
La imagen aleatoria de la clave es:
+–[ DSA 1024]—-+
| |
| o o |
| E * . . |
| o = o o |
| . S o . |
| + O + . |
| + + + |
| o . |
| .o |
+—————–+
root@server1:~#

Es importante que no introduzcas una frase de paso, de lo contrario la replicación no funcionará sin interacción humana, así que simplemente presiona ENTER.

A continuación, copiamos nuestra clave pública a server2.example.tld:

ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]

root@server1:~# ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]
La autenticidad del host ‘192.168.0.101 (192.168.0.101)’ no se puede establecer.
La huella de la clave RSA es 25:d8:7a:ee:c2:4b:1d:92:a7:3d:16:26:95:56:62:4e.
¿Estás seguro de que deseas continuar conectando (sí/no)? <– sí (solo verás esto si es la primera vez que te conectas a server2)
Advertencia: Se ha añadido permanentemente ‘192.168.0.101’ (RSA) a la lista de hosts conocidos.
La contraseña de ‘[email protected]’: <– contraseña de root de server2
Ahora intenta iniciar sesión en la máquina, con “ssh ‘[email protected]’”, y verifica en:

 .ssh/authorized_keys
para asegurarte de que no hemos añadido claves adicionales que no esperabas.

Ahora verifica en server2 si la clave pública de server1 se ha transferido correctamente:

server2:

cat $HOME/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAPhiAexgEBexnw0rFG8lXwAuIsca/V+lhmv5lhF3BqUfAbL7e2sWlQlGhxZ8I2UnzZK8Ypffq6Ks+lp46yOs7MMXLqb7JBP9gkgqxyEWqOoUSt5hTE9ghupcCvE7rRMhefY5shLUnRkVH6hnCWe6yXSnH+Z8lHbcfp864GHkLDK1AAAAFQDddQckbfRG4C6LOQXTzRBpIiXzoQAAAIEAleevPHwi+a3fTDM2+Vm6EVqR5DkSLwDM7KVVNtFSkAY4GVCfhLFREsfuMkcBD9Bv2DrKF2Ay3OOh39269Z1rgYVk+/MFC6sYgB6apirMlHj3l4RR1g09LaM1OpRz7pc/GqIGsDt74D1ES2j0zrq5kslnX8wEWSHapPR0tziin6UAAACBAJHxgr+GKxAdWpxV5MkF+FTaKcxA2tWHJegjGFrYGU8BpzZ4VDFMiObuzBjZ+LrUs57BiwTGB/MQl9FKQEyEV4J+AgZCBxvg6n57YlVn6OEA0ukeJa29aFOcc0inEFfNhw2jAXt5LRyvuHD/C2gG78lwb6CxV02Z3sbTBdc43J6y [email protected]

Instala 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

Introduce la nueva contraseña para el usuario root de MySQL cuando lo solicite el instalador. Debes elegir la misma contraseña para ambos servidores. Luego responde a las siguientes preguntas como se describe a continuación:

¿Tipo general de configuración? <– Sitio de Internet
¿Nombre de correo? <– server1.mydomain.tld
¿Certificado SSL requerido? <– Ok

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

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 es menos seguro.  
#bind-address           = 127.0.0.1  
[...]  

Luego reinicia MySQL:

/etc/init.d/mysql restart

Ahora preparamos los servidores MySQL para la replicación mysql master/master.

En el servidor 1:

Inicia sesión en MySQL en la consola con…

 mysql -u root -p

… e introduce la contraseña de root de MySQL que elegiste durante la instalación de mysql. Luego ejecuta este comando en la consola de MySQL:

GRANT REPLICATION SLAVE ON . TO ‘slaveuser’@’%’ IDENTIFIED BY ‘slave_user_password’;
FLUSH PRIVILEGES;
quit;

Reemplaza ‘slave_user_password’ con una contraseña segura que deseas usar para que el esclavo se conecte al servidor maestro. Reemplaza este marcador de posición en los siguientes pasos con la contraseña que elegiste dondequiera que ocurra el marcador de posición.

Ahora configuremos nuestros 2 nodos MySQL:

En el servidor 1:

vi /etc/mysql/my.cnf

Busca la sección que comienza con [mysqld], y pon las siguientes opciones en ella (comentando todas las opciones conflictivas existentes):

[...]  
[mysqld]  
server-id = 1  
replicate-same-server-id = 0  
auto-increment-increment = 2  
auto-increment-offset = 1  
 
master-host = 192.168.0.106  
master-user = slaveuser  
master-password = slave_user_password  
master-connect-retry = 60   
 
expire_logs_days        = 10  
max_binlog_size         = 500M  
log_bin                        = /var/log/mysql/mysql-bin.log  
[...]  

Luego detén MySQL:

/etc/init.d/mysql stop

Ahora haz casi lo mismo en server2…

En el servidor 2:

vi /etc/mysql/my.cnf

Busca la sección que comienza con [mysqld], y pon las siguientes opciones en ella (comentando todas las opciones conflictivas existentes):

[...]  
[mysqld]  
server-id = 2  
replicate-same-server-id = 0  
auto-increment-increment = 2  
auto-increment-offset = 2  
   
master-host = 192.168.0.105  
master-user = slaveuser  
master-password = slave_user_password  
master-connect-retry = 60  
 
expire_logs_days        = 10  
max_binlog_size         = 500M  
log_bin                        = /var/log/mysql/mysql-bin.log  
[...]  

Luego detén MySQL:

/etc/init.d/mysql stop

Ahora tenemos que sincronizar los dos servidores mysql. Hacemos esto copiando el directorio de datos mysql del maestro al esclavo y también el archivo de configuración de debian que contiene el usuario debian-sys-maint. Esto se puede hacer ya que detuvimos mysql antes en ambos servidores.

En el servidor 1:

scp -pr /var/lib/mysql/* [email protected]:/var/lib/mysql/
scp -pr /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

Ahora iniciamos MySQL en el servidor maestro nuevamente:

/etc/init.d/mysql start

Inicia sesión en la consola de MySQL como usuario root…

mysql -u root -p

… y ejecuta este comando en la consola de MySQL…

 SHOW MASTER STATUS; 

… para obtener el estado maestro de MySQL:

mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| Archivo | Posición | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 | 106 | | |
+——————+———-+————–+——————+
1 fila en el conjunto (0.00 seg)

La información que necesitamos para el siguiente paso es el archivo de binlog mysql-bin.000002 y la posición de binlog 106. Necesitamos los mismos detalles para server2 más adelante.

Ahora ejecuta este comando en la consola de MySQL en el maestro para conectarlo al esclavo:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’192.168.0.106’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’slave_user_password’, MASTER_LOG_FILE=’mysql-bin.000002’, MASTER_LOG_POS=106;
START SLAVE;

Luego verifica el estado del esclavo:

SHOW SLAVE STATUS \G

Es importante que tanto Slave_IO_Running como Slave_SQL_Running tengan el valor Sí en la salida.

En el servidor 2:

Inicia sesión en la consola de MySQL como usuario root…

mysql -u root -p

… y ejecuta este comando en la consola de MySQL:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’192.168.0.105’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’slave_user_password’, MASTER_LOG_FILE=’mysql-bin.000002’, MASTER_LOG_POS=106;
START SLAVE;

Luego verifica el estado del esclavo:

SHOW SLAVE STATUS \G

Es importante que tanto Slave_IO_Running como Slave_SQL_Running tengan el valor Sí en la salida.

La configuración de la replicación mysql master/master ha terminado ahora y procedemos a instalar los otros paquetes de software.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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