Servidor Web · 7 min read · Sep 28, 2025

Instalando Um Cluster Web, Email & Banco de Dados MySQL No Debian 6.0 Com ISPConfig 3

Instalando Um Cluster Web, Email & Banco de Dados MySQL No Debian 6.0 Com ISPConfig 3

Versão 1.0
Autor: Till Brehm

Este tutorial descreve a instalação de um servidor web, email, banco de dados e DNS em cluster a ser utilizado para redundância, alta disponibilidade e balanceamento de carga no Debian 6 com o painel de controle ISPConfig 3. A replicação MySQL Master/Master será utilizada para replicar os bancos de dados MySQL entre os servidores e o Unison será utilizado para sincronizar as pastas /var/www (sites) e /var/vmail (dados da conta de email).

1 Configurando Os Dois Sistemas Base

Nesta configuração haverá um servidor mestre (que executa a interface do painel de controle ISPConfig) e um servidor escravo que espelha os serviços web (apache), email (postfix e dovecot) e banco de dados (MySQL) do servidor mestre.

Para instalar a configuração em cluster, precisamos de dois servidores com uma instalação mínima do Debian 6.0. A configuração base é descrita no seguinte tutorial nos passos 1 - 8:

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

Instale apenas os passos 1 - 8 do tutorial do servidor perfeito e não os outros passos, pois eles diferem para uma configuração em cluster!

No meu exemplo, uso os seguintes nomes de host e endereços IP para os dois servidores:

Servidor Mestre
Hostname: server1.example.tld
IP-address: 192.168.0.105

Servidor Escravo
Hostname: server2.example.tld
IP-address: 192.168.0.106

Onde quer que esses nomes de host ou endereços IP ocorram nos próximos passos de instalação, você terá que alterá-los para corresponder aos IPs e nomes de host dos seus servidores.

2 Instalando Os Dois Servidores

Os seguintes passos devem ser executados no servidor mestre e no servidor escravo. Se um passo específico for apenas para o mestre ou escravo, então eu adicionei uma nota na descrição em vermelho.

vi /etc/hosts
127.0.0.1       localhost
192.168.0.105   server1.example.tld
192.168.0.106   server2.example.tld

# As seguintes linhas são desejáveis para hosts compatíveis com 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

Defina o nome do host do servidor:

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

Use server1.example.tld no primeiro servidor e server2.example.tld no segundo servidor.

Edite o arquivo sources.list…

vi /etc/apt/sources.list 

… e certifique-se de que seu /etc/apt/sources.list contém o repositório squeeze-updates (isso garante que você sempre receba as atualizações mais recentes para o scanner de vírus ClamAV - este projeto publica lançamentos com muita frequência, e às vezes versões antigas param de funcionar).

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

Execute

apt-get update
apt-get upgrade

para instalar as atualizações mais recentes (se houver).

É uma boa ideia sincronizar o relógio do sistema com um servidor NTP ( n etwork t ime p rotocol) pela Internet. Basta executar

apt-get -y install ntp ntpdate

e seu horário do sistema estará sempre sincronizado.

No servidor 1:

Agora criamos um par de chaves privada/pública em server1.example.tld:

ssh-keygen -t dsa

root@server1:~# ssh-keygen -t dsa
Gerando par de chaves dsa pública/privada.
Digite o arquivo no qual salvar a chave (/root/.ssh/id_dsa): <– ENTER
Diretório criado ‘/root/.ssh’.
Digite a frase secreta (vazia para nenhuma frase secreta): <– ENTER
Digite a mesma frase secreta novamente: <– ENTER
Sua identificação foi salva em /root/.ssh/id_dsa.
Sua chave pública foi salva em /root/.ssh/id_dsa.pub.
A impressão digital da chave é:
1b:95:bc:4a:f4:9f:d8:ea:24:31:0f:c9:72:d5:a7:80 [email protected]
A imagem aleatória da chave é:
+–[ DSA 1024]—-+
| |
| o o |
| E * . . |
| o = o o |
| . S o . |
| + O + . |
| + + + |
| o . |
| .o |
+—————–+
root@server1:~#

É importante que você não insira uma frase secreta, caso contrário, a replicação não funcionará sem interação humana, então simplesmente pressione ENTER!

