k8s自动化运维十一-LVM动态扩容磁盘空间

236 阅读8分钟

什么是LVM

LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,可以认为是一种磁盘空间的动态管理。

LVM必要性

如果虚拟机装的是20G的硬盘,如果不用LVM,你的磁盘是无法扩容的,不是说不能从20G变成40G,因为可以通过挂载多个硬盘的方式。

比如mysql挂载到这20G硬盘上,

image.png

如果没有用lvm,再想扩容20个G的话,

image.png

等于又多出了一个硬盘,2个磁盘即所谓的2个硬盘,硬盘a装的是sda,硬盘b装的是sdb。

这2个20G是独立的,并不能让一个20G扩容到40G,独立的就麻烦了:mysql往这个磁盘写,怎么让它往另外一个磁盘上写呢,写不了,因为在配置mysql数据目录的时候,就指定了往哪个目录里面写,

image.png

mysql的数据目录是/var/mysql/data,往硬盘a上的这个目录下写入数据,但不能往硬盘b的这个目录下写入数据,因为2个磁盘不能共享一个位置,只能往一个磁盘上写,除非把数据库的目录挪到另外一个磁盘上。

mysql的数据目录是/var/mysql/data,对于linux来说,叫目录挂载,在相同的目录下,不能起相同文件夹的名字,不像Windows的C、D、E盘。

在硬盘a上有了目录/var/mysql/data了,在硬盘b上就不能再有这样一个目录了,除非把硬盘a的这个目录删了。

image.png

2个磁盘怎么写数据?把磁盘2修改成40G,把磁盘1的数据复制过来?这也不科学,因为中间有个数据复制的过程,

image.png

20G还可以复制,那2PB(2000T)呢?一个普通的机械硬盘,复制4TB的数据,需要72小时。

所以只能通过LVM解决了,LVM有卷和组的概念,LV是逻辑卷,VG(volume group)是卷组,PV是物理卷,卷组里面可以放磁盘,

以mysql写入数据为例,

image.png

vg逻辑卷组里面放了一块20G的磁盘lv,这个lv就是逻辑卷,vg是逻辑卷组,卷组里面可以放多个逻辑卷,

image.png

mysql存储数据用的是vg逻辑卷组,而不是lv逻辑卷,逻辑卷组虽然不能无限的挂载逻辑卷,但挂载几个TB还是可以的,超过几个TB的数据,不还有分库分表嘛。

接下来看下使用lvm怎么把20G扩容到60G?

image.png

虚拟机现在有一个20G的硬盘,再加一块硬盘,就和买一块硬盘插入上去是一个道理。加设备要关机,但在实际环境中,有个技术叫热插拔,不关机也可以插拔硬盘,

  • 添加硬盘

image.png

  • 选择磁盘

image.png

  • 指定磁盘容量

image.png

  • 指定磁盘文件

image.png

这样就多了一块40G的硬盘,

image.png

怎么把这两块硬盘变成一块?

  • 查看当前磁盘大小
    df -h

image.png

有一个ubuntu-vg-ubuntu-lv,这个大小是19G,怎么把19G变成60G?

  • 查看当前的逻辑卷
    lvdisplay

image.png

ubuntu-lv这个是逻辑卷的名字,属于ubuntu-vg这个逻辑卷组,挂载到了/dev/ubuntu-vg/ubuntu-lv这个路径下,大小是19G,

  • 查看vg的大小
    pvdisplay

image.png

这个逻辑组的大小也是19G,free为 0代表没有空闲空间,/dev/sda3 这个是物理卷,实实在在存储数据的硬盘。

买回新的硬盘,第一件事情就是格式化,在linux下格式化的命令是fdisk,在windows下也是fdisk,只不过都用工具替代了这个命令,这是最原始的格式化工具。

image.png

sda是第一块硬盘,image.png

sdb是第二块硬盘,

image.png

  • 检索硬盘

    fdisk -l |grep '/dev'

image.png

可以看到有一个/dev/sdb 40G的硬盘,如果再加一个硬盘,就会看到有一个/dev/sdc,...,一直到/dev/sdz,再新增硬盘,就是/dev/sda1,/dev/sdb1....

创建新的分区

/dev/sdb是新加入的磁盘,但还不能使用,还需要对这个硬盘创建分区,

image.png

image.png

新建分区,分主分区和扩展分区,一块硬盘最多可以分4个分区,要么是主分区,要么是扩展分区,一共只能分4个分区。

这里测试就分一个主分区,但从哪里开始?

image.png

磁盘有个簇的概念,空间有个范围,写在2000到4000的位置,那0-2000空着行不?

硬盘是个方块,里面有个碟片,碟片是圆的,上面有个机关式的会转,类似vcd、dvd一样。

