Server Setup · 9 min read · Sep 26, 2025

Installation eines Web-, E-Mail- und MySQL-Datenbankclusters (Spiegel) auf Debian 5.0 mit ISPConfig 3

Installation eines Web-, E-Mail- und MySQL-Datenbankclusters (Spiegel) auf Debian 5.0 mit ISPConfig 3

Version 1.0
Autor: Till Brehm

Dieses Tutorial beschreibt die Installation eines clusterbasierten Web-, E-Mail-, Datenbank- und DNS-Servers, der für Redundanz, hohe Verfügbarkeit und Lastverteilung auf Debian 5 mit dem ISPConfig 3-Steuerfeld verwendet wird. GlusterFS wird verwendet, um die Daten zwischen den Servern zu spiegeln, und ISPConfig für das Spiegeln der Konfigurationsdateien. Ich werde hier ein Setup mit zwei Servern zu Demonstrationszwecken verwenden, aber das Setup kann auf eine höhere Anzahl von Servern mit nur geringfügigen Änderungen in den GlusterFS-Konfigurationsdateien skaliert werden.

Derzeit gibt es eine Einschränkung im MySQL-Cluster-Setup. Der MySQL-Daemon hat während der initialen Innodb-Prüfung beim Start des zweiten Servers Probleme mit der Sperrung. Die aktuelle Lösung, die ich hier verwende, besteht darin, MySQL nur mit MyISAM zu starten. Ich habe mehrere Berichte über erfolgreich laufende MySQL-Server mit Innodb auf GlusterFS gefunden, daher muss es mit etwas Feintuning der GlusterFS- und / oder MySQL-Konfigurationsdatei auch möglich sein, Innodb zu verwenden. Ich werde versuchen, eine Lösung für die Sperrprobleme zu finden und dieses Tutorial zu aktualisieren. Wenn jemand eine Lösung für Innodb auf GlusterFS kennt, bitte kontaktieren Sie mich. Wenn Sie den zweiten Server nur als Hot-Standby-System verwenden möchten, sollten Sie in der Lage sein, Innodb zu verwenden, solange Sie MySQL auf dem zweiten Server nur starten, wenn der erste Server getrennt ist.

