[클러스터][파일] DRBD + HA 시스템 구축하기

Alberto Cammozzo, 21.01.2004

Installazione Cluster Vserver-drdb-heartbeat

Introduzione

Con questa installazione si crea un cluster HA composto da due host che ospitano servizi vserver condividendo l’area /vserver tramite drbd . In condizioni di attivita’ normale uno solo dei due e’ attivo e presta i servizi, con i vserver attivi. I file vengono replicati con drbd sui dischi di entrambe le macchine. In caso di inattivita’ del server principale (primario), l’altro (secondario) fa partire automaticamente i vserver dalla propria copia locale, grazie ai servizi di heartbeat. Al ripristino della funzionalita’ del server primario, lo storage viene risincronizzato e il server primario riprende i servizi.

Unico caso in cui i dischi rimangono non sincronizzati: se si staccano tutti i collegamenti da una delle due macchine, pur lasciandola accesa e attiva: in questo caso bisogna dare la sequenza di comandi

/etc/init.d drbd stop

/etc/init.d drbd start

su tutte e due, dopo aver fermato i servizi e fatto l’unmount di /vserver dal primario.

L’handover dei vserver da un server all’altro avviene nel tempo di 10-20 ping.

Setup hardware

Due macchine, chiamate novanta e novantuno, con ciascuna due schede di rete, delle quali una coppia connessa alla LAN (eth1) e una interconnessa con un cavo cross (eth0) su numerazione IP privata. Quest’ultima e’ riservata al traffico di drbd, mentre la prima ai servizi offerti dalle due macchine.

Inoltre le due seriali (ttyS0) sono collegate con cavo null-modem, per le funzioni di heartbeat.

novanta:~# cat /etc/network/interfaces

auto lo

iface lo inet loopback

auto eth1

iface eth1 inet static

        address 147.162.35.90

        netmask 255.255.255.0

        network 147.162.35.0

        broadcast 147.162.35.255

        gateway 147.162.35.254

auto eth0

iface eth0 inet static

        address 192.168.90.90

        netmask 255.255.255.0

        broadcast 192.169.90.255

novantuno:~# cat /etc/network/interfaces

auto lo

iface lo inet loopback

auto eth1

iface eth1 inet static

        address 147.162.35.91

        netmask 255.255.255.0

        network 147.162.35.0

        broadcast 147.162.35.255

        gateway 147.162.35.254

auto eth0

iface eth0 inet static

        address 192.168.90.91

        netmask 255.255.255.0

        broadcast 192.169.90.255

Installazione e configurazione di drbd

Il kernel (gia’ patchato vserver) necessita del modulo drbd.

Ho scelto la versione 0.7, il cui file di configurazione e’ diverso e incompatibile con la 0.6 (stabile).

cd /usr/src

wget http://www.drbd.org/uploads/media/drbd-0.7_pre10_20040709.tar.gz

tar zxvf drbd-0.7_pre10_20040709.tar.gz

cd drbd-0.7_pre10_20040709

make

make install

Configurazione drbd: Partizionare sulle due macchine un device:

sda1: root partition

sda2: swap

sda3: un metadisk (128K per partizione condivisa)

sda4: la partizione condivisa, mountpoint: /vserver

fdisk -l

Disk /dev/sda: 255 heads, 63 sectors, 6693 cylinders

Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System

/dev/sda1             1       487   3911796   83  Linux

/dev/sda2           488       610    987997+  82  Linux swap

/dev/sda3           611       643    265072+  83  Linux

/dev/sda4           644      6693  48596625   83  Linux

cat /etc/drbd.conf

       resource drbd0 {

         protocol C;

         incon-degr-cmd “halt -f”;

       net {

          sndbuf-size  512k;

           timeout      60    ;

           connect-int  10    ;

           ping-int     10    ;

           ko-count     10;

        }

         on novanta.stat.unipd.it {

           device /dev/nb0;

           disk /dev/sda4;

           address 192.168.90.90:7789;

           meta-disk /dev/sda3[0];

         }

         on novantuno.stat.unipd.it {

           device /dev/nb0;

           disk /dev/sda4;

           address 192.168.90.91:7789;

           meta-disk /dev/sda3[0];

         }

        syncer {

           rate 512M;

        }

       }

Lanciare drbd sulle due macchine

/etc/init.d/drbd start

Sulla primaria (novanta):

drbdadmin /dev/nb0 primary

Per controllare lo stato di avanzamento della sincronizzazione:

cat /proc/drbd

Procedere coi passi successivi solo a sincronizzazione completata.

Configurazione Heartbeat

Su entrambe le macchine:

Predisporre gli script di startup, configurare heartbeat su tutte e due le interfacce ethernet e sulla seriale con protocollo MD5.

