部署LVM

备注

私有云数据层LVM卷管理 作为 私有云架构 基础服务Stack的卷管理

硬件设备环境

Open Virtual Machine Firmware(OMVF) 虚拟机pass-through读写 三星PM9A1 NVMe存储 ,即在虚拟主机上可以通过 fdisk -l 看到当前磁盘 GPT 分区如下:

划分LVM之前nvme0n1的GPT分区
Disk /dev/nvme0n1: 953.89 GiB, 1024209543168 bytes, 2000409264 sectors
Disk model: SAMSUNG MZVL21T0HCLR-00B00
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D3860CB9-4291-4532-B16D-2FCCD292EFBA

Device         Start       End   Sectors   Size Type
/dev/nvme0n1p1  2048 976562175 976560128 465.7G Linux filesystem

可以看到磁盘已经有一个分区,这个分区是 私有云数据层 ZData Ceph 分区。我们将在剩余的空白磁盘上划分第2个分区用于LVM卷管理,规划空间300GB。

备注

通常生产环境建议将整个磁盘作为LVM卷设备,而避免采用分区。因为分区操作失误可能会同时摧毁LVM卷数据,所以整个磁盘由一个LVM卷管理相对较为容易。同理,我在部署 Btrfs 或者 ZFS 这样的卷管理文件系统,也会采用完整磁盘来实施。

不过 私有云架构 是我模拟云计算的测试环境,硬件条件有限,所以采用一个分区来构建LVM卷

  • 创建分区:

parted创建nvme分区2作为LVM卷
sudo parted -a optimal /dev/nvme0n1 mkpart primary 500GB 800GB
sudo parted /dev/nvme0n1 name 2 lvm-data
sudo parted /dev/nvme0n1 set 2 lvm on
  • 完成后检查分区:

    sudo parted /dev/nvme0n1 print
    

可以看到分区2已经是LVM标记的分区:

nvme分区
Model: SAMSUNG MZVL21T0HCLR-00B00 (nvme)
Disk /dev/nvme0n1: 1024GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name      Flags
 1      1049kB  500GB  500GB               primary
 2      500GB   800GB  300GB               lvm-data  lvm

LVM物理卷

使用 pvcreate 可以创建 LVM 物理卷(PV),并且支持使用空格分隔的多个设备,例如:

pvcreate /dev/vdb1 /dev/vdb2

上述命令在设备上加上标签,将其标记为属于 LVM 的物理卷

  • 在分区2上创建LVM物理卷PV:

pvcreate创建PV
sudo pvcreate /dev/nvme0n1p2

此时提示:

Physical volume "/dev/nvme0n1p2" successfully created.

LVM卷组

使用 vgcreate 可以创建 LVM 卷组(VG),多个设备使用空格分隔,可以在一个卷组包含多个PV物理卷,例如:

vgcreate myvg /dev/vdb1 /dev/vdb2

上述命令创建一个名为 myvg 的卷组,而 /dev/vdb1/dev/vdb2 是这个卷组的物理卷

  • 在分区2上创建LVM的卷组VG:

vgcreate创建VG
sudo vgcreate vg-data /dev/nvme0n1p2

此时提示:

Volume group "vg-data" successfully created
  • 检查VG:

    sudo vgdisplay vg-data
    

输出:

vgdisplay检查VG
  --- Volume group ---
  VG Name               vg-data
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               279.39 GiB
  PE Size               4.00 MiB
  Total PE              71525
  Alloc PE / Size       0 / 0
  Free  PE / Size       71525 / 279.39 GiB
  VG UUID               pDAS5T-jjd4-JPaD-3O1b-hMrX-CdWF-UTNTXc

如果今后要扩展卷组,可以使用 vgextend 命令,例如添加分区3:

vgextend vg-data /dev/nvme0n1p3

LVM逻辑卷

lvcreate创建LVM卷
sudo lvcreate -n lv-etcd -L 8G vg-data
  • 检查LV:

    sudo lvdisplay vg-data/lv-etcd
    

显示输出:

lvdisplay检查LVM
  --- Logical volume ---
  LV Path                /dev/vg-data/lv-etcd
  LV Name                lv-etcd
  VG Name                vg-data
  LV UUID                MVuffR-RycZ-IWoK-JsAR-wuQc-c8fF-0a80Zm
  LV Write Access        read/write
  LV Creation host, time z-b-data-1, 2022-06-30 00:32:02 +0800
  LV Status              available
  # open                 0
  LV Size                8.00 GiB
  Current LE             2048
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

文件系统XFS

  • 在新构建的LVM卷上创建文件系统:

LVM卷上创建文件系统
sudo mkfs.xfs /dev/vg-data/lv-etcd
  • 创建 /etc/fstab 挂载条目:

在 /etc/fstab 中增加挂载LVM卷配置
echo "/dev/vg-data/lv-etcd    /var/lib/etcd    xfs    defaults    0 0" | sudo tee -a /etc/fstab
  • 然后创建挂载目录并挂载:

挂载LVM卷
mkdir /var/lib/etcd
mount /var/lib/etcd
  • 此时 df -h 检查可以看到LVM卷已经挂载:

    /dev/mapper/vg--data-lv--etcd  8.0G   90M  8.0G   2% /var/lib/etcd
    

现在我们已经初步完成了适合 私有云etcd服务 的存储,下一步我们可以开始部署 etcd - 分布式kv存储 服务

参考