LVM Caching mit SSDs einrichten
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird. Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar. |
---|
Dieser Wikiartikel zeigt, wie Sie mittels LVM Cache HDDs, durch Verwendung von SSDs als Caching Devices, beschleunigen können. LVM Cache stellt ein Frontend für den dm-cache Kernel Treiber dar, um eine bequeme Administration zu ermöglichen.
LVM Cache Grundlagen
Im nachfolgenden Abschnitt werden kompakt die LVM Cache Grundlagen erläutert, welche Caching Strategien und Komponenten es gibt. Detailliertere Informationen zu LVM finden Sie im Wikartikel LVM Grundlagen.
Caching Strategien
LVM Cache unterstützt zwei unterschiedliche Cache Strategien, writethrough und writeback. Der Wikiartikel zur alternativen SSD Caching Methode Flashcache geht auf die unterschiedlichen Methoden noch detaillierter ein.
Writethrough
Dieser Modus ist standardmäßig konfiguriert, es handelt sich hierbei um einen reinen Lesecache, er stellt sicher dass alle Daten immer auf beiden Devices geschrieben sind, also auf dem CachePoolLV und auch auf dem OriginLV. Falls bei diesem Modus ein Device des Cache Pools ausfällt, resultiert kein Datenverlust.
Writeback
Dieser Modus verzögert als Schreib- und Lesecache das Zurückschreiben der Daten vom Cache Pool zum OriginLV. Writeback erhöht die Performance, aber der Ausfall eines Caching Devices kann durch das verzögerte Schreiben auf die HDD zu einem Datenverlust führen. Deshalb sollte ein Writeback Cache, wie in der folgenden Beispielkonfiguration, immer als RAID 1 ausgeführt werden. Der writeback Modus kann bei der Anlage des Cache Pools durch folgenden Parameter gesetzt werden:
--cachemode writeback
Nomenklatur
Die folgenden Begriffe werden im Zusammenhang mit LVM Cache verwendet:[1]
Kurzbezeichnung | Komponente | Beschreibung | Liegt auf | Beispiel |
---|---|---|---|---|
OriginLV | Origin logical volume | Großes, langsames Logical Volume | Festplatte | lv_data1 (ursprünglich) lv_data1_corig (verstecktes Volume nach Cache Aktivierung) |
CacheDataLV | Cache data logical volume | Kleines, schnelles Logical Volume für Cache Pool Daten | SSD | lv_data1_cache |
CacheMetaLV | Cache metadata logical volume | Noch Kleineres, schnelles Logical Volume für Cache Pool Meta | SSD | lv_data1_cache_meta |
CachePoolLV | Cache pool logical volume | CacheDataLV + CacheMetaLV | SSD | lv_data1_cache |
CacheLV | Cache logical volume | OriginLV + CachePoolLV | Festplatte(n) + SSD(s) | lv_data1 |
Einschränkungen
Ein LVM Cache für das Root Filesystem kann zu Problemen beim Bootvorgang führen, initrd fehlen laut eines Bugreports zumindest in Ubuntu einige Funktionen um das gecachte LV beim Systemstart aktivieren zu können.[2]
Problemlösung
Im weiteren Verlauf dieses Threads wird eine Problemlösung dazu angeboten. Es müssen nachfolgende Module hinzugefügt werden.
sudo echo "dm_cache" >> /etc/initramfs-tools/modules
sudo echo "dm_cache_mq" >> /etc/initramfs-tools/modules
sudo echo "dm_persistent_data" >> /etc/initramfs-tools/modules
sudo echo "dm_bufio" >> /etc/initramfs-tools/modules
Vorbereitungen
Der LVM Cache in diesem Beispiel setzt auf CentOS 7 als Betriebssystem auf. Die nachfolgenden Konfigurationsschritte können auch für andere Linux-basierte Distributionen adaptiert werden.
Betriebssystem Installation
Als Betriebssystem kommt CentOS 7.2 zum Einsatz (CentOS-7-x86_64-Minimal-1511.iso). Nach der Installation des Betriebssystems werden die nachfolgenden Komponenten mit yum installiert:
yum install lvm2 hdparm smartmontools
SSD und HDD Caches konfigurieren
Nach der Installation des Betriebssystems und der erforderlichen Softwarekomponenten kann der LVM Cache angelegt werden. Der folgende Abschnitt zeigt, wie Sie die Konfiguration im Detail vornehmen.
Hinweis: Deaktivieren Sie vorab die integrierten Caches der Festplatten:
- Schreibcache von Festplatten deaktivieren
- Write Barrier Considerations - Disabling Write Caches (RHEL 7 Storage Administration Guide)
Deaktivieren der Caches
Mittels hdparm werden die Caches der SSDs und HDDs verwaltet. Die Caches der SSDs bleiben aktiviert und die Caches der Festplatten werden deaktviert (Parameter -W wird auf 0 gesetzt).
- SSD Caches der SSDs bleiben aktiv:
hdparm -W1 /dev/sda
hdparm -W1 /dev/sdb
- HDD Caches der Festplatten werden deaktiviert:
hdparm -W0 /dev/sdc
hdparm -W0 /dev/sdd
Persistentes Setzen der Parameter
Führen Sie nun einen Reboot durch und überprüfen Sie, ob die Einstellungen permanent erhalten bleiben. In unserem Beispiel bleiben die Einstellungen noch nicht permanent erhalten, hier kann ein init-Skript Abhilfe verschaffen. Ein beispielhaftes Service-Skript finden Sie auf dem Git-Repo von Jason Lewis, man kann dies als Ausgangspunkt verwenden um ein hdparm-Initskript zu erstellen.[3]
Die Cache Einstellungen sollten wie im Folgenden abgebildet, gesetzt sein:
- SSD Cache Einstellungen
[root@centos7 ~]# hdparm -W /dev/sda
/dev/sda:
write-caching = 1 (on)
[root@centos7 ~]# hdparm -W /dev/sdb
/dev/sdb:
write-caching = 1 (on)
- HDD Cache Einstellungen
[root@centos7 ~]# hdparm -W /dev/sdc
/dev/sdc:
write-caching = 0 (off)
[root@centos7 ~]# hdparm -W /dev/sdd
/dev/sdd:
write-caching = 0 (off)
Software RAIDs erstellen
Für unser Beispiel werden nun mit MDADM zwei auf Linux Software RAID basierende RAID 1 Sets erstellt. Ein LVM Cache kann auch auf einzelnen Festplatten, bzw SSDs, aufgebaut werden. Aus Gründen der Datensicherheit ist jedoch eine RAID-Konfiguration zu empfehlen. Des weiteren könnte man statt eines Linux Software RAIDs auch ein LVM RAID einsetzen.[4]
- RAID 1 für den SSD Cache mit der Bezeichnung raid-cache:
mdadm --create raid-cache --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3
mdadm --detail --scan /dev/md/raid-cache >> /etc/mdadm.conf
- RAID 1 für die HDDs mit der Bezeichnung raid-data:
mdadm --create raid-data --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm --detail --scan /dev/md/raid-data >> /etc/mdadm.conf
LVM Cache einrichten
Nach den vorbereitenden Aufgaben wird im nachfolgenden Abschnitt der LVM Cache konfiguriert. Zuerst werden die Physical Devices und eine Volume Group erstellt. Anschließend werden drei Logical Volumes konfiguriert und zum Abschluss der Cache Pool aktiviert.
Physical devices und Volume Group erstellen
Mit pvcreate werden die Physical Volumes raid-data und raid-cache erstellt. Anschließend wird darauf mit vgcreate eine Volume Group mit der Bezeichnung vg1 konfiguriert.
Physical Volumes erstellen
Im ersten Schritt werden die Physical Volumes raid-data und raid-cache erstellt.
pvcreate /dev/md/raid-data
pvcreate /dev/md/raid-cache
Volume Group erstellen
Erstellen Sie nun eine Volume Group vg1, die über die beiden LVM Physical Volumes raid-data und raid-cache gestülpt wird. Es ist ein wichtiger Hinweis hier anzuführen, dass die beiden Logical Volumes immer in einer gemeinsamen Volume Group liegen müssen.
vgcreate vg1 /dev/md/raid-data /dev/md/raid-cache
Falls bereits eine Volume Group auf der (den) zu cachende(n) Festplatte(n) konfiguriert ist, kann durch vgextend, die SSD hinzugefügt werden.
Logical Volumes erstellen
Nun werden die drei erforderlichen Logical Volumes erstellt, in diesem Beispiel ist das Logical Volume auf den HDDs 4 GB groß und der SSD-Cache bemisst 2 GB. Das Logical Volume mit den Metadaten sollte ein Tausendstel der Datenkomponente betragen und mindestens 8 MB groß sein, in dieser Beispielkonfiguration werden 12 MB für die Metadaten reserviert.
OriginLV
lvcreate -L 4G -n lv_data1 vg1 /dev/md/raid-data
CacheDataLV
lvcreate -L 2G -n lv_data1_cache vg1 /dev/md/raid-cache
CacheMetadataLV
lvcreate -L 12M -n lv_data1_cache_meta vg1 /dev/md/raid-cache
Konvertierung in einen Cache Pool
Für einen LVM Cache sind nun noch zwei Konfigurationsschritte erforderlich. Dies erfolgt mit dem Tool lvconvert und es werden damit ein CachePoolLV und abschließend ein CacheLV erstellt.
CachePoolLV erstellen
Die beiden vorab angelegten Logical Volumes CacheDataLV und CacheMetadataLV werden nun zu einem CachePoolLV verbunden.
# lvconvert --type cache-pool --cachemode writethrough --poolmetadata vg1/lv_data1_cache_meta vg1/lv_data1_cache
WARNING: Converting logical volume vg1/lv_data1_cache and vg1/lv_data1_cache_meta to pool's data and metadata volumes.
THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert vg1/lv_data1_cache and vg1/lv_data1_cache_meta? [y/n]: y
Converted vg1/lv_data1_cache to cache pool.
CacheLV erstellen
Nun wird das CachePoolLV und das OriginLV zum CacheLV final verknüpft. Der LVM Cache ist nun vollständig konfiguriert und kann eingesetzt werden.
# lvconvert --type cache --cachepool vg1/lv_data1_cache vg1/lv_data1
Logical volume vg1/lv_data1 is now cached.
Ausgabe von lvs
In einer detaillierten Ausgabe des Befehls lvs sehen sie die Struktur des neu erstellten LVM Caches.
# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
lv_data1 vg1 Cwi-a-C--- 4.00g [lv_data1_cache] [lv_data1_corig] 0.00 2.31 100.00 lv_data1_corig(0)
[lv_data1_cache] vg1 Cwi---C--- 2.00g 0.00 2.31 100.00 lv_data1_cache_cdata(0)
[lv_data1_cache_cdata] vg1 Cwi-ao---- 2.00g /dev/md125(0)
[lv_data1_cache_cmeta] vg1 ewi-ao---- 12.00m /dev/md125(512)
[lv_data1_corig] vg1 owi-aoC--- 4.00g /dev/md124(0)
[lvol0_pmspare] vg1 ewi------- 12.00m /dev/md124(1024)
Testen des Caches
Sie können den LVM Cache mittlels dmsetup status testen, zum Beispiel wird hier die Trefferrate oder die Anzahl der Blöcke im Cache angezeigt. Der Wikiartikel zu Dm-cache liefert ebenso ausführliche Erklärungen zu den Terminalausgaben von dmsetup status.
dmsetup status des erstellten Caches
# dmsetup status /dev/mapper/vg1-lv_data1
0 8388608 cache 8 106/3072 128 32086/32768 1096 123 32387 317 0 0 0 1 writethrough 2 migration_threshold 2048 smq 0 rw -
Einzelnachweise
- ↑ Manpage zu lvmcache (man7.org)
- ↑ Unable to mount lvmcache root device at boot time (bugs.launchpad.net)
- ↑ sample-service-script/service.sh (github.com)
- ↑ RAIDing with LVM vs MDRAID - pros and cons? (http://unix.stackexchange.com)
Weitere Informationen
- Reigen vervollständigt - SSDs als LVM Cache Devices für Linux (iX 04/2015, S. 112)
- 4.4.5. Creating Thinly-Provisioned Logical Volumes (access.redhat.com)
- 4.4.8. Creating LVM Cache Logical Volumes (access.redhat.com)
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.
|