坏道是怎么来的?盒子里面是个圆圈,有激光在上面读,正常在里面高速旋转,磁头就会到那个上面来,像vcd一样转转转,如果没有断电会收回去,放回到原来的位置,一断电就收不回去了,卡在这个位置上,就停下来了,卡在磁盘的盘片上,一来电,就滋滋滋,再放回去,直接拉回去,就会产生一道杠,这就是磁盘坏道的由来,所以电脑运行的好好的,就不可以突然断电,不然就会卡在那个上面 ,回不去,一开机,再拉回来,搞几次, 磁盘就坏了。

为了解决这个问题,热插拔怎么搞定这个问题的,这个后续的文章再说。

image.png

分一个主分区之后,再写入进去。磁盘叫sdb分了一个区,分的第一区叫sdb1,第2个区就是sdb2。

接下来就要格式化了,一开始装的时候,就是ext4文件系统,磁盘格式化的时候也是这个格式,

  • 磁盘格式化
    mkfs -t ext4 /dev/sdb1

image.png

  • 创建物理卷(实实在在往里面写入数据的磁盘)
    pvcreate /dev/sdb1

    把sdb1这个分区变成了物理卷,就可以往里面写了。

    物理卷交给lvm管理,即逻辑卷lv

image.png

  • 查看卷组
    pvscan

image.png

sda这个物理卷,其实有3个分区,sda1、sda2、sda3,数据真正写在sda3上,没有空闲空间,因为在装的时候,所有的空间为19个G都给到了sda3这个分区。

/dev/sda3这个物理卷对应的逻辑卷lv属于ubuntu-vg这个卷组,/dev/sdb1这个物理卷,还没有分配卷组。

这两个磁盘总共60G的大小,有40个G还没有加入卷组,

image.png

此时这个卷组只有一个逻辑卷19G,没有空闲空间,所以需要把sdb1弄到这个卷组里面,达到扩容的效果。

  • 把物理卷/dev/sdb1扩展到卷组里面去

    vgextend ubuntu-vg /dev/sdb1

image.png

  • 添加成功之后,查看卷组

image.png

可以看到/dev/sdb1已经添加到卷组中了

  • 查看卷组的情况

image.png

这个卷组多了一块物理卷,空闲空间有40G,说明有40G的空间等待分配,把40G的空闲空间添加到原始空间里去,目前原始空间大小是19G,添加之后,就变成了60G,达到扩容的效果。

  • 查看逻辑卷

image.png

物理卷写东西是通过往pv里写数据实现的,实际上通过/dev/ubuntu-vg/ubuntu-lv这个路径往pv里写,这就是逻辑卷的概念。

这个路径是19G,要把它增加到60G,为这个逻辑卷lv扩容,有2种方式:

  • 按照大小扩容(增加10个G)
    lvextend -L +10G /dev/ubuntu-vg/ubuntu-lv

image.png

增加10个G之后,这个lv逻辑卷的大小为29G了,

image.png

还需要再刷新一下,

resize2fs /dev/ubuntu-vg/ubuntu-lv

image.png

image.png

查看卷组

image.png

空闲空间还有30G,一次性想把这30个G弄上去,就使用百分比的方式。

  • 按照百分比扩容
    lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

image.png

查看lv大小是60G了,

image.png

再刷新下,才可以使用

image.pngimage.png

这样就扩容到了60G了。

小结

lvm是一种技术,它能将不同的硬盘变成一块硬盘用,有一个分组的概念,然后在组里面挂载所有的逻辑卷,逻辑卷是指向磁盘本身的,也就是说你不用lvm,就没有逻辑卷的概念。直接往硬盘里写东西,硬盘肯定是分开的 ,只有中间加入了一个概念叫逻辑卷,由逻辑卷帮你托管物理卷。真的磁盘叫物理卷,逻辑磁盘是不是真正的磁盘,和物理删除和逻辑删除是一个道理。由逻辑卷帮你操作物理卷,它来负责分发和写入,从磁盘上实现了所谓的负载均衡。

那写入的时候怎么写入呢?

mysql往里面写入数据,

image.png

创建一个user表,也许写在第一个逻辑卷里,创建一个商品表,写在第二个逻辑卷里,写到哪个磁盘,对我们来说是无感知的,因为mysql直接和卷组打交道,卷组vg帮我们做分散写。

如果下掉一块硬盘会怎样?有可能数据就读不出来了,因为是散列的往里写,没有真正的写入一块硬盘里,而是把一组数据分散写在不同的磁盘里,具体的怎么写法不知道,但就知道被分散写进去了。

一旦下掉一块硬盘,数据就可能无法读取了,一旦lvm扩容,就不可以再把硬盘卸载掉了。

不卸载可以再引申一个新的问题:磁盘坏道,因为磁盘不可能不坏吧,从而引入新的概念,热备份,后续再更新,敬请期待。