27 mei 2009
Een high-availability cluster bestaat uit twee identieke machines die elkaars services min of meer naadloos kunnen overnemen. Onder normale omstandigheden draaien de server processen op een van de machines, terwijl de andere machine slechts standby is en geen aktieve processen uitvoert. Er kunnen minimale verschillen in de configuratie zijn, zoals een IP adres of de hostname. Ook de logging wordt op ieder systeem apart bewaard. Data die voor de services van belang is wordt door middel van replicatie op beide machines opgeslagen.
Voor de hardware worden gebruikelijke Intel of AMD systemen gebruikt. Aan CPU, geheugen of graphics worden geen speciale eisen gesteld. Wel is er speciale aandacht voor harddisks en netwerk interfaces (NICs).
In iedere machine worden 3 (SATA) harddisks geplaatst. Disk 0 en disk 1 vormen samen een mirror voor de swap en filesystems. De partities op deze mirror zijn:
Alleen het physical volume (derde partitie) wordt naar de andere machine gerepliceerd. De filesystems voor het OS kunnen verschillen wanneer bij voorbeeld op een systeem een upgrade wordt geinstalleerd of een configuratie wordt aangepast. Gedurende het uitvoeren en testen van de upgrade kan de service op de andere machine dan door blijven draaien.
Disk 2 is bedoeld voor de backups. Hierop wordt een physical volume gemaakt met een filesystem op LVM. Uitbreiding van de backup capaciteit is dan eenvoudig mogelijk door extra disks bij te plaatsen. Deze disk kan ook gerepliceerd worden naar de stand-by machine.
Iedere machine wordt uitgerust met 3 NICs. Een NIC wordt aangesloten op de switch/router/modem naar internet, een NIC wordt aangesloten op de switch van het interne LAN. De derde NIC op beide machines worden rechtstreeks met elkaar verbonden door middel van een cross-cable. Over deze verbinding loopt de communicatie voor het cluster en de replicatie van de disks.
De basis van de software is een Debian 5.0 distributie. Hier worden tenminste de volgende applicaties aan toegevoegd.
De clustering wordt gerealiseerd met heartbeat en DRBD.
De NICs op iedere machine in het cluster worden fysiek op een ander netwerk aangesloten en worden geconfigureerd met een IP adres in verschillende subnetten: Internet, Intern LAN en Cluster LAN. Voor het interne LAN kan een verdeling gemaakt worden in drie adres ranges:
De installatie gaat uit van Debian 5 (netinstall) op een systeem met twee harddisks. de disks worden als volgt geconfigureerd:
Installeer extra packages.
apt-get install heartbeat pacemaker ntp ethtool ocfs2-tools drbd8-utils
Definieer netwerk interfaces in /etc/network/interfaces:
auto eth0 iface eth0 inet static address 192.168.2.20 netmask 255.255.255.0 gateway 192.168.2.17 auto eth1 iface eth1 inet static address 192.168.100.3 netmask 255.255.255.248
DNS configuratie in /etc/resolv.conf:
search andromeda.nl nameserver 192.168.2.17
Selecteer de juiste tijdzone:
cp /usr/share/zoneinfo/..... /etc/localtime
System log configuratie in /etc/syslog.conf
Logrotate configuratie in /etc/logrotate.d/*
Logical volumes maken voor /home en /srv
lvcreate -L 100G -n home vg-sys lvcreate -L 100G -n serv vg-sys lvcreate -L 400G -n arch vg-sys
Block devices maken met DRBD. Definities in /etc/drbd.conf:
global { usage-count no; } common { protocol C; syncer { rate 500M; } } # Example IPv6 resource home { net { allow-two-primaries; after-sb-0pri discard-least-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } startup { become-primary-on both; } on phobos.andromeda.nl { device /dev/drbd1; disk /dev/mapper/vg--sys-home; meta-disk internal; address ipv6 [2001:888:18a3::26]:7789; } on deimos.andromeda.nl { device /dev/drbd1; disk /dev/mapper/vg--sys-home; meta-disk internal; address ipv6 [2001:888:18a3::27]:7789; } } # Example IPv4 resource serv { net { allow-two-primaries; after-sb-0pri discard-least-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } startup { become-primary-on both; } on phobos.andromeda.nl { device /dev/drbd2; disk /dev/mapper/vg--sys-serv; meta-disk internal; address 192.168.100.3:7790; } on deimos.andromeda.nl { device /dev/drbd2; disk /dev/mapper/vg--sys-serv; meta-disk internal; address 192.168.100.4:7790; } }DRBD devices opbrengen op beide nodes:
drbdadm create-md home drbdadm create-md serv drbdadm up home drbdadm up servDaarna devices synchonizeren en filesystems maken vanaf de eerste node:
drbdadm -- --overwrite-data-of-peer primary home drbdadm -- --overwrite-data-of-peer primary servOpstart volgorde wijzigen zodat DRBD gestart wordt voordat OCFS filesystem geactiveerd wordt:
mv /etc/rc2.d/S70drbd /etc/rcS.d/S41drbdCluster filesystem opzetten in /etc/ocfs2/cluster.conf:
node: ip_port = 7777 ip_address = 192.168.100.3 number = 0 name = phobos cluster = ocfs2 node: ip_port = 7777 ip_address = 192.168.100.4 number = 1 name = deimos cluster = ocfs2 cluster: node_count = 2 name = ocfs2en /etc/default/o2cb:
# O2CB_ENABLED: 'true' means to load the driver on boot. O2CB_ENABLED=true # O2CB_BOOTCLUSTER: If not empty, the name of a cluster to start. O2CB_BOOTCLUSTER=ocfs2 # O2CB_HEARTBEAT_THRESHOLD: Iterations before a node is considered dead. O2CB_HEARTBEAT_THRESHOLD=31 # O2CB_IDLE_TIMEOUT_MS: Time in ms before a network connection is considered dead. O2CB_IDLE_TIMEOUT_MS=30000 # O2CB_KEEPALIVE_DELAY_MS: Max. time in ms before a keepalive packet is sent. O2CB_KEEPALIVE_DELAY_MS=2000 # O2CB_RECONNECT_DELAY_MS: Min. time in ms between connection attempts. O2CB_RECONNECT_DELAY_MS=2000daarna een reboot om ocfs2 te activeren. Na de reboot filesystems aanmaken om de eerste node:
mkfs -t ocfs2 -N 2 -L ocfs2_drbd1 /dev/drbd1 mkfs -t ocfs2 -N 2 -L ocfs2_drbd2 /dev/drbd2Filesystems toevoegen aan /etc/fstab:
/dev/drbd1 /home ocfs2 _netdev 0 0 /dev/drbd2 /srv ocfs2 _netdev 0 0Installeer heartbeat package:
apt-get install heartbeatConfiguratie in /etc/ha.d/ha.cf:
logfacility local0 ucast eth1 192.168.100.3 auto_failback off node phobos.andromeda.nl node deimos.andromeda.nl crm respawn/etc/ha.d/authkeys:
auth 1 1 crcen /etc/ha.d/haresources:
# Not used, all resources are configured in pacemaker
De applicaties die de services voor het cluster implementeren worden anders geconfigureerd dan op een enkele server. De data voor de diverse daemons wordt onder /srv geplaatst inplaats van de gebruikelijke subdirectory onder /var. Tevens wordt voor iedere service een resource group toegevoegd in /etc/ha.d/haresources. Voor een aantal services wordt de configuratie in dit hoofdstuk beschreven.
Installeren van Apache met PHP en directories maken voor de data:
apt-get install apache2 php5 php-pear # On both nodes mkdir /srv/www mkdir /srv/php5 chmod go-r /srv/php5 chmod go+w /srv/php5 chmod o+t /srv/php5Voor iedere virtuele host de document root aanpassen in /etc/apache2/sites-available/* op beide nodes:
DocumentRoot /srv/wwwDe directory voor PHP session cookies aanpassen op beide nodes in /etc/php5/apache2/php.ini:
session.save_path = /srv/php5Het virtuele adres van de webserver toevoegen in DNS, bij voorbeeld:
cww IN A 192.168.2.50Een resource group toevoegen in /etc/ha.d/haresources (beide nodes):
phobos.andromeda.nl 192.168.2.50 apache2Heartbeat zorgt er vervolgens voor dat het IP adres op de juiste interface geconfigureerd wordt en dat de http daemon gestart wordt.
Installeren van git applicaties.
apt-get install git git-daemon-sysvinit gitweb mkdir /srv/git rmdir /var/cache/git ln -s /srv/git /var/cache/gitIn /etc/default/git-daemon:
GIT_DAEMON_ENABLE=true GIT_DAEMON_USER=gitdaemon GIT_DAEMON_DIRECTORY=/srv/gitHet virtuele adres van de git server toevoegen in DNS, bij voorbeeld:
git IN AAAA 2001:888:18a3::1005Configuration for pacemaker
crm configure primitive git lsb:git-daemon crm configure primitive git-ip ocf:heartbeat:IPv6addr params ipv6addr=2001:888:18a3::1005/64 op monitor interval=10s crm configure colocation gitd INFINITY: git-ip git crm configure order git-after-ip mandatory: git-ip git
Installeren van postgresql, directories maken, en de data verplaatsen:
apt-get install postgresql php5-pgsql mkdir -p /srv/postgresql/9.1 /etc/init.d/postgresql stop mv /var/lib/postgresql/9.1/main /srv/postgresql/9.1 # Primary node only rm -rf /var/lib/postgresql/9.1/main # Secondary node onlyDe directory voor de database en het adres voor de service aanpassen in /etc/postgresql/9.1/main/postgresql.conf:
data_directory = '/srv/postgresql/9.1/main' listen_addresses = 'localhost,pgsql'Het virtuele adres van de database server toevoegen in DNS, bij voorbeeld:
pgsql IN AAAA 2001:888:18a3::1002Configuration for pacemaker
crm configure primitive postgres lsb:postgresql crm configure primitive pgsql-ip ocf:heartbeat:IPv6addr params ipv6addr=2001:888:18a3::1002/64 op monitor interval=10s crm configure colocation pgsql INFINITY: pgsql-ip postgres crm configure order postgres-after-ip mandatory: pgsql-ip postgres
Installeren van bind, directories maken, en de data verplaatsen:
apt-get install bind9 mkdir /srv/bind chgrp bind /srv/bind chmod g+s /srv/bind /etc/init.d/bind9 stop mv /etc/bind/named.conf.options /srv/bind mv /etc/bind/named.conf.local /srv/bindDe pathnamen voor de lokale configuratie files aanpassen in /etc/bind/named.conf:
include "/srv/bind/named.conf.options" include "/srv/bind/named.conf.local"De directory voor zone files aanpassen in /srv/bind/named.conf.local:
directory "/srv/bind"Het virtuele adres van de name server toevoegen in DNS, bij voorbeeld:
dns IN A 192.168.2.52Een resource group toevoegen in /etc/ha.d/haresources (beide nodes):
phobos.andromeda.nl 192.168.2.52 bind9
Installeren van dhcp, directory maken
apt-get install dhcp3-server mkdir /srv/dhcpDe pathnaam voor de configuratie file aanpassen in /etc/dhcp3/dhcpd.conf:
lease-file-name /srv/dhcp/dhcpd.leases;
Postfix must not be put under cluster control. All nodes must be able to send and receive local mail at least. Therefore postfix will tun on each node in parallel. Dovecot, on the other hand, can only run on one node because of internal cahcing in the imap daemon.
Installeren van postfix, dovecot, etc. en directory maken
apt-get install postfix postgrey apt-get install procmail dovecot-common dovecot-imapd apt-get install squirrelmail mkdir /srv/mail chown dovecot.mail /srv/mailPostfix configureren om via procmail af te leveren en greylisting te gebruiken in /etc/postfix/main.cf:
mailbox_command = /usr/bin/procmail -a "$EXTENSION" smtpd_recipient_restrictions = permit_mynetworks ... reject_unauth_destination check_policy_service inet:127.0.0.1:10023 smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yesPostfix configureren om via poort 587 authenticated SMTP af te handelen in /etc/postfix/master.cf:
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATINGProcmail de mail laten afleveren via dovecot, in /etc/procmailrc:
# file: /etc/procmailrc # system-wide settings for procmail SHELL="/bin/bash" SENDMAIL="/usr/sbin/sendmail -oi -t" LOGFILE="/var/log/procmail.log" DELIVER="/usr/lib/dovecot/deliver" # fallback: DEFAULT="$HOME/Maildir/" MAILDIR="$HOME/Maildir/" :0 w * ^X-Spam-Status: Yes | $DELIVER -m spam -d $LOGNAME :0 w | $DELIVER -d $LOGNAMEDovecot configureren om mail via de LDA te accepteren en af te leveren in /srv/mail/... door middel van de configuratie file /etc/dovecot/conf.d/10-mail.conf, 15-lda.conf:
mail_location = maildir:/srv/mail/%u protocol lda { # Address to use when sending rejection mails. postmaster_address = postmaster@andromeda.nl mail_plugins = sieve }For SMTP authentication. conf.d/10-master.conf:
service auth { ... unix_listener /var/spool/postfix/private/auth { mode = 0660 # Assuming the default Postfix user and group user = postfix group = postfix } ... }conf.d/10-auth.conf
auth_mechanisms = plain loginHet virtuele adres van de imap server toevoegen in DNS, bij voorbeeld:
imaps IN AAAA 2001:888:18a3::1006Configuration for pacemaker
crm configure primitive dovecot lsb:dovecot crm configure primitive imaps-ip ocf:heartbeat:IPv6addr params ipv6addr=2001:888:18a3::1006/64 op monitor interval=10s crm configure colocation imaps INFINITY: imaps-ip dovecot crm configure order dovecot-after-ip mandatory: imaps-ip dovecotDe virtuele adressen van de smtp en imap servers toevoegen in DNS, bij voorbeeld:
smtp IN A 192.168.2.53 mail IN A 192.168.2.54Een resource group toevoegen in /etc/ha.d/haresources (beide nodes):
phobos.andromeda.nl 192.168.2.53 postfix phobos.andromeda.nl 192.168.2.54 dovecot
Installeren van Bacula packages.
apt-get install bacula bacula-director-pgsql mkdir /backup chown bacula /backup mount /dev/backup-filesystem /backupHet virtuele adres van de bacula director toevoegen in DNS, bij voorbeeld:
bacula IN AAAA 2001:888:18a3::1003Configuration for pacemaker
crm configure primitive bacula lsb:bacula-director crm configure primitive bacula-ip ocf:heartbeat:IPv6addr params ipv6addr=2001:888:18a3::1003/64 op monitor interval=10s crm configure colocation bacula-dir INFINITY: bacula-ip bacula crm configure order bacula-after-ip mandatory: bacula-ip baculaConfiguratie van de storage daemon in /etc/bacula/bacula-sd.conf:
Storage { # definition of myself Name = strofades-sd SDPort = 9103 # Director's port WorkingDirectory = "/var/lib/bacula" Pid Directory = "/var/run/bacula" Maximum Concurrent Jobs = 20 } # # List Directors who are permitted to contact Storage daemon # Director { Name = strofades-dir Password = "sL0Pjc3Nl1Je8zgVW3u8+0cI+vdIl5XdizCLU0v5dotr" } # # Restricted Director, used by tray-monitor to get the # status of the storage daemon # Director { Name = strofades-mon Password = "9v4d+PzZv7C5pdB4iR+larCJqMBw6zsAEKPcxKh7ZHdU" Monitor = yes } Device { Name = FileStorage Media Type = File Archive Device = /backup LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; } # # Send all messages to the Director, # mount messages also are sent to the email address # Messages { Name = Standard director = strofades-dir = all }Configuratie van de file daemon in /etc/bacula/bacula-fd.conf:
# # List Directors who are permitted to contact this File daemon # Director { Name = strofades-dir Password = "ARm7qyF3lJSBKJ9NRICUj+Ry3PRJ3EZN92EnilHFVb8/" } # # Restricted Director, used by tray-monitor to get the # status of the file daemon # Director { Name = strofades-mon Password = "OWQaB2VMloOQuB5qrp+kWGzrfJ5nMfK+GVMvu1snxK7E" Monitor = yes } # # "Global" File daemon configuration specifications # FileDaemon { # this is me Name = strofades-fd FDport = 9102 # where we listen for the director WorkingDirectory = /var/lib/bacula Pid Directory = /var/run/bacula Maximum Concurrent Jobs = 20 } # Send all messages except skipped files back to Director Messages { Name = Standard director = strofades-dir = all, !skipped, !restored }Configuratie van de Bacula console in /etc/bacula/bconsole.conf:
Director { Name = strofades-dir DIRport = 9101 address = localhost Password = "sWaZRqTS1VX2uacyTZNXlI4Ax9Oj5MK1ANC62QBta0xi" }Label een aantal volumes in de Full en Incremental pools:
strofades:/etc/bacula# bconsole Connecting to Director localhost:9101 1000 OK: strofades-dir Version: 2.4.4 (28 December 2008) Enter a period to cancel a command. *label volume Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" Storage resource "volume": not found Automatically selected Storage: File Enter new Volume name: FULL-01 Defined Pools: 1: Default 2: Scratch 3: Full 4: Incremental Select the Pool (1-4): 3 Connecting to Storage daemon File at strofades.andromeda.nl:9103 ... Sending label command for Volume "FULL-01" Slot 0 ... 3000 OK label. VolBytes=197 DVD=0 Volume="FULL-01" Device="FileStorage" (/backup) Catalog record for Volume "FULL-01", Slot 0 successfully created. Requesting to mount FileStorage ... 3906 File device "FileStorage" (/backup) is always mounted. *label volume Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" Storage resource "volume": not found Automatically selected Storage: File Enter new Volume name: INC-01 Defined Pools: 1: Default 2: Scratch 3: Incremental 4: Full Select the Pool (1-4): 3 Connecting to Storage daemon File at strofades.andromeda.nl:9103 ... Sending label command for Volume "INC-01" Slot 0 ... 3000 OK label. VolBytes=203 DVD=0 Volume="INC-01" Device="FileStorage" (/backup) Catalog record for Volume "INC-01", Slot 0 successfully created. Requesting to mount FileStorage ... 3906 File device "FileStorage" (/backup) is always mounted.