OpenStack添加新硬盘到LVM逻辑卷组

参考:

  1. Cinder LVM配置
    https://www.cnblogs.com/sammyliu/p/4159147.html
  2. Configure and use volume number weigher
    https://docs.openstack.org/cinder/queens/admin/blockstorage-volume-number-weigher.html

一、知识:

cinder lvm配置(/etc/cinder/cinder.conf)

1
2
3
4
[lvmdriver-1]
volume_group = stack-volumes-lvmdriver-1
volume_driver = cinder.volume.drivers.lvm.LVMISCSIDriver
volume_backend_name = lvmdriver-1
  1. volume_group:指定cinder使用的volume group。可以通过vgs查看
  2. volume_driver: 指定驱动类型
  3. volume_backend_name:指定backend name。当有多个volume backend时,需要创建volume type,它会绑定一个或者多个backend。用户在创建volume时需要选择某个volume type,相当于选择了某个volume backend。要这个参数的原因是因为一个openstack环境中可能有多个 cinder-volume 存储节点,此时就有多个 volume backend,此时就需要给每个backend 一个 name 来区分。
  4. 只有一个backend的时候,除了配置volume group外,不需要添加别的配置信息,创建volume的时候不需要选择volume type
  5. 当有多个backend的时候,需要使用volume-type来将volume创建到指定的backend中
  6. 一个volume-type可以有多个backend,the capacity scheduler会自动选择合适的backend来创建volume
  7. 如果定义了volume type,但在cinder.conf中没有定义volume backend,那么cinder scheduler将找不到有效的host来创建volume

二、操作:

2.1 将新的硬盘直接扩展到已有卷组

  1. 查看系统磁盘分区情况(lsblk)

lsblk

  1. 创建分区(/dev/sdb)
1
2
3
4
5
6
7
8
9
fdisk /dev/sdb
Command (m for help): n
Select (default p): p
Partition number (1-4, default 1): Enter
First sector (2048-4294967295, default 2048): Enter
Last sector, +sectors or +size{K,M,G} (2048-4294967294, default 4294967294): Enter
Command (m for help): t
Hex code (type L to list all codes): 8e
Command (m for help): w

创建分区

  1. 将物理硬盘分区/dev/sdb1初始化为物理卷(PV)
1
pvcreate /dev/sdb1

pvcreate /dev/sdb1

报错:需修改/etc/cinder/cinder.conf如下,然后从新执行pvcreate /dev/sdb1

vim /etc/cinder/cinder.conf

过滤规则: (a)|sdb1| : 允许sdb1设备;(r)|.*| : 禁止dir=/dev下的所有设备

  1. 查看当前卷组(VG)
1
vgs

vgs

  1. 将/dev/sdb1添加到VG(stack-volumes-lvmdriver-1)
1
vgextend stack-volumes-lvmdriver-1 /dev/sdb1

vgs查看VG(stack-volumes-lvmdriver-1)的大小增加了20G

vgs

注意: 如果立即创建逻辑卷的话,可能会失败,需要稍等半分钟,待cinder-scheduler检测到卷组(stack-volumes-lvmdriver-1)发生变化。

  1. 如果想从VG(stack-volumes-lvmdriver-1)中移除/dev/sdb1设备,以缩小VG的大小
    6.1 先把要缩小的PV文件搬到其他PV中

    1
    2
    3
    pvmove /dev/sdb1 /dev/loop1 (将/dev/sdb1的内容搬到 /dev/loop1)
    或者
    pvmove /dev/sdb1 (让lvm决定/dev/sdb1的内容搬到哪个设备下)

    6.2 把vg中的pv(/dev/sdb1)移除

    1
    vgreduce vg_name /dev/sdb1

2.2 创建新的LVM backend,新的卷组

说明:

1
2
3
4
创建的卷组(VG): stack-volumes-extend-1
volume driver: cinder.volume.drivers.lvm.LVMVolumeDriver
backend name: lvmdriver-2
volume type: lvmdriver-2

1-4步骤,同上

  1. 创建新卷组(stack-volumes-extend-1)
1
vgcreate stack-volumes-extend-1 /dev/sdb1

vgcreate stack-volumes-extend-1 /dev/sdb1

  1. 激活卷组,这样可以不需要重启系统就可以立即使用
1
vgchange -ay stack-volumes-extend-1

vgchange -ay stack-volumes-extend-1

  1. 创建volume type
1
openstack volume type create lvmdriver-2

openstack volume type create lvmdriver-2

报错:没有指定用户

1
2
source /home/devstack/openrc admin admin
openstack volume type create lvmdriver-2

openstack volume type create lvmdriver-2

  1. 查看volume type
1
openstack volume type list

openstack volume type list

  1. volume type 和 volume_backend_name绑定
1
openstack volume type set lvmdriver-2 --property volume_backend_name=lvmdriver-2

10.修改/etc/cinder/cinder.conf文件

1
2
3
4
5
6
7
[DEFAULT]
enabled_backends = lvmdriver-1,lvmdriver-2

[lvmdriver-2]
volume_group = stack-volumes-extend-1
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name = lvmdriver-2
  1. 重启cinder-scheduler和cinder-volume服务

重启服务

11.1 杀死进程

1
kill -9 13068 13078 13088 13090

11.2 启动cinder-scheduler服务

1
/usr/local/bin/cinder-scheduler --config-file /etc/cinder/cinder.conf &> /opt/stack/logs/cinder-scheduler.log &

11.3 启动cinder-volume服务

1
2
 /usr/local/bin/cinder-volume --config-file /etc/cinder/cinder.conf &> /opt/stack/logs/cinder-volume.log &
 ```