Pound einrichten….

Wollen wir uns nun langsam mal der Pound Konfiguration widmen.

Hier ist ein sehr einfaches Beispiel. Die lokalen Webserver hören auf dem Port 81 und Pound darf auf Port 80 hören, wobei 192.168.1.3 die HA-IP Adresse wieder spiegelt.

## Minimal sample pound.cfg
##
## see pound(8) for details

######################################################################
## global options:

User    "www-data"
Group   "www-data"
#RootJail "/chroot/pound"

## Logging: (goes to syslog by default)
##  0 no logging
##  1 normal
##  2 extended
##  3 Apache-style (common log format)
LogLevel  1

## check backend every X secs:
Alive   5

## use hardware-accelleration card supported by openssl(1):
#SSLEngine  ""

######################################################################
## listen, redirect and ... to:

## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
  Address 192.168.1.3
  Port  80

  ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
  xHTTP   0

  Service
    BackEnd
      Address 192.168.1.1
      Port  81
    End
    BackEnd
      Address 192.168.1.2
      Port  81
    End
  End
End

Installiert wird Pound einfach via aptitude pound und wieder dran denken das die pound.cfg auf beiden Servern gleich sein muss.

Bei unterschiedlich dimensionierten Servern können wir mir Priority im BackEnd, die Last unterschiedlich auf der Server verteilen.

Weitere gute Beispiel-Konfigurationen findet man in der Manpage von Pound (man pound) !

In der /etc/default/pound müssen wir noch den Wert für startup gleich 1 setzen, damit Pound überhaupt startet.

Hier mal meine Konfiguration

## Minimal sample pound.cfg
##
## see pound(8) for details

######################################################################
## global options:

User    "www-data"
Group   "www-data"
RootJail "/var/pound/chroot"

## Logging: (goes to syslog by default)
##  0 no logging
##  1 normal
##  2 extended
##  3 Apache-style (common log format)
LogLevel  1

## check backend every X secs:
Alive   5

## use hardware-accelleration card supported by openssl(1):
#SSLEngine  ""

######################################################################
## listen, redirect and ... to:

## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
  Address 192.168.1.1
  Port  80

  ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
  xHTTP   0

  Service
    BackEnd
      Address 192.168.1.2
      Port  81
      Priority 6
    End
    BackEnd
      Address 192.168.1.3
      Port  81
      Priority 3
    End
    BackEnd
      Address 192.168.1.4
      Port  81
      Priority 3
    End
  End

  Service
    URL ".*.(jpg|gif|png)"
    BackEnd
      Address 192.168.1.5
      Port  81
    End
  End
End

Homepage von pound

HA mit Debian Lenny & drbd8, ocfs2, heartbeat, pound (http) und mysql

Vorrausetzung

  • 2 Server mit einer Lenny Grundinstallation ( Hier als Servernamen cnode1 und cnode2 )
  • Optional: 2 Netzwerkkarten je Server (für drbd)
  • eine leere Partion je Server
  • Vorausgesetzt es ist nicht anderst angegeben, alles auf beiden Nodes ausführen !

Konfiguration von drbd

Auf beiden Servern als root anmelden

aptitude install drbd8-utils drbd8-modules-2.6.24-1-686
echo "drbd" >> /etc/modules

Nun sichern wir die alte drbd-Konfigurationsdatei

mv /etc/drbd.conf /etc/drbd.conf.old

Jetzt erstellen wir eine neue Datei mit vim /etc/drbd.conf

global { usage-count yes; }
common { syncer { rate 10M; } }
resource ha {
protocol C;
startup { wfc-timeout 0; degr-wfc-timeout 120; }
disk { on-io-error detach; }
net {
cram-hmac-alg sha1;
allow-two-primaries; # Wichtig für Primary/Primary Setup
}
on cnode1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.1:7788;
meta-disk internal;
}
on cnode2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.2:7788;
meta-disk internal;
}
}

Speichern mit :wq

Wenn 2 Netzwerkkarten vorhanden sind, drbd lieber auf eine eigene Karte konfigurieren. Damit drbd mit der Partion etwas anfangen kann, müssen wir diese initialisieren.

drbdadm create-md ha

Nun können wir die beiden Partionen synchronisieren. (Den folgenden Befehl nur auf einer Node starten !)

drbdsetup /edv/drbd0 primary --overwrite-data-of-peer

Je nach dem wie groß die Partionen sind kann es nun etwas Zeit vergehen. Der Fortschritt kann überprüft werden mit

/etc/init.d/drbd status

In der Ausgabe sollte sich die unten stehende Zeile finden lassen, wenn beide drbd-Devices synchron sind.

0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---

Nun können wir die zweite Node auch zum ”Primary” machen

drbdsetup primary r0

Update (Danke keks)

Da es sehr störend ist, wenn wir die Server neustarten, immer per Hand die 2 Nodes als Primary zu definieren, fügen wir noch zusätzlich in den startup-Block

become-primary-on both;

ein. Die Zeile sollte dann wie folgt aussehen:

startup { wfc-timeout 0; degr-wfc-timeout: 120; become-primary-on both; }

Das bewirkt, dass beide während des Bootvorgangs als Master definiert werden. Nun die Konfiguration auf beiden Nodes aktualisieren, dann

drbdadm adjust ha

und

drbdadm primary ha

(Befehle auf beiden Nodes ausführen!)

Wichtig: Um diese Funktion zunutzen, müsst ihr DRBD aus den Quellen bauen, da die Funktion (laut drbd-Homepage) erst ab 8.2.0 implementiert ist.

Konfiguration von ocfs2

Jetzt installieren das ocfs2 Filesystem

aptitude install ocfs2-tools ocfs2console

Noch die Konfigurationsdatei erstellen

#/etc/ocfs2/cluster.conf

node:
ip_port = 7777
ip_address = 192.168.1.1
number = 0
name = cnode1
cluster = ocfs2

node:
ip_port = 7777
ip_address = 192.168.1.2
number = 1
name = cnode2
cluster = ocfs2

cluster:
node_count = 2
name = ocfs2

Nun sind wir fast fertig. Jetzt einmal

/etc/init.d/ocfs2 restart

und dann können wir das Filesystem erstellen mit

mkfs.ocfs2 /dev/drbd0

Damit wir mit dem Filesystem arbeiten können, müssen wir es initialisieren.

/etc/init.d/o2cb online ocfs2

bewirkt das der Cluster mit dem Namen ocfs2 geladen wird.

/etc/init.d/o2cd load
/etc/init.d/o2cd online ocfs2

Jetzt können wir es mit

mount /dev/drbd0 /srv

nutzen

Konfiguration vom HTTP Loadbalancer – pound

Hier 🙂

Konfiguration von heartbeat

Folgt !