Shared Storage für KVM

Wie man einen NFS-Storage-Pool in einer KVM-Umgebung einrichtet

| Autor: Thomas Drilling

KVM (libvirt kommt unter anderem aujch mit NFS-Storage zurecht.
KVM (libvirt kommt unter anderem aujch mit NFS-Storage zurecht. (www.linux-kvm.org)

Wer in einer Virtualisierungsumgebung erweiterte Funktionen, wie Live-Migration nutzen oder VMs hochverfügbar machen will braucht Shared Storage. Der Open-Source-Virtualisierer KVM unterstützt neben blockbasiertem Speicher (FC, iSCSI) auch dateibasierten Storage auf Basis von SMB oder NFS.

Die meisten fortgeschrittenen Virtualisierungsfunktionen setzen einen Cluster, zumindest aber mehrere Hypervisor-Hosts voraus. Müssen aber zwei oder mehr Hosts Zugriff auf die gleiche VM haben, geht das nur mit Shared Storage, wie etwa einem SAN-Array, das via FC oder iSCSI angebunden LUNs bereit stellt.

Best Practise NFS

Einfacher und schneller einzurichten sind Netzwerkfreigaben, wie z. B. NFS. Für Cluster-Features wie HA bedarf es zwar eigentlich eines clusterfähigen Dateisystems, dies lässt sich aber z. B. bei NFS über verstreckte Lock-Dateien lösen.

NFS ist außerdem ausgereift, seit Jahrzehnten erprobt und einigermaßen performant. Zudem ist die unterliegende Physik, z. B. in Form eines NAS-Devices relativ preiswert zu bekommen. Das gilt nicht nur für ambitionierte Home-NAS Geräte der Klasse Qnap/Synology. Auch in einer NetApp ist NFS z. B. der webbasierten Oberfläche "Netapp-Filer" mit wenigen Schritten eingerichtet, ebenso wie z. B. in einer rein softwarebasierten Enterprise-Storage-Lösung, wie Datacore SanSymphony

So definiert man einen NFS-Speicher-Pool

KVM-seitig kümmert sich die libvirt automatisch um das Mounten von NFS-Freigaben, wenn das System passend eingerichtet ist. Und das funktioniert wie folgt:

Zunächst muss der Admin einen entsprechenden Storage-Pool definieren. Dazu kommt wie unter KVM üblich das CLI-Tool -Tool virsh zum Einsatz, das dazu allerdings einer vorbereitetet XML-Datei im Libvirt-Format erwartet, in der der Admin quasi „Ort“ und Format seines Speichers beschreibt. Eine solche könnten z. B. für NFS so aussehen, wobei Hostname, die Pfade zum Target, sowie die Berechtigungsangaben der eigenen Umgebung anzupassen sind.

<pool type='netfs'>
  <name>virtimages</name>
  <source>
      <host name='172.16.1.20'/>
      <dir path='/nfs'/>
     <format type='nfs'/>
  </source>
 <target>
       <path>/virtimages</path>
       <permissions>
              <mode>0755</mode>
              <owner>-1</owner>
             <group>-1</group>
       </permissions>
    </target>
</pool>

Dies Datei muss unter virtimages.xml gespeichert und schließlich unter Zuhilfenahme des Parameters pool-define an virsh übergeben werden.

virsh pool-define virtimages.xml

Dass der neue Pool ggf. automatisch startet, erreicht man mit …

virsh pool-autostart virtimages

Achtung: Wer das Ganze unter Red hat Enterprise Linux, bzw. Red hat Enterprise Virtualization oder oVirt ausprobiert, muss ggf. noch folgende SELinux-Einstellung setzen, damit der Zugriff klappt:

setsebool virt_use_nfs 1