3.10 存储节点部署Cinder

摘要
本节主要介绍在 OpenStack 存储节点上部署和配置 Cinder(块存储卷服务) 的完整过程。受限于实验设备的资源,我们将把计算节点兼作存储节点使用。在此节点上,我们会为其添加一块额外的硬盘并配置 LVM(逻辑卷管理),然后部署 Cinder 的卷服务(cinder-volume),使其能够为虚拟机提供块存储支持。

为了让 Cinder 能够使用本地磁盘作为存储池提供给虚拟机使用,我们需要先在节点上配置逻辑卷管理器(LVM)。

1)安装 LVM 相关软件包:

bash

yum install lvm2 device-mapper-persistent-data -y

2)开启 LVM 的元数据服务,并将其配置为随系统自动启动:

bash

systemctl start lvm2-lvmetad.service
systemctl enable lvm2-lvmetad.service

3)在进行实验前,请确保你已经为该节点(compute 节点)添加了一块新的空闲硬盘,这里假设新硬盘为 /dev/sdb。我们将使用这块硬盘创建物理卷(PV):

bash

pvcreate /dev/sdb

4)创建一个名为 cinder-volumes 的 LVM 卷组(VG)。Cinder 的块存储服务后续将在这个卷组中为虚拟机创建逻辑卷:

bash

vgcreate cinder-volumes /dev/sdb

5)配置 LVM 过滤器。默认情况下,LVM 扫描工具会扫描所有包含了卷的块存储设备。为了避免项目卷和宿主机的操作系统卷发生冲突或混淆,我们需要重新配置 LVM,让其仅扫描包含系统盘和 cinder-volumes 卷组的设备,拒绝扫描其他设备。

编辑 /etc/lvm/lvm.conf 文件,找到 devices 部分,添加一个过滤器。这里假设计算节点的系统盘为 /dev/sda,数据盘为 /dev/sdb

ini

devices {
# ... 其他配置保持不变 ...
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
}
过滤器语法说明

过滤器列表中的元素规则如下:

  • a 开头代表 accept(接受),例如 "a/sda/" 表示接受 /dev/sda
  • r 开头代表 reject(拒绝)
  • 列表必须以 "r/.*/" 结尾,用来拒绝所有未被明确接受的其他块设备。

在底层存储(LVM)准备就绪后,我们开始安装并配置 Cinder 卷服务。

1)安装 Cinder 及相关的软件包:

bash

yum install openstack-cinder targetcli python-keystone -y

2)编辑 /etc/cinder/cinder.conf 主配置文件。

修改或添加以下内容:

ini

# 配置数据库连接
[database]
connection = mysql+pymysql://cinder:cinder@controller/cinder

# 配置 RabbitMQ 消息队列访问和身份认证策略
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
auth_strategy = keystone
# 配置存储节点的管理 IP 地址(此处为 compute 节点的 IP)
my_ip = 192.168.16.200
# 启用 lvm 后端配置
enabled_backends = lvm
# 配置镜像服务(Glance)的 API 访问地址
glance_api_servers = http://controller:9292

# 配置身份服务访问的具体凭据
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder

# 配置并发锁定路径
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp

# 为 LVM 后端配置驱动程序、卷组和 iSCSI 协议(如果该[lvm]部分不存在请自行创建)
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm
IP地址及卷组名称
  1. my_ip = 192.168.16.200 需要修改为你自己**计算节点(兼存储节点)**的实际管理 IP 地址。
  2. [lvm] 块中的 volume_group 名称必须与第一步中通过 vgcreate 命令创建的卷组名称(cinder-volumes)完全一致。

启用块存储卷服务及其依赖的底层存储组件(target 服务),并设置为开机自启动:

bash

systemctl start openstack-cinder-volume.service target.service
systemctl enable openstack-cinder-volume.service target.service

所有节点部署完成后,我们需要到**控制节点(Controller)**上查询卷服务的注册状态,以确定 Cinder 整体是否部署成功。

节点切换提示
以下命令需要在**控制节点(Controller)**上执行。

1)执行环境变量脚本,获取 admin 权限:

bash

source ./admin-openstack.sh

2)查看卷服务列表,确认每个进程是否加载成功:

bash

openstack volume service list
验证成功标准
如果你在输出的列表中看到了运行在 controller 上的 cinder-scheduler 和运行在 compute@lvm(计算/存储节点)上的 cinder-volume 两个服务,且它们的 StatusenabledStateup,则说明 Cinder 部署彻底成功!