Server Cluster · 9 min read · Sep 10, 2025

Der perfekte Lastenausgeglichene & Hochverfügbarkeits-Webcluster mit 2 Servern, die Xen auf Ubuntu 8.04 Hardy Heron ausführen

Der perfekte Lastenausgeglichene & Hochverfügbarkeits-Webcluster mit 2 Servern, die Xen auf Ubuntu 8.04 Hardy Heron ausführen

Einführung

Dies ist ein Copy-Paste von meiner Seite: blogama.org

In diesem Howto werden wir einen lastenausgeglichenen und hochverfügbaren Webcluster auf 2 realen Servern mit Xen, Heartbeat und Ldirectord aufbauen. Der Cluster wird HTTP, Mail, DNS, MySQL-Datenbank bereitstellen und wird vollständig überwacht. Dies wird derzeit auf einem Produktionsserver mit ein paar Websites verwendet.

Das Ziel dieses Tutorials ist es, Lastenausgleich und Hochverfügbarkeit mit so wenigen realen Servern wie möglich zu erreichen und natürlich mit Open-Source-Software. Mehr Server bedeuten mehr Hardware- und Hostingkosten.

Die meisten Informationen, die Sie hier finden, wurden aus einem Dutzend Howtos kopiert/eingefügt, viele davon von howtoforge.com, aber einige wichtige Details wurden geändert, um dies möglich zu machen und alles zusammenzuführen.

Hier ist eine schnelle Liste von Diensten und Anwendungen, die installiert werden:

  • Apache
  • MySQL + phpmyadmin
  • Postfix (SMTP) mit webbasierter Benutzerkonfiguration und Spamassassin
  • Courier (IMAP & POP) und squirrelmail
  • Bind (DNS-Server)
  • Munin und monit für webbasierte Überwachung
  • Selbstgemachte Skripte zur Überwachung

Was Sie benötigen

2 Server mit Dual-LAN, mindestens 7 IPs. IPs werden wie folgt verwendet:

  • dom01.example.com : 192.168.1.100
  • dom02.example.com : 192.168.1.101
  • lb1.example.com : 192.168.1.102
  • lb2.example.com : 192.168.1.103
  • web1.example.com : 192.168.1.104
  • web2.example.com : 192.168.1.105
  • example.com : 192.168.1.106
  • yousite.com (optional) : 192.168.1.107

Dom0 wird von den Lastenausgleichern und Webservern getrennt. Ich habe es nicht ausprobiert, aber ich glaube, es wäre möglich, Lastenausgleicher auf Dom0 zu setzen.

Ich empfehle mindestens 2 GB RAM und RAID 1 oder 10 Festplatten für einen Produktionsserver.

Einschränkungen

  1. Dies hat für mich funktioniert. Das bedeutet nicht, dass es für Sie funktionieren wird, aber seien Sie versichert, dass das Howto zu 100 % getestet wurde, um auf einem Produktions- und Testserver zu funktionieren!

  2. Dieses Setup ist über 2 Server skalierbar, aber Sie müssen einen anderen Weg für die MySQL-Replikation finden, wenn Sie dies tun.

  3. Kein Steuerpanel wie ISPConfig, CPanel usw…

  4. Einige Websites können die MySQL Master-to-Master-Replikation brechen. Mir ist das mit Drupal passiert, aber ich habe es entweder behoben, indem ich den Cache deaktiviert oder eine minimale Cache-Lebensdauer festgelegt habe. Bitte lesen Sie dies, bevor Sie fortfahren:

A: Die MySQL-Replikation unterstützt derzeit kein Sperrprotokoll zwischen Master und Slave, um die Atomarität eines verteilten (serverübergreifenden) Updates zu gewährleisten. Mit anderen Worten, es ist möglich, dass Client A ein Update an Co-Master 1 vornimmt, und in der Zwischenzeit, bevor es an Co-Master 2 propagiert, könnte Client B ein Update an Co-Master 2 vornehmen, das das Update von Client A anders funktionieren lässt als es auf Co-Master 1 war. Wenn das Update von Client A also zu Co-Master 2 gelangt, erzeugt es Tabellen, die sich von dem unterscheiden, was Sie auf Co-Master 1 haben, selbst nachdem alle Updates von Co-Master 2 ebenfalls propagiert wurden. Das bedeutet, dass Sie zwei Server nicht in einer bidirektionalen Replikationsbeziehung verketten sollten, es sei denn, Sie sind sich sicher, dass Ihre Updates sicher in beliebiger Reihenfolge erfolgen können, oder es sei denn, Sie kümmern sich irgendwie um falsch geordnete Updates im Client-Code.

