Benutzer-Werkzeuge

Webseiten-Werkzeuge


sheepdog

Sheepdog

Website: http://www.osrg.net/sheepdog/

Sheepdog ist ein Distributed Storage System für QEMU. Es bietet hochverfügbaren Storage auf Block-Ebene für virtuelle Maschinen. Das heißt, der Speicherplatz für die virtuellen Festplatten wird auf mehrere Sheepdog-Server (Nodes) gespiegelt. Es gibt keinen zentralen Server. Sheepdog skaliert bis zu hunderten Nodes und unterstützt erweiterte Volumen-Management-Funktionen wie Snapshots, Cloning und Thin Provisioning. Die Clients brauchen sich nicht darum zu kümmern, auf welchen Nodes die jeweiligen Blöcke gespiegelt werden. Die Kommunikation der Nodes erfolgt über die Corosync Cluster Engine (http://www.corosync.org). Corosync ist ein Fork des OpenAIS-Projektes und stellt eine Kommunikationsschicht für verteilte Anwendungen zur Verfügung. Mit Hilfe des Totem-Protokolls wird eine fehlertolerante Multicast-Kommunikation realisiert.

Installation

Zur Installation sind eine oder mehrere x86-Maschinen (64-Bit) notwendig. Auf einen Sheepdog-Node kann auch QEMU ab Version 0.13 installiert sein. Zu empfehlen sind mindestens drei Nodes. Für eine Testumgebung ist die Installation in virtuellen Maschinen möglich. In diesem Beispiel werden zunächst zwei Nodes mit den IP-Adressen 192.168.1.201 (Node01) und 192.168.1.202 (Node01) verwendet. Auf dem Rechner Host läuft QEMU. Auf diesem Computer soll später acuh Sheepdog installiert werden.

Per Default verwendet Sheepdog das Verzeichnis /var/lib/sheepdog zum Speichern der Daten. Dieses Verzeichnis ist auf den Nodes jeweils als separate Partition anzulegen. Da die Daten der Images auf allen Nodes kopiert werden, diese Partition entsprechend groß zu wählen. Das Eininden der Partition muss mit dem XATTR-Support erfolgen. In diesem Beispiel wird als Dateisystem ext4 verwendet. In der Datei /etc/fstab ist dazu statt defaults die Option user_xattr einzutragen. Manuell wird diese Mount-Option mit diesem Befehl hinzugefügt:

Node01 ~$ sudo mount -o remount,user_xattr /var/lib/sheepdog

Neben einem Kernel ab Version 2.6.27 wird glibc ab Version 2.9, Corosync und libcorosync-dev benötigt. Zuerst wird corosync installiert. Unter Debian/Ubuntu erfolgt dies mit diesem Befehl:

Node01 ~$ sudo apt-get install corosync libcorosync-dev

Für Red Hat, CentOS und Fedora ist folgender Befehl anzuwenden.

Node01 ~$ sudo yum install corosynclib-devel

Unter Ubuntu ist in der Datei /etc/default/corosync die Variable START mit dem Wert yes zu definieren. Corosync ist zu starten. Bei Problemen sind die Einträge in der Log-Datei zu analysieren. Die Log-Datei wird in der Konfigurationsdatei /etc/corosync/corosync.conf definiert.

Node01 ~$ sudo service corosync start

Node01 ~$ ps aux | grep corosyn[c]

Läuft Corosync auf allen Nodes, wird Sheepdog installiert. Ist kein entsprechendes Paket vorhanden, sind die Quellen zu kompilieren. Dazu sind diese Pakete notwendig:

Node01 ~$ sudo apt-get install git-core automake libtool

Node01 ~$ sudo apt-get install libc6 libc6-dev pkg-config

Node01 ~$ sudo apt-get install debhelper

Die Quellen werden heruntergeladen und kompiliert. Für Linux-Distributionen mit RPM-Paketmanagement steht der Befehl make rpm zur Verfügung. Dieser ist hier statt make install anzuwenden.

Node01 ~$ mkdir -p ~/source

Node01 ~$ cd ~/source

Node01 ~$ git clone git://sheepdog.git.sf.net/gitroot/sheepdog/sheepdog

Node01 ~$ cd sheepdog

Node01 ~$ ./autogen.sh

Node01 ~$ ./configure

Node01 ~$ sudo make install

Node01 ~$ cd -

Auf jedem Node ist der Sheepdog-Daemon zu starten.

Node01 ~$ sudo service sheepdog start

Node01 ~$ service sheepdog status

Sheepdog legt Unterverzeichnisse und eine Log-Datei an.

Node01 ~$ ls /var/lib/sheepdog/

epoch journal obj sheep.log

Damit Sheepdog automatisch beim Boot-Vorgang gestartet wird, sind entsprechende Symlinks zu setzen.

Node01 ~$ sudo ln -s /etc/init.d/sheepdog /etc/rc1.d/K06sheepdog

Node01 ~$ sudo ln -s /etc/init.d/sheepdog /etc/rc6.d/K06sheepdog

Node01 ~$ sudo ln -s /etc/init.d/sheepdog /etc/rcS.d/S60sheepdog

Node01 ~$ sudo reboot

Node01 ~$ ps aux | grep shee[p]

Zur Administration von Sheepdog dient der Befehl collie (Sheepdog Administrator Utilty).

Node01 ~$ collie –help

Usage: collie command subcommand [options]

Sheepdog Administrator Utilty



Command syntax:

  cluster (info|format|shutdown)

  node (info|list)

  vdi (list|tree|graph|delete|object|setattr|getattr)



Common parameters:

  -a, --address           specify the daemon address (default: localhost)

  -p, --port              specify the daemon port

  -h, --help              display this help and exit

Die Nodes lassen sich auflisten. Mit der Default-Konfiguration sieht aber jeder Node nur sich selbst.

Node01 ~$ collie node list

    Idx - Host:Port              Number of vnodes

 ------------------------------------------------

 *    0 - 127.0.0.1:7000      	64

Um dies zu ändern, muss auf allen Nodes in der Datei /etc/corosync/corosync.conf die IP-Adresse des Nodes hinter bindnetaddr: eingetragen werden. Beispiel Node01:

# /etc/corosync/corosync.conf

# man openais.conf

totem {

	version: 2

	token: 3000

	token_retransmits_before_loss_const: 10

	join: 60

	consensus: 5000

	vsftype: none

	max_messages: 20

	clear_node_high_bit: yes

 	secauth: off

 	threads: 0

 	rrp_mode: none

 	interface {

		ringnumber: 0

		bindnetaddr: 172.16.0.0

		# bindnetaddr: 127.0.0.1 

                bindnetaddr: 192.168.1.201

		mcastaddr: 226.94.1.1

                # Sende-Port=5404, Empfangs-Port=5405

		mcastport: 5405

	}

}

amf {

	mode: disabled

}

service {

 	ver:       0

 	name:      pacemaker

}

aisexec {

        user:   root

        group:  root

}

logging {

        fileline: off

        to_stderr: yes

        to_logfile: no

        to_syslog: yes

        syslog_facility: daemon

        debug: off

        timestamp: on

        logger_subsys {

                subsys: AMF

                debug: off

                tags: enter|leave|trace1|trace2|trace3|trace4|trace6

        }

}

Nach einem Neustart werden alle Nodes aufgelistet. Die Identifizierung eines Nodes erfolgt über eine eindeutige ID.

Node01 ~$ sudo reboot

Node01 ~$ collie node list

   Idx - Host:Port              Number of vnodes

------------------------------------------------

*    0 - 192.168.1.201:7000      64

     1 - 192.168.1.202:7000      64

Das Sheepdog-Cluster ist zu formatieren. Dies erfolgt auf einem Node mit dem Befehl collie cluster format. Hinter –copies= ist die Anzahl der Nodes anzugeben. Da neben den zwei Nodes auch Sheepdog auf dem QEMU-Rechner installiert werden soll, ist hier der Wert 3 vorzugeben.

Node01 ~$ collie cluster format –copies=3

Der Status des Clusters wird auf beiden Nodes überprüft.

Node01 ~$ collie cluster info
running

Node02 ~$ collie cluster info
running

Verwalten von Images

In diesem Beispiel wird ein Image auf dem Cluster angelegt, wobei die Adressierung über den Hostnamen Node01 erfolgt. Das Port ist 7000.

Host ~$ qemu-img create sheepdog:Node01:7000:Platte.img 1G

Ein Sheepdog-Image wird in diesem Beispiel auf die lokale Platte kopiert.

Host ~$ qemu-img convert sheepdog:Node01:7000:Platte.img Platte.img

In diesem Beispiel wird ein vorhandenes Image in den Sheepdog-Cluster importiert. Es ist egal, ob hier Node01 oder Node02 verwendet wird.

Host ~$ qemu-img convert ReactOS.img sheepdog:Node02:7000:ReactOS.img

Das Gast-System auf dem importierten Sheepdog-Image wird gestartet. Es ist auch hier egal, ob Node01 oder Node02 verwendet wird.

Host ~$ qemu sheepdog:Node01:7000:ReactOS.img

VM-Snapshots lassen sich wie bei dem Format qcow2 anlegen. Der Name des neuen Snapshots ist hier vor_PatchDay.

Host ~$ qemu-img snapshot -c vor_PatchDay sheepdog:Node01:7000:ReactOS.img

Zum Booten mit dem Zustand eines VM-Snapshots hängt man dessen Namen an.

Host ~$ qemu sheepdog:Node01:7000:ReactOS.img:vor_PatchDay

Eine Overlay-Datei wird wie folgt generiert:

Host ~$ qemu-img create -b sheepdog:Node01:7000:ReactOS.img:vor_PatchDay \
sheepdog:Node01:7000:ReactOS.ovl

Zum Auflisten der virtuellen Festplatten dient der Befehl collie vdi list. Diese Befehl muss auf allen Nodes identische Ausgaben liefern.

Node01 ~$ collie vdi list

  name        id    size    used  shared    creation time   vdi id

------------------------------------------------------------------

  Platte.img      1  1.0 GB  0.0 MB  0.0 MB 2011-07-08 09:39   31040a

s ReactOS.img     1  5.0 GB  192 MB  0.0 MB 2011-07-08 12:32   6634af

  ReactOS.img     2  5.0 GB  0.0 MB  192 MB 2011-07-08 12:46   6634b0

  ReactOS.ovl     1  5.0 GB  0.0 MB  192 MB 2011-07-08 12:55   f92ee7

Mit dem Befehl collie vdi tree werden die Images mit Snapshots baumartig dargestellt.

Node01 ~$ collie vdi tree
Platte.img—(You Are Here)
ReactOS.img—[2011-07-08 18:32]—(You Are Here)
ReactOS.ovl—(You Are Here)

Eine grafische Darstellung wird durch den Befehl collie vdi graph ermöglicht.

Node01 ~$ collie vdi graph > grafik.dot

Aus der generierten Datei erzeugt das Tool Graphviz Grafik-Dateien. Dies kann auf einen beliebigen Rechner erfolgen.

~$ sudo apt-get install graphviz
~$ dot -Tgif grafik.dot -o grafik.gif

Ein QEMU-Host als Sheepdog-Node

Sind die Tests mit Sheepdog erfolgreich verlaufen, wird auch Sheepdog auf dem QEMU-Host installiert und in das Cluster eingebunden. Dazu sind obige Installationsschritte auf dem Host abzuarbeiten. Das Formatieren des Cluster mit dem Befehl collie cluster format ist nicht notwendig, wenn hinter –copies= bereits die entsprechende Anzahl angegeben wurde. Nach erfolgreicher Installation wird der Rechner Host als dritter Node aufgelistet.

Node01 ~$ collie node list

   Idx - Host:Port              Number of vnodes

------------------------------------------------

     0 - 192.168.1.100:7000   	64

     1 - 192.168.1.201:7000   	64

*    2 - 192.168.1.202:7000   	64

Die Adressierung der Sheepdog-Images vereinfacht sich. Die jeweilige Angabe des Nodes und dessen Port können entfallen.

Ausfall eines Nodes

Bei Ausfall eines Nodes wird der Betrieb der virtuellen Maschine nicht gestört.

Host ~$ qemu sheepdog:ReactOS.img

Node01 ~$ sudo halt

Steht der Node wieder zur Verfügung, werden dessen Sheepdog Daten aktualisiert.

NBD-Unterstützung

Zur Unterstützung von Network Block Devices (http://qemu-buch.de/d/Speichermedien/_Network_Block_Devices) wird qemu-nbd mit dem Image gestartet.

Host ~$ qemu-nbd -t -k /var/lock/qemu-nbd sheepdog:ReactOS.img

Host ~$ qemu -hda nbd:unix:/var/lock/qemu-nbd

sheepdog.txt · Zuletzt geändert: von 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki