XenServer mit Glusterfs

XenServer mit GlusterFS installieren

GlusterFS ist ein verteiltes Dateisystem das man mittels NFS mounten kann. In dieser Anleitung zeige ich wie man alles auf zwei XenServer installieren muss damit die lokalen Festplatten über GlusterFS erreichbar sind.

In dieser Anleitung hab ich zwei Rechner mit dem XenServer 6.5 aufgesetzt. Und alle Updates eingespielt.
Hierzu habe ich das XenServer Update Script verwendet. Damit geht es um einiges schneller als per XenCenter.

Die Server

  • xenserver1.local 192.168.0.221
    • 1 TB lokale Festplatte
  • xenserver2.local 192.168.0.222
    • 1 TB lokale Festplatte

Bei der Installation des XenServers hab ich die Option „Enable thin provisioning“ aktiviert. Dadurch muss man nicht das Local storage erst entfernen um Platz für das GlusterFS zu haben.

Als erstes prüft man ob mittels XenCenter der XenServer auf dem aktuellen stand ist.
Wenn nicht zieht man erst mal alle Updates nach.

XenServer vorbereiten

Falls man bei der Installation das thin provisioning nicht eingeschaltet hat kann man das LVM es mittels dieser Anleitung entfernen.

Bei mir kam ein Fehler das das Citrix.repo nicht funktioniert. Deswegen schaltet man es am besten aus.
[stextbox id=“bash“]sed -i -e „s/enabled=1/enabled=0/“ /etc/yum.repos.d/Citrix.repo[/stextbox]

Bei der ersten Installation hatte der XenServer 6.5 kein Local storage.
Bei dem zweiten wurde allerdings ein Local storage angelegt
Man kann es aber auf der Konsole mit diesem Befehl anlegen falls man das wünscht. Wird aber in dieser Anleitung nicht benötigt

[stextbox id=“bash“]xe sr-create content-type=user type=ext device-config:device=/dev/sda3 shared=false name-label=“Local storage“[/stextbox]

Um das Local Storage zu entfernen hab ich diese Anleitung benutzt

Festplatten vorbereiten

Als nächstes formatieren wir die Festplatte und legen einen mount point an.
Prüfen der Partitionen
[stextbox id=“bash“]cat /proc/partitions[/stextbox]

[stextbox id=“black“]major minor  #blocks  name

7        0      57296 loop0
8        0  976762584 sda
8        1    4193297 sda1
8        2    4193297 sda2
8        3  968372935 sda3[/stextbox]

Jetzt formatieren wir die sda3. Das kann je nach Größe und Festplatten Geschwindigkeit etwas dauern.
[stextbox id=“bash“]mkfs.ext3 /dev/sda3[/stextbox]

Als nächstes legen wir ein Verzeichnis an in das wir die Festplatte mounten werden.
Dieses Verzeichnis dient dann dem GlusterFS als datastore.[stextbox id=“bash“]mkdir /export
echo „/dev/sda3      /export      ext3     defaults,noatime     0     0“ >> /etc/fstab
mount -a
mkdir /export/{datastore1,isostore1}
rm /export/lost+found/ -rf[/stextbox]

Iptables einstellen für GlusterFS

Für das GlusterFS werden noch weiter Ports benötigt damit es funktionieren kann.

Leider hatte ich noch ein paar Probleme mit den regeln und der Stabilität von GlusterFS
Um die Firewall abzuschalten nutzt man diesen Befehl.
[stextbox id=“bash“]system-config-securitylevel-tui[/stextbox]

Das sind die verwendeten iptables Regeln die von GlusterFS genutzt werden.

[stextbox id=“bash“]iptables -A RH-Firewall-1-INPUT -p tcp –dport 24007:24047 -j ACCEPT -m comment –comment „GlusterFS“
iptables -A RH-Firewall-1-INPUT -p tcp –dport 111 -j ACCEPT -m comment –comment „GlusterFS“
iptables -A RH-Firewall-1-INPUT -p udp –dport 111 -j ACCEPT -m comment –comment „GlusterFS“
iptables -A RH-Firewall-1-INPUT -p tcp –dport 38465:38467 -j ACCEPT -m comment –comment „GlusterFS“
service iptables save[/stextbox]
Hier könnte man noch nur das Lokales Netzwerk erlauben das wäre dann mit der Option -s 192.168.0.0/24 am ende gemacht

Da Iptables die Regeln immer hinten anhängt müssen wir die /etc/sysconfig/iptables bereiten und die REJECT Regel nach unten setzen
[stextbox id=“bash“]nano /etc/sysconfig/iptables[/stextbox]

# Generated by iptables-save v1.4.16.3 on Sat Aug 15 23:49:37 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [31:4126]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -i xenapi -p udp -m udp --dport 67 -j ACCEPT
-A RH-Firewall-1-INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 694 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.0.0/24 -p tcp --dport 24007:24047 -m comment --comment GlusterFS -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.0.0/24 -p tcp --dport 111 -m comment --comment GlusterFS -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.0.0/24 -p udp --dport 111 -m comment --comment GlusterFS -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.0.0/24 -p tcp --dport 38465:38467 -m comment --comment GlusterFS -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sat Aug 15 23:49:37 2015

Dann können wir die iptables Regeln neu laden.
[stextbox id=“bash“]service iptables restart[/stextbox]

 

GlusterFS Installation

Als erstes holt man sich die Repo Daten.

[stextbox id=“bash“]cd /etc/yum.repos.d/
wget http://download.gluster.org/pub/gluster/glusterfs/3.5/LATEST/EPEL.repo/glusterfs-epel.repo.el5
mv glusterfs-epel.repo.el5 glusterfs-epel.repo[/stextbox]

