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.

sed -i -e „s/enabled=1/enabled=0/“ /etc/yum.repos.d/Citrix.repo

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

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

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

cat /proc/partitions
major minor  #blocks  name

7        0      57296 loop0
8        0  976762584 sda
8        1    4193297 sda1
8        2    4193297 sda2
8        3  968372935 sda3

Jetzt formatieren wir die sda3. Das kann je nach Größe und Festplatten Geschwindigkeit etwas dauern.

mkfs.ext3 /dev/sda3

Als nächstes legen wir ein Verzeichnis an in das wir die Festplatte mounten werden.
Dieses Verzeichnis dient dann dem GlusterFS als datastore.

mkdir /export
echo „/dev/sda3      /export      ext3     defaults,noatime     0     0“ >> /etc/fstab
mount -a
mkdir /export/{datastore1,isostore1}
rm /export/lost+found/ -rf

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.

system-config-securitylevel-tui

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

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

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

nano /etc/sysconfig/iptables
# 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.

service iptables restart

 

GlusterFS Installation

Als erstes holt man sich die Repo Daten.

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

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

yum update && yum search glusterfs

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

Jetzt können wir GlusterFS installieren

yum install glusterfs-server
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)

Sicherstellen das GlusterFS beim reboot startet

chkconfig level 235 glusterd on

GlusterFS manuell starten

service glusterd start

 

Jetzt können wir den anderen Server in das GlusterFS hängen. Dies muss nur auf einer Node gemacht werden.

gluster peer probe xenserver1.local

Als nächstes erstelen wir die beiden GlusterFS Volumes datastore1 (für die VMs) und isostore1 (für die ISO Files)

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

Bevor die Volumes gestartet werden können muss noch NFS aktiviert werden

gluster volume set datastore1 nfs.port 2049
gluster volume set isostore1 nfs.port 2049
gluster volume start datastore1
gluster volume start isostore1

 

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


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

  • 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.

/opt/xensource/libexec/xen-cmdline –set-xen dom0_mem=4G,max:4G

Anschließend muss man noch einen Neustart machen.

Da die swapp Einstellungen auf dem XenServer nicht optimal sind sollteman die auch noch ändern

echo 10 > /proc/sys/vm/swappiness && echo „vm.swappiness=10“ >> /etc/sysctl.conf

Und Falls das System doch mal Swappen tut.

sync; echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a

Schreibe einen Kommentar

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

*