apt-get install heartbeat

ln -s /etc/init.d/drbd /etc/rc2.d/S19drbd

cat  /etc/ha.d/ha.cf

        logfacility     local0

        keepalive 2

        deadtime 10

        initdead 120

        serial /dev/ttyS0  

        baud 19200

        udpport 694        

        udp eth1  

        udp eth0  

        node novantuno.stat.unipd.it

        node novanta.stat.unipd.it

cat /etc/ha.d/authkeys

        auth 3

  

        3 md5 PASSWORD

Configurare la parte specifica dei servizi:

Predisporre uno script, su entrambe e macchine, per far partire i vserver solo dalla macchina che ha accesso alle risorse disco come PRIMARY.

cat /etc/init.d/cluster

#!/bin/bash

# Date: Jul 2004

# Author: Alberto Cammozzo (mmzz – at – stat.unipd.it)

# Released under GNU GPL license

#

SHARED_MOUNTPOINT=”/vservers”

DRBD=”/etc/init.d/drbd”

DRBDADM=”/sbin/drbdadm”

MOUNT=”/bin/mount”

UMOUNT=”/bin/umount”

VSERVER=”/etc/init.d/vservers”

case “$1” in

    start)

        echo -n “Starting cluster:”

        $DRBDADM primary all && $MOUNT $SHARED_MOUNTPOINT  && $VSERVER start

        echo “.”

        ;;

    stop)

        echo -n “Stopping cluster:”

        $VSERVER stop

        $UMOUNT $SHARED_MOUNTPOINT

        $DRBDADM secondary all

        $DRBDADM wait_connect all

        echo “.”

        ;;

    *)

        echo “Usage: /etc/init.d/cluster {start|stop}”

        exit 1

        ;;

esac

exit 0

Collocare i link nei posti necessari a heartbeat e a init (rc)

ln -s /etc/init.d/cluster /etc/ha.d/resource.d/cluster

Questo e gli altri file usati da heartbeat sono in /etc/ha.d/resource.d/:

drbddisk e’ gia’ stato installato da make install di drdb stesso. Configurare il file /etc/ha.d/haresources con i servizi delle rispettive macchine in questo caso novanta e’ l’host sul quale preferenzialmente vanno fatti girare i servizi, e novantuno quello di backup.

su entrambe le macchine:

cat  /etc/ha.d/haresources

        novanta.stat.unipd.it drbddisk::drbd0 cluster

cat /etc/fstab

        […]

        /dev/nb0        /vservers       ext3    noauto                  0       0

Tuning degli script di vserver:

Creare gli script per permettere a vserver l’arp-takeover e facilitare il transito dei servizi dal vecchio al nuovo vserver.

su novantuno

cat /etc/vservers/milliways.sh

#!/bin/sh

# —- see — http://archives.linux-vserver.org/200406/0013.html

#

case $1 in

pre-start)

        /usr/lib/heartbeat/send_arp eth1 147.162.35.92 00:E0:18:02:C0:7D 147.162.35.255 ffffffffffff

        /usr/lib/heartbeat/send_arp eth1 147.162.35.92 00:E0:18:02:C0:7D 147.162.35.254 ffffffffffff

        ;;

post-start)

        ;;

pre-stop)

        ;;

post-stop)

        ;;

*)

        echo $0 pre-start

        echo $0 pre-stop

        echo $0 post-start

        echo $0 post-stop

        ;;

esac

su novanta lo script e’ identico, con l’indirizzo ethernet (MAC) di novanta al posto di “00:E0:18:02:C0:7D”. L’indirizzo 147.162.35.92 e’ quello del vserver. L’indirizzo sulla prima riga (147.162.35.255) e’ quello di broadcast, il secondo quello del router (147.162.35.254).

TODO

Installare una seconda coppia di schede di rete da accoppiare con la tecnica del bonding a quelle dedicate a drbd per evitare il single point of failure in caso di guasto di queste o del cavo cross che le collega. Vantaggio marginale ma non insignificante: l’aggregazione dei canali dovrebbe offrire maggiore banda, e quindi maggiore velocita’ di replicazione di drbd. Compilare il modulo del bonding e installarlo

modprobe bonding mode=1 miimon=100 downdelay=200 updelay=200

apt-get install ifenslave iproute

ip addr add 192.168.90.91/24 brd + dev bond0

ip link set dev bond0 addr 00:80:c8:e7:ab:91

ip link set dev bond0 up

/etc/init.d/drbd stop

ifdown eth0

ifenslave -E bond0 eth0 eth1

Rialanciare drbd, ma drbd non riconosce correttamente l’interfaccia bond0 […]

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.