参考:
- Cinder LVM配置
https://www.cnblogs.com/sammyliu/p/4159147.html - 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 |
- volume_group:指定cinder使用的volume group。可以通过vgs查看
- volume_driver: 指定驱动类型
- volume_backend_name:指定backend name。当有多个volume backend时,需要创建volume type,它会绑定一个或者多个backend。用户在创建volume时需要选择某个volume type,相当于选择了某个volume backend。要这个参数的原因是因为一个openstack环境中可能有多个 cinder-volume 存储节点,此时就有多个 volume backend,此时就需要给每个backend 一个 name 来区分。
- 只有一个backend的时候,除了配置volume group外,不需要添加别的配置信息,创建volume的时候不需要选择volume type
- 当有多个backend的时候,需要使用volume-type来将volume创建到指定的backend中
- 一个volume-type可以有多个backend,the capacity scheduler会自动选择合适的backend来创建volume
- 如果定义了volume type,但在cinder.conf中没有定义volume backend,那么cinder scheduler将找不到有效的host来创建volume
二、操作:
2.1 将新的硬盘直接扩展到已有卷组
- 查看系统磁盘分区情况(lsblk)
lsblk
- 创建分区(/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 |
创建分区
- 将物理硬盘分区/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下的所有设备
- 查看当前卷组(VG)
1 | vgs |
vgs
- 将/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)发生变化。
- 如果想从VG(stack-volumes-lvmdriver-1)中移除/dev/sdb1设备,以缩小VG的大小
6.1 先把要缩小的PV文件搬到其他PV中1
2
3pvmove /dev/sdb1 /dev/loop1 (将/dev/sdb1的内容搬到 /dev/loop1)
或者
pvmove /dev/sdb1 (让lvm决定/dev/sdb1的内容搬到哪个设备下)6.2 把vg中的pv(/dev/sdb1)移除
1vgreduce 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步骤,同上
- 创建新卷组(stack-volumes-extend-1)
1 | vgcreate stack-volumes-extend-1 /dev/sdb1 |
vgcreate stack-volumes-extend-1 /dev/sdb1
- 激活卷组,这样可以不需要重启系统就可以立即使用
1 | vgchange -ay stack-volumes-extend-1 |
vgchange -ay stack-volumes-extend-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
- 查看volume type
1 | openstack volume type list |
openstack volume type list
- 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 |
- 重启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 & ``` |