1. Ubuntu installieren

Führen Sie eine Grundinstallation von Ubuntu 8.04 LTS Server-Edition durch.

Wenn Sie mit Software-RAID 1 installieren möchten, lesen Sie bitte dieses Howto, das ich geschrieben habe:

Installieren Sie Ubuntu 8.04 mit Software-RAID 1

2. Xen installieren

Sie können Xen von Image-Dateien oder von einer dedizierten Partition ausführen. Beides hat Vor- und Nachteile.

Von Image-Dateien ist die Festplatten-I/O langsamer, aber es ist einfacher, Backups zu erstellen und zu verwalten. Es ist umgekehrt, wenn Sie auf einer Partition arbeiten.

Was ich vorschlage, ist, mit einer Image-Datei zu beginnen und mit einer Partition zu enden, wenn Ihr Setup abgeschlossen ist. Auf diese Weise können Sie Backups Ihrer Image-Dateien erstellen und bei Bedarf zurückrollen, wenn Sie testen.

Um auf Image-Dateien zu installieren, beziehen Sie sich bitte auf dieses großartige Tutorial vom Howto-Meister Falko:

Xen auf einem Ubuntu 8.04 (Hardy Heron) Server aus den Ubuntu-Repositories installieren

Um direkt auf einer Partition zu installieren (meine modifizierte Version von Falkos Howto):

Hochleistungs-XEN auf einem Ubuntu Hardy Heron (8.04) Server-System AMD64 oder i386

Sie müssen 2 Xen-Domänen auf jedem Server erstellen (dom01 und dom02 sind Dom0 oder VM-Controller):

Server #1 - dom01.example.com

lb1.example.com (256 MB RAM - 5 GB HD sind ausreichend)
ip : 192.168.1.102

web1.example.com

(je mehr RAM, desto besser, halten Sie 512 MB für Dom0)

ip : 192.168.1.104

Server #2 - dom02.example.com

lb2.example.com (256 MB RAM - 5 GB HD sind ausreichend)
ip : 192.168.1.103

web2.example.com (je mehr RAM, desto besser, halten Sie 512 MB für Dom0)
ip : 192.168.1.105

3. Erstellen von Xen-Brücken für lokale Datenübertragungen (optional)

Standardmäßig ist nur eine Netzwerkkarte auf der virtuellen Maschine mit Xen aktiviert. Für lokale Übertragungen wie rsync, MySQL-Replikation und Backups verwende ich ein Gigabit-Crossover-Kabel zwischen den 2 Servern. Es ist nicht notwendig, aber es spart Bandbreitenkosten und die Replikation wird schneller.

Bitte beziehen Sie sich auf dieses Howto, um eine Xen-Brücke zu erstellen:

Neue Xen-Brücken unter Ubuntu 8.04 erstellen

In diesem Howto wird die IP, die auf der zweiten Netzwerkkarte (Crossover) verwendet wird, wie folgt sein:

  • dom01.example.com : 192.168.0.100
  • dom02.example.com : 192.168.0.101
  • lb1.example.com : 192.168.0.102
  • lb2.example.com : 192.168.0.103
  • web1.example.com : 192.168.0.104
  • web2.example.com : 192.168.0.105

4. Knoten vorbereiten (dom01, dom02, lb1, lb2, web1, web2)

4.1 OpenSSH-Server und VIM installieren

Führen Sie aus:

sudo su apt-get install vim ssh openssh-server

4.2 Die Repositories aktualisieren

mv /etc/apt/sources.list /etc/apt/sources.list.bak
vi /etc/apt/sources.list

Lassen Sie die sources.list so aussehen:

