串联(Concatenation): 按顺序使用磁盘,一个磁盘使用完以后使用后续的磁盘。
条带化(Striping): 交替使用不同磁盘的空间。条带化使得IO操作可以并行,因此是提高IO性能的关键。另外,Striping也是RAID的基础。如:VG有2个PV,LV做了条带数量为2的条带化,条带大小为8K,那么当OS发起一个16K的写操作时,那么刚好这2个PV对应的磁盘可以对整个写入操作进行并行写入。
Striping带来好处有:
· 并发进行数据处理。读写操作可以同时发送在多个磁盘上,大大提高了性能。
Striping带来的问题:
· 数据完整性的风险。Striping导致一份完整的数据被分布到多个磁盘上,任何一个磁盘上的数据都是不完整,也无法进行还原。一个条带的损坏会导致所有数据的失效。因此这个问题只能通过存储设备来弥补。
· 条带大小的设定很大程度决定了Striping带来的好处。如果条带设置过大,一个IO操作最终还是发生在一个磁盘上,无法带来并行的好处;当条带设置国小,本来一次并行IO可以完成的事情会最终导致了多次并行IO。
镜像(mirror)
如同名字。LVM提供LV镜像的功能。即当一个LV进行IO操作时,相同的操作发生在另外一个LV上。这样的功能为数据的安全性提供了支持。如图,一份数据被同时写入两个不同的PV。
使用mirror时,可以获得一些好处:
· 读取操作可以从两个磁盘上获取,因此读效率会更好些。
· 数据完整复杂了一份,安全性更高。
但是,伴随也存在一些问题:
· 所有的写操作都会同时发送在两个磁盘上,因此实际发送的IO是请求IO的2倍
· 由于写操作在两个磁盘上发生,因此一些完整的写操作需要两边都完成了才算完成,带来了额外负担。
· 在处理串行IO时,有些IO走一个磁盘,另外一些IO走另外的磁盘,一个完整的IO请求会被打乱,LVM需要进行IO数据的合并,才能提供给上层。像一些如预读的功能,由于有了多个数据获取同道,也会存在额外的负担。
快照(Snapshot)
快照如其名,他保存了某一时间点磁盘的状态,而后续数据的变化不会影响快照,因此,快照是一种备份很好手段。
但是快照由于保存了某一时间点数据的状态,因此在数据变化时,这部分数据需要写到其他地方,随着而来回带来一些问题。关于这块,后续存储也涉及到类似的问题,后面再说。
说IO(六)- Driver & IO Channel
这部分值得一说的是多路径问题。IO部分的高可用性在整个应用系统中可以说是最关键的,应用层可以坏掉一两台机器没有问题,但是如果IO不通了,整个系统都没法使用。如图为一个典型的SAN网络,从主机到磁盘,所有路径上都提供了冗余,以备发生通路中断的情况。
· OS配置了2块光纤卡,分别连不同交换机
· SAN网络配置了2个交换机
· 存储配置了2个Controller,分别连不同交换机