- 使用SSD加速系统IO;
- 通过LVMCACHE来将SSD作为HDD的CACHE使用;
[root@localhost mnt]# lvm segtypes
(看输出里面有cache,cache-pool即表示支持了)
[root@localhost mnt]# modprobe dm_cache
(看是否能够加载成功,如果失败,则表示不支持)
[root@localhost mnt]# yum update kernel kernel-headers lvm2 lvm2-libs
升级完后要重启系统,重启会自动以新升级的kernel重启
根据你机器的磁盘,创建好相关的PV,包括SSD、HDD。这里假设你有5块HDD,分别是sdb1、sdc1、sdd1、sde1、sdf1;假设你有两块SSD,分别是:sdg1、sdh1
[root@localhost mnt]# pvcreate /dev/sdb1 ...... /dev/sdh1
创建一个VG,包含所有的PV(当然也包含SSD在内)
[root@localhost mnt]# vgcreate vg0 /dev/sdb1 /dev/sdc1 /dev/sdd1 ....
lvmcache限制了cache和cachemeta必须在同一个vg下面,所以创建一个vg就可以了。
[root@localhost mnt]# lvcreate -n data -l 100%FREE vg0 /dev/sdb1 .../dev/sdf1
创建磁盘(data)LV的时候注意后面加上pv的列表,限制lv只在指定的pv上创建。如果需要创建stripped模式的LV,请加上-iN(N为pv数量)参数。
[root@localhost mnt]# lvcreate -n cache -L 100G vg0 /dev/sdg1 /dev/sdh1
创建cache LV的时候注意加上SSD的pv列表,限制该LV只在SSD的PV上面创建。如果需要创建stripped模式的LV,请加上-iN(N为pv数量)参数。
[root@localhost mnt]# lvcreate -n cachemeta -L 1G vg0 /dev/sdg1 /dev/sdh1
创建cachemeta LV的时候注意加上SSD的pv列表,限制该LV只在SSD的PV上面创建。如果需要创建stripped模式的LV,请加上-iN(N为pv数量)参数。
[root@localhost mnt]# lvconvert --type cache-pool --poolmetadata vg0/cachemeta vg0/cache
[root@localhost mnt]# lvs -a vg0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
cache vg0 Cwi---C--- 1.00g
[cache_cdata] vg0 Cwi------- 1.00g
[cache_cmeta] vg0 ewi------- 64.00m
data vg0 -wi-a----- 15.99g
[lvol0_pmspare] vg0 ewi------- 64.00m
[root@localhost mnt]# lvconvert --type cache --cachepool vg0/cache vg0/data
[root@localhost mnt]# lvs -a vg0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
[cache] vg0 Cwi---C--- 1.00g 0.01 0.24 0.00
[cache_cdata] vg0 Cwi-ao---- 1.00g
[cache_cmeta] vg0 ewi-ao---- 64.00m
data vg0 Cwi-a-C--- 15.99g [cache] 0.01 0.24 0.00
[data_corig] vg0 owi-aoC--- 15.99g
[lvol0_pmspare] vg0 ewi------- 64.00m
默认是writethrough模式,要改为writeback模式加参数: --cachemode writeback。
[root@localhost mnt]# lvconvert --type cache --cachemode writeback --cachepool vg0/cache vg0/data
Logical volume vg0/data is now cached.
[root@localhost ~]# lvs -o+cache_mode vg0/data
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Cachemode
data vg0 Cwi-aoC--- 15.99g [cache] 100.00 0.36 0.00 writeback
[root@localhost mnt]# mkfs.ext4 /dev/vg0/data
[root@localhost mnt]# mount -t ext4 /dev/vg0/data /mnt/
lvmcache可以动态的绑定或者分离cache,并不会影响lvm区里面的数据。
[root@localhost mnt]# lvconvert --splitcache vg0/data
上面命令把vg0/data这个lv的cache去掉了。比如:
[root@localhost ~]# lvs -a vg0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
[cache] vg0 Cwi---C--- 1.00g 100.00 0.36 0.00
[cache_cdata] vg0 Cwi-ao---- 1.00g
[cache_cmeta] vg0 ewi-ao---- 64.00m
data vg0 Cwi-a-C--- 15.99g [cache] 100.00 0.36 0.00
[data_corig] vg0 owi-aoC--- 15.99g
[lvol0_pmspare] vg0 ewi------- 64.00m
[root@localhost ~]# lvconvert --splitcache vg0/data
Flushing cache for data.
Logical volume vg0/data is not cached and cache pool vg0/cache is unused.
[root@localhost ~]# lvs -a vg0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
cache vg0 Cwi---C--- 1.00g
[cache_cdata] vg0 Cwi------- 1.00g
[cache_cmeta] vg0 ewi------- 64.00m
data vg0 -wi-a----- 15.99g
[lvol0_pmspare] vg0 ewi------- 64.00m
绑定Cache的方式与前面创建Cache LV的方式一样:
[root@localhost mnt]# lvconvert --type cache --cachepool vg0/cache vg0/data
[root@localhost mnt]# lvs -a vg0
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
[cache] vg0 Cwi---C--- 1.00g 0.01 0.24 0.00
[cache_cdata] vg0 Cwi-ao---- 1.00g
[cache_cmeta] vg0 ewi-ao---- 64.00m
data vg0 Cwi-a-C--- 15.99g [cache] 0.01 0.24 0.00
[data_corig] vg0 owi-aoC--- 15.99g
[lvol0_pmspare] vg0 ewi------- 64.00m