#
# deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted
#deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted
# Siehe http://help.ubuntu.com/community/UpgradeNotes für Informationen zur Aktualisierung auf
# neuere Versionen der Distribution.
deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy main restricted
## Wichtige Fehlerbehebungsupdates, die nach der endgültigen Veröffentlichung der
## Distribution erstellt wurden.
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
## N.B. Software aus diesem Repository wird VOLLSTÄNDIG UNTERSTÜTZT von der Ubuntu
## Team, und ist möglicherweise nicht unter einer freien Lizenz. Bitte überzeugen Sie sich selbst von
## Ihren Rechten zur Nutzung der Software. Bitte beachten Sie auch, dass Software im
## Universum KEINE Überprüfung oder Updates vom Ubuntu-Sicherheitsteam erhält.
deb http://de.archive.ubuntu.com/ubuntu/ hardy universe
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy universe
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe
## N.B. Software aus diesem Repository wird VOLLSTÄNDIG UNTERSTÜTZT von der Ubuntu
## Team, und ist möglicherweise nicht unter einer freien Lizenz. Bitte überzeugen Sie sich selbst von
## Ihren Rechten zur Nutzung der Software. Bitte beachten Sie auch, dass Software im
## Multiverse KEINE Überprüfung oder Updates vom Ubuntu-Sicherheitsteam erhält.
deb http://de.archive.ubuntu.com/ubuntu/ hardy multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy multiverse
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
## Kommentieren Sie die folgenden beiden Zeilen aus, um Software aus dem 'Backports'
## Repository hinzuzufügen.
## N.B. Software aus diesem Repository wurde möglicherweise nicht so
## umfassend getestet wie die in der Hauptversion enthaltene, obwohl sie neuere Versionen von einigen Anwendungen enthält, die nützliche Funktionen bieten können.
## Bitte beachten Sie auch, dass Software in Backports KEINE Überprüfung
## oder Updates vom Ubuntu-Sicherheitsteam erhält.
# deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
## Kommentieren Sie die folgenden beiden Zeilen aus, um Software aus Canonicals
## 'Partner'-Repository hinzuzufügen. Diese Software ist kein Teil von Ubuntu, sondern wird
## von Canonical und den jeweiligen Anbietern als Dienst für Ubuntu
## Benutzer angeboten.
# deb http://archive.canonical.com/ubuntu hardy partner
# deb-src http://archive.canonical.com/ubuntu hardy partner
deb http://security.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted
deb http://security.ubuntu.com/ubuntu hardy-security universe
deb-src http://security.ubuntu.com/ubuntu hardy-security universe
deb http://security.ubuntu.com/ubuntu hardy-security multiverse
deb-src http://security.ubuntu.com/ubuntu hardy-security multiverse

Jetzt führen Sie aus:

apt-get update
apt-get upgrade

4.3 Änderungen

/bin/sh ist ein Symlink zu /bin/dash, jedoch benötigen wir /bin/bash, nicht /bin/dash. Daher machen wir Folgendes:

ln -sf /bin/bash /bin/sh

Wir werden AppArmor (auf dom01 und dom02) deaktivieren, indem wir Folgendes tun:

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove

5. Netzwerkkonfiguration (dom01, dom02, lb1, lb2, web1, web2)

5.1 IPs einrichten

Um die Netzwerkkonfiguration unter Ubuntu zu bearbeiten, führen Sie aus:

vi /etc/network/interfaces

Wir werden nun jede Netzwerkkonfiguration nacheinander durchführen. Ich gehe davon aus, dass Sie 2 Netzwerkkarten verwenden, eth0 ist die, die mit dem Internet verbunden ist, und eth1 die mit dem Crossover-Kabel. Ich werde die Konfigurationsdatei nicht einzeln schreiben, nur für dom01.example.com, bitte entsprechend dieser Liste anpassen:

dom01.example.com

eth0 : 192.168.1.100
eth1 : 192.168.0.100

dom02.example.com

eth0 : 192.168.1.101
eth1 : 192.168.0.101

lb1.example.com

eth0 : 192.168.1.102
eth1 : 192.168.0.102

lb2.example.com

