LVM cache merupakan mekanisme caching dengan meenggunakan disk SSD/NVMe ukuran kecil yang ditambahkan sebagai logical volumes (LVs) dalam volume group (VG) yang sama.
LVM cache menggunakan driver kernel dm-cache yang mendukung mode cache write-through (default) dan write-back untuk meningkatkan kinerja LV dari disk lambat (HDD) dengan memigrasikan beberapa datanya secara dinamis ke LV dari disk cepat (SSD/NVMe) dan lebih kecil.
Prequites #
Siapkan PC server atau VM Linux dengan 1 disk SSD/NVMe dan 1 disk HDD. Misalnya pada panduan ini menggunakan VM Linux dengan spesifikasi:
- Disk 1 (vdb) menggunakan SSD untuk cache LV
- Disk 2 (vdc) menggunakan HDD untuk origin LV
Configuring lvmcache #
Daftarkan vdb
dan vdc
sebagai physical volume (PV) untuk digunakan oleh LVM.
pvcreate /dev/vdb
pvcreate /dev/vdc
Lalu tambahkan kedua perangkat ke dalam volume group.
vgcreate vg_data /dev/vdb /dev/vdc
Selanjutnya buat origin LV dengan nama root
menggunakan keseluruhan disk lambat vdc
lvcreate -l +100%FREE -n root vg_data /dev/vdc
Buat cache LV dengan nama lv_cache
lalu untuk ukurannya dapat Anda sesuaikan atau sisakan sedikit untuk membuat metadata cache.
lvcreate -L 2G -n lv_cache vg_data /dev/vdb
Buat metadata cache dengan nama lv_cache_meta
untuk menyimpan metadata dari cache pool. Ukuran LV metadata cache harus 1000 kali lebih kecil dari lv_cache
dengan ukuran minimum 8MiB.
lvcreate -L 12M -n lv_cache_meta vg_data /dev/vdb
List LV yang telah dibuat.
# lvs vg_data
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_cache vg_data -wi-a----- 2.00g
lv_cache_meta vg_data -wi-a----- 12.00m
root vg_data -wi-a----- <4.00g
Buat cache pool dengan menggabungkan lv_cache
dan lv_cache_meta
. Disini Anda bisa mengatur mode cache yang ingin digunakan.
lvconvert --type cache-pool --cachemode writethrough --poolmetadata vg_data/lv_cache_meta vg_data/lv_cache
List LV setelah lv_cache
dan lv_cache_meta
digabung.
# lvs -a -o +devices vg_data
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
lv_cache vg_data Cwi---C--- 2.00g lv_cache_cdata(0)
[lv_cache_cdata] vg_data Cwi------- 2.00g /dev/vdb(0)
[lv_cache_cmeta] vg_data ewi------- 12.00m /dev/vdb(512)
[lvol0_pmspare] vg_data ewi------- 12.00m /dev/vdb(515)
root vg_data -wi-a----- <4.00g /dev/vdc(0)
Selanjutnya gabungkan origin LV ke cache pool.
lvconvert --type cache --cachepool vg_data/lv_cache vg_data/root
Jika berhasil akan muncul pesan.
Logical volume vg_data/root is now cached.
List LV setelah origin LV di cache.
# lvs -a -o +devices vg_data
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
[lv_cache_cpool] vg_data Cwi---C--- 2.00g 0.04 2.51 0.00 lv_cache_cpool_cdata(0)
[lv_cache_cpool_cdata] vg_data Cwi-ao---- 2.00g /dev/vdb(0)
[lv_cache_cpool_cmeta] vg_data ewi-ao---- 12.00m /dev/vdb(512)
[lvol0_pmspare] vg_data ewi------- 12.00m /dev/vdb(515)
root vg_data Cwi-a-C--- <4.00g [lv_cache_cpool] [root_corig] 0.04 2.51 0.00 root_corig(0)
[root_corig] vg_data owi-aoC--- <4.00g /dev/vdc(0)
Removing Cache Pool #
Untuk melepas origin LV dari cache LV.
lvconvert --splitcache vg_data/root
Untuk menghapus cache LV.
lvremove vg/cache_data_lv