qemu, kvm, xen & libvirtHauptseite | Über | Hilfe | FAQ | Spezialseiten | Anmelden

Druckversion | Impressum | Datenschutz

Collie Sheepdog, Distributed Storage System, corosync

(Link zu dieser Seite als [[QEMU-KVM-Buch/ Speichermedien/ Sheepdog]])

<<<|###| >>> | English


Beispiel einer grafischen Darstellung von Sheepdog-Images
Beispiel einer grafischen Darstellung von Sheepdog-Images

Inhaltsverzeichnis

[bearbeiten] 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.

[bearbeiten] 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

[bearbeiten] 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-system-x86_64 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-system-x86_64 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

[bearbeiten] 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.

Host ~$ qemu-img create sheepdog:Platte2.img 2G

[bearbeiten] Ausfall eines Nodes

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

Host ~$ qemu-system-x86_64 sheepdog:ReactOS.img
Node01 ~$ sudo halt

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

[bearbeiten] 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-system-x86_64 -hda nbd:unix:/var/lock/qemu-nbd

<<<|###| >>>

Von „http://qemu-buch.de/de/index.php/QEMU-KVM-Buch/_Speichermedien/_Sheepdog

Diese Seite wurde bisher 13.046 mal abgerufen. Diese Seite wurde zuletzt am 2. Februar 2013 um 10:02 Uhr geändert. Inhalt ist verfügbar unter der GNU Free Documentation License 1.2.


Finden

Blättern

News

Deutsch
Weitersagen
Bestellen
Tipps für Autoren
Autoren
Impressum


English
Order
Recommendation
The Authors
Contact



Letzte Änderungen


Ändern
Seite bearbeiten
Bearbeitungshilfe
Seitenoptionen
Diskussion
Kommentar hinzufügen
Druckversion
Seitendaten
Versionen
Links auf diese Seite
Änderungen an verlinkten Seiten
Meine Seiten
Anmelden
Spezialseiten
Neue Seiten
Dateiliste
Statistik
Kontakt
Mehr …