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