Em seguida, copiamos nossa chave pública para 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]
A autenticidade do host ‘192.168.0.101 (192.168.0.101)’ não pode ser estabelecida.
A impressão digital da chave RSA é 25:d8:7a:ee:c2:4b:1d:92:a7:3d:16:26:95:56:62:4e.
Você tem certeza de que deseja continuar conectando (sim/não)? <– sim (você verá isso apenas se esta for a primeira vez que se conectar ao server2)
Aviso: Adicionado permanentemente ‘192.168.0.101’ (RSA) à lista de hosts conhecidos.
[email protected] ‘s password: <– senha root do server2
Agora tente fazer login na máquina, com “ssh ‘ [email protected] ‘“, e verifique em:

 .ssh/authorized_keys
para ter certeza de que não adicionamos chaves extras que você não esperava.

Agora verifique no server2 se a chave pública do server1 foi transferida corretamente:

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]

Instale postfix, dovecot e mysql com um único comando:

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

Digite a nova senha para o usuário root do MySQL quando solicitado pelo instalador. Você deve escolher a mesma senha para ambos os servidores. Em seguida, responda às próximas perguntas conforme descrito abaixo:

Tipo geral de configuração? <– Site da Internet
Nome do email? <– server1.mydomain.tld
Certificado SSL necessário <– Ok

Use server1.example.tld no primeiro servidor e server2.example.tld no segundo servidor.

Queremos que o MySQL escute em todas as interfaces, não apenas no localhost, portanto editamos /etc/mysql/my.cnf e comentamos a linha bind-address = 127.0.0.1:

vi /etc/mysql/my.cnf
[...]  
# Em vez de skip-networking, o padrão agora é escutar apenas em  
# localhost, que é mais compatível e não é menos seguro.  
#bind-address           = 127.0.0.1  
[...]  

Em seguida, reinicie o MySQL:

/etc/init.d/mysql restart

Agora preparamos os servidores MySQL para replicação master/master do MySQL.

No servidor 1:

Faça login no MySQL no shell com…

 mysql -u root -p

… e digite a senha root do MySQL que você escolheu durante a instalação do MySQL. Em seguida, execute este comando no shell do MySQL:

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

Substitua ‘slave_user_password’ por uma senha segura que você deseja usar para o escravo se conectar ao servidor mestre. Substitua este espaço reservado nos próximos passos pela senha que você escolheu sempre que o espaço reservado ocorrer.

Agora vamos configurar nossos 2 nós MySQL:

No servidor 1:

vi /etc/mysql/my.cnf

Procure a seção que começa com [mysqld], e coloque as seguintes opções nela (comentando todas as opções conflitantes 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  
[...]  

Em seguida, pare o MySQL:

/etc/init.d/mysql stop

Agora faça quase o mesmo no servidor2…

No servidor 2:

vi /etc/mysql/my.cnf

Procure a seção que começa com [mysqld], e coloque as seguintes opções nela (comentando todas as opções conflitantes 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  
[...]  

Em seguida, pare o MySQL:

/etc/init.d/mysql stop

Agora precisamos sincronizar os dois servidores mysql. Fazemos isso copiando o diretório de dados mysql do mestre para o escravo e também o arquivo de configuração debian que contém o usuário debian-sys-maint. Isso pode ser feito já que paramos o mysql antes em ambos os servidores.

No servidor 1:

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

Agora iniciamos o MySQL no servidor mestre novamente:

/etc/init.d/mysql start

Faça login no shell do MySQL como usuário root…

mysql -u root -p

… e execute este comando no shell do MySQL…

 SHOW MASTER STATUS; 

… para obter o status do mestre do MySQL:

mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| Arquivo | Posição | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 | 106 | | |
+——————+———-+————–+——————+
1 linha no conjunto (0.00 seg)

As informações que precisamos para o próximo passo são o arquivo binlog mysql-bin.000002 e a posição do binlog 106. Precisamos dos mesmos detalhes para o server2 mais abaixo.

Agora execute este comando no shell do MySQL no mestre para conectá-lo ao escravo:

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;

Em seguida, verifique o status do escravo:

SHOW SLAVE STATUS \G

É importante que tanto Slave_IO_Running quanto Slave_SQL_Running tenham o valor Sim na saída.

No servidor 2:

Faça login no shell do MySQL como usuário root…

mysql -u root -p

… e execute este comando no shell do 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;

Em seguida, verifique o status do escravo:

SHOW SLAVE STATUS \G

É importante que tanto Slave_IO_Running quanto Slave_SQL_Running tenham o valor Sim na saída

A configuração da replicação master/master do mysql está finalizada agora e prosseguimos para instalar os outros pacotes de software.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.