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/hosts127.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-allhostsDefina 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-freeExecute…
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 sudoDigite 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 restartPara 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_digestPureFTPd e quota podem ser instalados com o seguinte comando:
apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatoolEdite /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 dnsutilsInstale 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 bisoncd /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 fail2banInstale 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-volumeSubstitua 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.volvolume 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-volumevi /etc/glusterfs/glusterfs-vmail.volvolume 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-volumevi /etc/glusterfs/glusterfs-www.volvolume 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-volumeAntes 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/fstabAdicione 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 0Agora monte as unidades executando:
mount -aChown o diretório mysql para o usuário e grupo mysql:
chown mysql:mysql /var/lib/mysqlCopie 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.cnfAltere a linha:
#skip-innodbpara:
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
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.