Jetzt kann man das update ausführen und sich die Pakete anzeigen lassen

[stextbox id=“bash“]yum update && yum search glusterfs[/stextbox]
[stextbox id=“black“]Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Update Process
No Packages marked for Update
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
===================================================================
Matched: glusterfs
===================================================================
glusterfs.x86_64 : Cluster File System
glusterfs-api.x86_64 : GlusterFS api library
glusterfs-api-devel.x86_64 : Development Libraries
glusterfs-cli.x86_64 : GlusterFS CLI
glusterfs-client-xlators.x86_64 : GlusterFS client-side translators
glusterfs-debuginfo.x86_64 : Debug information for package glusterfs
glusterfs-devel.x86_64 : Development Libraries
glusterfs-extra-xlators.x86_64 : Extra Gluster filesystem Translators
glusterfs-fuse.x86_64 : Fuse client
glusterfs-ganesha.x86_64 : NFS-Ganesha configuration
glusterfs-libs.x86_64 : GlusterFS common libraries
glusterfs-rdma.x86_64 : GlusterFS rdma support for ib-verbs
glusterfs-resource-agents.x86_64 : OCF Resource Agents for GlusterFS
glusterfs-server.x86_64 : Clustered file-system server
python-gluster.x86_64 : GlusterFS python library[/stextbox]

Jetzt können wir GlusterFS installieren
[stextbox id=“bash“]yum install glusterfs-server[/stextbox]

[stextbox id=“black“]Dependencies Resolved

===============================================================================
Package                                  Arch                           Version                             Repository                              Size
===============================================================================
Installing:
glusterfs-server                         x86_64                         3.5.5-2.el5                         glusterfs-epel                         640 k
Installing for dependencies:
glusterfs                                x86_64                         3.5.5-2.el5                         glusterfs-epel                         1.5 M
glusterfs-api                            x86_64                         3.5.5-2.el5                         glusterfs-epel                          76 k
glusterfs-cli                            x86_64                         3.5.5-2.el5                         glusterfs-epel                         130 k
glusterfs-fuse                           x86_64                         3.5.5-2.el5                         glusterfs-epel                         102 k
glusterfs-libs                           x86_64                         3.5.5-2.el5                         glusterfs-epel                         301 k

Transaction Summary
==============================================================================
Install       6 Package(s)
Upgrade       0 Package(s)[/stextbox]

Sicherstellen das GlusterFS beim reboot startet
[stextbox id=“bash“]chkconfig level 235 glusterd on[/stextbox]

GlusterFS manuell starten
[stextbox id=“bash“]service glusterd start[/stextbox]

 

Jetzt können wir den anderen Server in das GlusterFS hängen. Dies muss nur auf einer Node gemacht werden.
[stextbox id=“bash“]gluster peer probe xenserver1.local[/stextbox]

Als nächstes erstelen wir die beiden GlusterFS Volumes datastore1 (für die VMs) und isostore1 (für die ISO Files)
[stextbox id=“bash“]gluster volume create datastore1 replica 2 xenserver1.local:/export/datastore1 xenserver2.local:/export/datastore1
gluster volume create isostore1 replica 2 xenserver1.local:/export/isostore1 xenserver2.local:/export/isostore1[/stextbox]

Bevor die Volumes gestartet werden können muss noch NFS aktiviert werden
[stextbox id=“bash“]gluster volume set datastore1 nfs.port 2049
gluster volume set isostore1 nfs.port 2049
gluster volume start datastore1
gluster volume start isostore1[/stextbox]

 

Jetzt haben wird zwei GlusterFS Volumes angelegt die per NFS gemountet werden können.
Das kann man jetzt über das XenCenter machen.

Einrichtung NFS im XenCenter

Bei der NFS share location gibt man am besten localhost:/datastore1 an.

Den Rest macht das GlusterFS

GlusterFS Performance Tuning

Hier noch ein paar Performance Tuning Einstellungen die man einschalten sollte für den datastore1

[stextbox id=“bash“]
gluster volume set datastore1 nfs.addr-namelookup off
gluster volume set datastore1 nfs.trusted-sync on

gluster volume set datastore1 performance.cache-size 128MB
gluster volume set datastore1 performance.write-behind-window-size 4MB
gluster volume set datastore1 performance.io-thread-count 64
gluster volume set datastore1 performance.io-cache on
gluster volume set datastore1 performance.read-ahead on[/stextbox]

  • performance.cache-size Größe des read cache in byte
    • Default: 32MB
  • performance.write-behind-window-size Größe des whrite behind caches per File
    • Default: 1MB
  • performance.io-thread-count Die maximale anzahl an threads für IO
    • Default: 16
  • performance.read-ahead Wie beim RAID Controller wird versucht folgenden Blöcke vorrauszulesen
    • Default: off

Eventuell sollte man auch bei der Dom0 den RAM vergrößern. Standard ist 2GB
Da das System jetzt noch ein GlusterFS mit RAM versorgen muss.
[stextbox id=“bash“]/opt/xensource/libexec/xen-cmdline –set-xen dom0_mem=4G,max:4G[/stextbox]

Anschließend muss man noch einen Neustart machen.

Da die swapp Einstellungen auf dem XenServer nicht optimal sind sollteman die auch noch ändern
[stextbox id=“bash“]echo 10 > /proc/sys/vm/swappiness && echo „vm.swappiness=10″ >> /etc/sysctl.conf[/stextbox]

Und Falls das System doch mal Swappen tut.
[stextbox id=“bash“]sync; echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a[/stextbox]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*