LVM 逻辑卷的读写策略有两种:
linear
:线性方式,一块块盘来读写,写完一块盘再写第二块盘、第 N 块盘,性能低striped
:条带方式,多块盘一起并行读写,性能高
查看 LVM 逻辑卷的读写策略的方式:lvdisplay -m "LV Path"
root@node-1:~# lvdisplay
--- Logical volume ---
LV Path /dev/cache_vg00/cache_lv00
LV Name cache_lv00
VG Name cache_vg00
LV UUID SxIt27-kH9m-2lzb-yOGJ-vYVn-xwi2-qY30PK
LV Write Access read/write
LV Creation host, time 10-1-2-159, 2021-06-04 15:05:32 +0800
LV Status available
# open 1
LV Size 2.72 TiB
Current LE 713820
Segments 6
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
root@node-1:~# lvdisplay -m /dev/cache_vg00/cache_lv00
--- Logical volume ---
LV Path /dev/cache_vg00/cache_lv00
LV Name cache_lv00
VG Name cache_vg00
LV UUID SxIt27-kH9m-2lzb-yOGJ-vYVn-xwi2-qY30PK
LV Write Access read/write
LV Creation host, time node-1, 2021-06-07 15:05:32 +0800
LV Status available
# open 1
LV Size 2.72 TiB
Current LE 713820
Segments 6
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Segments ---
Logical extents 0 to 118969:
Type linear
Physical volume /dev/sdb1
Physical extents 0 to 118969
省略其他信息……
看到 --- Segments ---
的 Type linear
,所以这里的 LVM 逻辑卷读写策略是 linear
线性方式
root@node-2:~# lvdisplay -m /dev/cache_vg00/cache_lv00
--- Logical volume ---
LV Path /dev/cache_vg00/cache_lv00
LV Name cache_lv00
VG Name cache_vg00
LV UUID 7mlqJc-Cxa9-Trhj-O2wp-TeuG-SFYH-Eny0nm
LV Write Access read/write
LV Creation host, time node-2, 2021-06-07 15:11:12 +0800
LV Status available
# open 1
LV Size 1.95 TiB
Current LE 512000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 1280
Block device 253:1
--- Segments ---
Logical extents 0 to 511999:
Type striped
Stripes 5
Stripe size 64.00 Kib
省略其他信息……
看到 --- Segments ---
的 Type striped
,所以这里的 LVM 逻辑卷读写策略是 striped
条带方式
什么是条带化
当多个进程同时访问一个磁盘时,可能会出现磁盘冲突。磁盘系统对访问次数(每秒的IO操作,IOPS)和数据传输速率(读写速率,TPS)有限制。
当达到这些限制时,后面需要访问磁盘的进程就需要挂起等待,这就是磁盘冲突。避免磁盘冲突是优化I/O性能的一个重要目标。条带化技术是一种自动的将I/0负载均衡到多个物理磁盘上的技术。条带化技术将一块连续的数据分成很多小部分,并把他们分别存储到不同的磁盘上去。这样就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,最大化I/0性能。
LVM的条带化:为了性能考虑,将数据跨越多个磁盘存储,即把LV上连续的数据分成大小相同的块,然后依次存储在各个磁盘PV上,类似于RAID0的数据存放形式,实现数据读写的并发;管理员一句自己的数据需求,定义数据分块大小,分布PV磁盘个数信息,从而实现读写性能最佳化。
粗略来讲,条带化strip就是raid0。
如何创建条带化的LV
以下为一个完整的示例
环境说明:
centos7 minal x86_64
系统盘100G sda
数据盘 100G sd[b-e]
1. 创建pv
pvcreate -v /dev/sd[b-e]1
pvs
2. 创建vg
vgcreate -v vg01_data /dev/sd[b-e]1
vgs
vgdisplay -v vg01_data
3. 创建lv
# lvcreate -L 100G -i 4 -I 128k -n lv_data vg01_data -v
# lvcreate -L 100G -i 4 -I 128k -n lv_data vg01_data /dev/sd[b-e]1
lvdisplay -m /dev/vg01_data/lv_data
4. 验证
dmsetup deps /dev/vg01_data/lv_data
lsblk
5. 格式化并挂载
mkfs.xfs /dev/mapper/vg01_data-lv_data
df -hP /data/
参考资料:
Striped Logical Volumes in Logical Volume Management (LVM)
如何将LVM非条带化修改为条带化
参考资料:linux – 将非条带LVM LV更改为条带化LV - 编程之家