Servidor Web · 10 min read · Sep 26, 2025

Instalando Um Cluster Web, Email E Banco De Dados MySQL (Espelho) No Debian 5.0 Com ISPConfig 3

Instalando Um Cluster Web, Email E Banco De Dados MySQL (Espelho) No Debian 5.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 usado para redundância, alta disponibilidade e balanceamento de carga no Debian 5 com o painel de controle ISPConfig 3. O GlusterFS será usado para espelhar os dados entre os servidores e o ISPConfig para espelhar os arquivos de configuração. Usarei uma configuração de dois servidores aqui para fins de demonstração, mas a configuração pode escalar para um número maior de servidores com apenas pequenas modificações nos arquivos de configuração do GlusterFS.

Atualmente, há uma limitação na configuração do cluster MySQL. O daemon MySQL tem problemas de bloqueio durante a verificação inicial do innodb quando o segundo servidor é iniciado. A solução atual que uso aqui é iniciar o MySQL apenas com myisam. Encontrei vários relatos de servidores MySQL em execução com innodb no GlusterFS, então deve ser possível com algum ajuste fino do GlusterFS e/ou do arquivo de configuração do MySQL usar innodb também. Tentarei encontrar uma solução para os problemas de bloqueio e atualizar este tutorial. Se alguém souber uma solução para innodb no GlusterFS, entre em contato comigo. Se você quiser usar o segundo servidor apenas como sistema de espera quente, então você deve ser capaz de usar innodb, desde que inicie o MySQL no segundo servidor apenas quando o primeiro servidor estiver desconectado.

Atualmente, esta é uma configuração de prova de conceito, então não há experiência sobre como essa configuração escala em sistemas de produção ainda. A única parte que pode causar problemas é o diretório de dados MySQL compartilhado. Outra solução para acessar bancos de dados MySQL de vários servidores simultaneamente é usar uma configuração de cluster MySQL ( http://www.mysql.com/products/database/cluster/) ou replicação MySQL master/master ( https://www.howtoforge.com/mysql_master_master_replication).

Para aprender como usar o ISPConfig 3, recomendo fortemente baixar o Manual do ISPConfig 3.

Em quase 300 páginas, ele cobre o conceito por trás do ISPConfig (administradores, revendedores, clientes), explica como instalar e atualizar o ISPConfig 3, inclui uma referência para todos os formulários e campos de formulário no ISPConfig juntamente com exemplos de entradas válidas, e fornece tutoriais para as tarefas mais comuns no ISPConfig 3. Ele também descreve como tornar seu servidor mais seguro e vem com uma seção de solução de problemas no final.

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 5.0. A configuração base é descrita no seguinte tutorial nos passos 1 - 6:

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

Instale apenas os passos 1 - 6 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

Nome do host: server1.example.tld
Endereço IP: 192.168.0.105

Servidor Escravo

Nome do host: server2.example.tld
Endereço IP: 192.168.0.106

Onde quer que esses nomes de host ou endereços IP apareçam nos próximos passos de instalação, você terá que alterá-los para corresponder aos IPs e nomes de host de 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 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 ele contém as seguintes duas linhas. A primeira é para o repositório volátil do debian para obter pacotes atualizados para o software antivírus ClamAV e SpamAssassin e a segunda é para o repositório de backports que contém pacotes GlusterFS atuais.

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

Execute…

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

… para instalar a chave do repositório de backports e atualizar o banco de dados de pacotes apt; em seguida, execute …

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.

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 mysql quando solicitado pelo instalador e responda às próximas perguntas conforme descrito abaixo:

Criar diretórios para administração baseada na web? <– Não
Tipo geral de configuração? <– Site da Internet
Nome do email? <– server1.mydomain.tld
Certificado SSL necessário <– Ok

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

Para instalar amavisd-new, SpamAssassin e ClamAV, executamos:

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 

Em seguida, instale Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear e mcrypt da seguinte forma:

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 

Você verá a seguinte pergunta:

Servidor web para reconfigurar automaticamente: <– apache2

Em seguida, execute o seguinte comando para habilitar os módulos do Apache suexec, rewrite, ssl, actions e include:

a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digest

PureFTPd e quota podem ser instalados com o seguinte comando:

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

Edite /etc/fstab. O meu se parece com isso (adicionei,usrquota,grpquota à partição com o ponto de montagem /):

vi /etc/fstab
# /etc/fstab: informações estáticas do sistema de arquivos.  
#  
#                  
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, execute estes comandos:

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

quotacheck -avugm
quotaon -avug

Instale o Servidor DNS BIND:

apt-get -y install bind9 dnsutils

Instale vlogger e webalizer e awstats:

apt-get -y install vlogger webalizer awstats 

Instale Jailkit: Jailkit é necessário apenas se você quiser chroot usuários SSH. Ele pode ser instalado da seguinte forma (importante: Jailkit deve ser instalado antes do ISPConfig - não pode ser instalado depois!):

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: Isso é opcional, mas recomendado, porque o monitor do ISPConfig tenta mostrar o log:

apt-get install fail2ban

Instale GlusterFS e Fuse:

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

Remova os arquivos de configuração de exemplo do GlusterFS:

rm -f /etc/glusterfs/*.vol 

Crie os diretórios de dados para os volumes do 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

Crie o arquivo de configuração do servidor GlusterFS:

vi /etc/glusterfs/glusterfsd.vol
# Configuração para o volume do 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
# Configuração para o volume do 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
# Configuração para o volume do 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 os volumes
volume server
  type protocol/server
  option transport-type tcp
  subvolumes brick-mysql brick-vmail brick-www
  
  # opções de autenticação para o 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
  
  # Opções de autenticação para o 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
  
  # opções de autenticação 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

Substitua os endereços IP pelos IPs de seus servidores e substitua a senha 7wQav7ExkFg6eW por uma senha de sua escolha.

Inicie o servidor GlusterFS:

/etc/init.d/glusterfs-server start 

Agora criamos os três arquivos de volume do cliente que precisamos para montar os sistemas de arquivos 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 montarmos nossos volumes nos diretórios, teremos que parar alguns serviços e fazer backup dos dados atuais:

/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

Adicione as linhas:

/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

Agora monte as unidades executando:

mount -a

Chown o diretório mysql para o usuário e grupo mysql:

chown mysql:mysql /var/lib/mysql

Copie os dados mysql e www de volta.

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

Copie os dados de volta (apenas no servidor mestre! Pule esta etapa no escravo!).

Desative o innodb, pois causa problemas de bloqueio quando o MySQL é iniciado.

vi /etc/mysql/my.cnf

Altere a linha:

#skip-innodb

para:

skip-innodb   

e adicione a linha

innodb_file_per_table  

na seção [mysqld] do arquivo my.cnf.

Quando você configurar o servidor escravo, copie o arquivo /etc/mysql/debian.cnf do servidor mestre para o servidor escravo antes de iniciar o MySQL novamente!

Agora inicie os serviços novamente:

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

Altere a ordem de inicialização do GlusterFS para garantir que o servidor GlusterFS seja sempre iniciado antes do 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

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.