Dies ist derzeit ein Proof-of-Concept-Setup, daher gibt es noch keine Erfahrung, wie sich dieses Setup in Produktionssystemen skalieren lässt. Der einzige Teil, der Probleme verursachen könnte, ist das gemeinsame MySQL-Datenverzeichnis. Eine weitere Lösung für den gleichzeitigen Zugriff auf MySQL-Datenbanken von mehreren Servern ist die Verwendung eines MySQL-Cluster-Setups (http://www.mysql.com/products/database/cluster/) oder MySQL-Master/Master-Replikation (https://www.howtoforge.com/mysql_master_master_replication).

Um zu lernen, wie man ISPConfig 3 verwendet, empfehle ich dringend, das ISPConfig 3-Handbuch herunterzuladen.

Auf fast 300 Seiten behandelt es das Konzept hinter ISPConfig (Admin, Reseller, Kunden), erklärt, wie man ISPConfig 3 installiert und aktualisiert, enthält ein Referenzhandbuch für alle Formulare und Formularfelder in ISPConfig zusammen mit Beispielen für gültige Eingaben und bietet Tutorials für die häufigsten Aufgaben in ISPConfig 3. Es beschreibt auch, wie man seinen Server sicherer macht, und enthält am Ende einen Abschnitt zur Fehlersuche.

1 Einrichtung der beiden Basissysteme

In diesem Setup wird es einen Master-Server (der die ISPConfig-Steuerfeldoberfläche ausführt) und einen Slave-Server geben, der die Web- (Apache), E-Mail- (Postfix und Dovecot) und Datenbank- (MySQL) Dienste des Master-Servers spiegelt.

Um das clusterbasierte Setup zu installieren, benötigen wir zwei Server mit einer minimalen Debian 5.0-Installation. Das Basissetup wird im folgenden Tutorial in den Schritten 1 - 6 beschrieben:

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

Installieren Sie nur die Schritte 1 - 6 des perfekten Server-Tutorials und nicht die anderen Schritte, da sie sich für ein clusterbasiertes Setup unterscheiden!

In meinem Beispiel verwende ich die folgenden Hostnamen und IP-Adressen für die beiden Server:

Master-Server

Hostname: server1.example.tld
IP-Adresse: 192.168.0.105

Slave-Server

Hostname: server2.example.tld
IP-Adresse: 192.168.0.106

Wo auch immer diese Hostnamen oder IP-Adressen in den nächsten Installationsschritten vorkommen, müssen Sie sie ändern, um mit den IPs und Hostnamen Ihrer Server übereinzustimmen.

2 Installation der beiden Server

Die folgenden Schritte müssen sowohl auf dem Master- als auch auf dem Slave-Server ausgeführt werden. Wenn ein bestimmter Schritt nur für den Master oder Slave ist, habe ich eine Anmerkung in der Beschreibung in Rot hinzugefügt.

vi /etc/hosts
127.0.0.1       localhost
192.168.0.105   server1.example.tld
192.168.0.106   server2.example.tld
# Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts
::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

Setzen Sie den Hostnamen des Servers:

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

Verwenden Sie server1.example.tld auf dem ersten Server und server2.example.tld auf dem zweiten Server.

Bearbeiten Sie die sources.list-Datei…

vi /etc/apt/sources.list 

… und stellen Sie sicher, dass sie die folgenden beiden Zeilen enthält. Die erste ist für das Debian-volatile-Repository, um aktualisierte Pakete für die ClamAV-Antivirus-Software und SpamAssassin zu erhalten, und die zweite ist für das Backports-Repository, das aktuelle GlusterFS-Pakete enthält.

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

Führen Sie…

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

… aus, um den Schlüssel des Backports-Repositorys zu installieren und die apt-Paketdatenbank zu aktualisieren; führen Sie dann aus…

apt-get upgrade

… um die neuesten Updates zu installieren (falls vorhanden).

Es ist eine gute Idee, die Systemuhr mit einem NTP ( n etwork t ime p rotocol) Server über das Internet zu synchronisieren. Führen Sie einfach aus…

apt-get -y install ntp ntpdate

… und Ihre Systemzeit wird immer synchronisiert sein.

Installieren Sie Postfix, Dovecot und MySQL mit einem einzigen Befehl:

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

Geben Sie das neue Passwort für MySQL ein, wenn Sie vom Installer dazu aufgefordert werden, und beantworten Sie die nächsten Fragen wie unten beschrieben:

Verzeichnisse für die webbasierte Verwaltung erstellen? <– Nein
Allgemeiner Konfigurationstyp? <– Internetseite
Mail-Name? <– server1.mydomain.tld
SSL-Zertifikat erforderlich <– Ok

Wir möchten, dass MySQL auf allen Schnittstellen hört, nicht nur auf localhost, daher bearbeiten wir /etc/mysql/my.cnf und kommentieren die Zeile bind-address = 127.0.0.1 aus:

vi /etc/mysql/my.cnf
[...]  
# Anstelle von skip-networking hört die Standardeinstellung jetzt nur auf  
# localhost, was kompatibler ist und nicht weniger sicher ist.  
#bind-address           = 127.0.0.1  
[...]  

Dann starten Sie MySQL neu:

/etc/init.d/mysql restart

Um amavisd-new, SpamAssassin und ClamAV zu installieren, führen wir aus:

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 

Dann installieren Sie Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear und mcrypt wie folgt:

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 

Sie werden die folgende Frage sehen:

Webserver automatisch neu konfigurieren: <– apache2

Führen Sie dann den folgenden Befehl aus, um die Apache-Module suexec, rewrite, ssl, actions und include zu aktivieren:

a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digest

PureFTPd und Quota können mit dem folgenden Befehl installiert werden:

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

Bearbeiten Sie /etc/fstab. Meins sieht so aus (ich habe ,usrquota,grpquota zu der Partition mit dem Einhängepunkt / hinzugefügt):

vi /etc/fstab
# /etc/fstab: statische Dateisysteminformationen.  
#  
#                  
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

Um Quota zu aktivieren, führen Sie diese Befehle aus:

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

Installieren Sie den BIND DNS-Server:

apt-get -y install bind9 dnsutils

Installieren Sie Vlogger und Webalizer und Awstats:

apt-get -y install vlogger webalizer awstats 

Installieren Sie Jailkit: Jailkit wird nur benötigt, wenn Sie SSH-Benutzer chrooten möchten. Es kann wie folgt installiert werden (wichtig: Jailkit muss vor ISPConfig installiert werden - es kann danach nicht installiert werden!):

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*

Installieren Sie fail2ban: Dies ist optional, aber empfohlen, da der ISPConfig-Monitor versucht, das Protokoll anzuzeigen:

apt-get install fail2ban

Installieren Sie GlusterFS und Fuse:

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

Entfernen Sie die Beispielkonfigurationsdateien von GlusterFS:

rm -f /etc/glusterfs/*.vol 

Erstellen Sie die Datenverzeichnisse für die GlusterFS-Volumes:

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

Erstellen Sie die GlusterFS-Serverkonfigurationsdatei:

vi /etc/glusterfs/glusterfsd.vol
# Konfiguration für das MySQL-Server-Volume
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
# Konfiguration für das VMail-Server-Volume
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
# Konfiguration für das WWW-Server-Volume
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
# exportiere alle Volumes
volume server
  type protocol/server
  option transport-type tcp
  subvolumes brick-mysql brick-vmail brick-www
  
  # Authentifizierungsoptionen für das MySQL-Volume
  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
  
  # Authentifizierungsoptionen für das VMail-Volume
  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
  
  # Authentifizierungsoptionen für 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

Ersetzen Sie die IP-Adressen durch die IPs Ihrer Server und ersetzen Sie das Passwort 7wQav7ExkFg6eW durch ein Passwort Ihrer Wahl.

Starten Sie den GlusterFS-Server:

/etc/init.d/glusterfs-server start 

Jetzt erstellen wir die drei Client-Volume-Dateien, die wir benötigen, um die GlusterFS-Dateisysteme zu mounten.

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

Bevor wir unsere Volumes in die Verzeichnisse einhängen, müssen wir einige Dienste stoppen und aktuelle Daten sichern:

/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

Fügen Sie die Zeilen hinzu:

/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

Jetzt mounten Sie die Laufwerke, indem Sie ausführen:

mount -a

Ändern Sie das Eigentum des MySQL-Verzeichnisses auf Benutzer und Gruppe mysql:

chown mysql:mysql /var/lib/mysql

Kopieren Sie die MySQL- und WWW-Daten zurück.

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

Kopieren Sie die Daten zurück (nur auf dem Master-Server! Überspringen Sie diesen Schritt auf dem Slave!).

Schalten Sie Innodb aus, da es beim Start von MySQL Sperrprobleme verursacht.

vi /etc/mysql/my.cnf

Ändern Sie die Zeile:

#skip-innodb

in:

skip-innodb   

und fügen Sie die Zeile

innodb_file_per_table  

im [mysqld]-Abschnitt der my.cnf-Datei hinzu.

Wenn Sie den Slave-Server einrichten, kopieren Sie die Datei /etc/mysql/debian.cnf vom Master-Server auf den Slave-Server, bevor Sie MySQL erneut starten!

Starten Sie jetzt die Dienste erneut:

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

Ändern Sie die Bootreihenfolge von GlusterFS, um sicherzustellen, dass der GlusterFS-Server immer vor MySQL gestartet wird.

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

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.