eth0 : 192.168.1.103
eth1 : 192.168.0.103

web1.example.com

eth0 : 192.168.1.104
eth1 : 192.168.0.104

web2.example.com

eth0 : 192.168.1.105
eth1 : 192.168.0.105

Beispielnetzwerkkonfiguration von dom01.example.com:

Lassen Sie die Datei /etc/network/interfaces so aussehen:

# Diese Datei beschreibt die verfügbaren Netzwerkinterfaces auf Ihrem System
# und wie sie aktiviert werden. Für weitere Informationen siehe interfaces(5).
# Das Loopback-Netzwerkinterface
auto lo
iface lo inet loopback
# Das primäre Netzwerkinterface, das mit dem Internet verbunden ist
auto eth0
iface eth0 inet static
        address 192.168.1.100
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
gateway 192.168.1.1
# Das sekundäre Netzwerkinterface, das über ein Crossover-Kabel mit dem anderen Server verbunden ist
auto eth1
iface eth1 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255

Jetzt speichern Sie die Datei und führen Sie aus:

/etc/init.d/networking restart

5.2 Hostname

vi /etc/hosts

und lassen Sie es so aussehen, andernfalls haben Sie später Probleme mit ldirectord:

dom01.example.com

127.0.0.1       localhost.localdomain   localhost
127.0.1.1       dom01.example.com dom01
192.168.1.101   dom02.example.com     dom02
192.168.1.102   lb1.example.com     lb1
192.168.1.103   lb2.example.com     lb2
192.168.1.104   web1.example.com     web1
192.168.1.105   web2.example.com     web2
# Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

echo dom01.example.com > /etc/hostname
/etc/init.d/hostname.sh start

dom02.example.com

127.0.0.1       localhost.localdomain   localhost
127.0.1.1       dom02.example.com dom02
192.168.1.100   dom01.example.com     dom01
192.168.1.102   lb1.example.com     lb1
192.168.1.103   lb2.example.com     lb2
192.168.1.104   web1.example.com     web1
192.168.1.105   web2.example.com     web2
# Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

echo dom02.example.com > /etc/hostname
/etc/init.d/hostname.sh start

lb1.example.com

127.0.0.1       localhost.localdomain   localhost
127.0.1.1       lb1.example.com lb1
192.168.1.100   dom01.example.com     dom01
192.168.1.101   dom02.example.com     dom02
192.168.1.103   lb2.example.com     lb2
192.168.1.104   web1.example.com     web1
192.168.1.105   web2.example.com     web2
# Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

echo lb1.example.com > /etc/hostname
/etc/init.d/hostname.sh start

lb2.example.com

127.0.0.1       localhost.localdomain   localhost
127.0.1.1       lb2.example.com lb2
192.168.1.100   dom01.example.com     dom01
192.168.1.101   dom02.example.com     dom02
192.168.1.102   lb1.example.com     lb1
192.168.1.104   web1.example.com     web1
192.168.1.105   web2.example.com     web2
# Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

echo lb2.example.com > /etc/hostname
/etc/init.d/hostname.sh start

web1.example.com

127.0.0.1       localhost.localdomain   localhost
127.0.1.1       web1.example.com web1
192.168.1.100   dom01.example.com     dom01
192.168.1.101   dom02.example.com     dom02
192.168.1.102   lb1.example.com     lb1
192.168.1.103   lb2.example.com     lb2
192.168.1.105   web2.example.com     web2
# Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

echo web1.example.com > /etc/hostname
/etc/init.d/hostname.sh start

web2.example.com

127.0.0.1       localhost.localdomain   localhost
127.0.1.1       web2.example.com web2
192.168.1.100   dom01.example.com     dom01
192.168.1.101   dom02.example.com     dom02
192.168.1.102   lb1.example.com     lb1
192.168.1.103   lb2.example.com     lb2
192.168.1.104   web1.example.com     web1
# Die folgenden Zeilen sind wünschenswert für IPv6-fähige Hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

echo web2.example.com > /etc/hostname
/etc/init.d/hostname.sh start

6. Softwareinstallation (dom01, dom02, lb1, lb2, web1, web2)

Führen Sie aus:

apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.