块存储服务 Cinder 介绍

OpenStack 块存储服务包含以下组件:

  • cinder-api 服务
  • cinder-volume 服务
  • cinder-scheduler 守护进程
  • cinder-backup 守护进程
  • 队列服务

安装块存储服务 Cinder

安装于控制节点

配置数据库

$ mysql -u root -p

新建数据库 cinder

MariaDB [(none)]> create database cinder;

赋予 cinder 用户权限并设置 CINDER_DBPASSWORD

MariaDB [(none)]> grant all privileges on cinder.* to 'cinder'@'localhost' identified by 'CINDER_DBPASSWORD';
MariaDB [(none)]> grant all privileges on cinder.* to 'cinder'@'%' identified by 'CINDER_DBPASSWORD';

新建服务证书及 API Endpoints

导入 admin 环境变量:

$ . admin-openrc

新建 cinder 用户并设置密码 CINDER_PASSWORD

$ openstack user create --domain default --password-prompt cinder

admin 角色加入 cinder 用户中:

$ openstack role add --project service --user cinder admin

生成 cinderv2cinderv3 服务入口点:

$ openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
$ openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3

块存储服务需要两个服务入口。

生成块存储服务 API Endpoints

$ openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
$ openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s
$ openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s

$ openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
$ openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
$ openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s

安装配置组件

安装组件包:

# yum install openstack-cinder

编辑 /etc/cinder/cinder.conf 文件:

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASSWORD@controller
auth_strategy = keystone
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASSWORD@controller/cinder

[keystone_authtoken]
# ...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASSWORD

[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp

RABBIT_PASSWORDCINDER_DBPASSWORDCINER_PASSWORD 替换成自己的密码;
MANAGEMENT_INTERFACE_IP_ADDRESS 更改为控制节点在管理网络内的 IP

同步数据库

填充 cinder 数据库:

# su -s /bin/sh -c "cinder-manage db sync" cinder

配置计算服务的块存储项

编辑 /etc/nova/nova.conf 配置文件:

[cinder]
os_region_name = RegionOne

启动块存储服务

重启计算服务:

# systemctl restart openstack-nova-api

启动块存储服务:

# systemctl enable openstack-cinder-api openstack-cinder-scheduler
# systemctl start openstack-cinder-api openstack-cinder-scheduler

安装于存储节点

块存储服务使用 LVM 建立逻辑卷并通过 iSCSI 提供给实例。

安装支持组件

安装 LVM

# yum install lvm2

启动 LVM 服务:

# systemctl enable lvm2-lvmetad
# systemctl start lvm2-lvmetad

新建卷组

调整磁盘的方法请参考这篇文章。

假设我们调整了磁盘之后,/dev/sdb3 是留给 OpenStack 块存储服务的分区。

/dev/sdb3 上创建物理卷:

# pvcreate /dev/sdb3

创建包含 /dev/sdb3 物理卷的 cinder-volumes 卷组:

# vgcreate cinder-volumes /dev/sdb3

编辑 /etc/lvm/lvm.conf 配置文件:

devices {
  ...
  filter = ["a/sdb1/", "a/sdb2/", "a/sdb3/", "r/.*/"]
}

如果存储节点的操作系统也使用了 LVM 技术,则必须将操作系统的分区加入过滤器 filter 中(该例中 sdb1sdb2 为操作系统所用分区)。

安装配置组件

安装组件包:

# yum install openstack-cinder targetcli python-keystone

编辑 /etc/cinder/cinder.conf 配置文件:

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASSWORD@controller
auth_strategy = keystone
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
enabled_backends = lvm
glance_api_servers = http://controller:9292

[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASSWORD@controller/cinder

[keystone_authtoken]
# ...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASSWORD

[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp

[lvm]
# ...
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm

RABBIT_PASSWORDCINDER_DBPASSWORDCINER_PASSWORD 替换成自己的密码;
MANAGEMENT_INTERFACE_IP_ADDRESS 更改为存储节点在管理网络内的 IP

启动块存储服务

# systemctl enable openstack-cinder-volume target
# systemctl start openstack-cinder-volume target

安装验证

导入 admin 环境变量:

$ . admin-openrc

查看卷存储服务:

$ openstack volume service list

cinder-schedulercinder-volume 服务成功启动,则证明块存储服务部署成功。

服务测试

导入 demo 环境变量:

$ . demo-openrc

创建一个 20 GB 的逻辑卷 volume1

$ openstack volume create --size 20 volume1

查看逻辑卷:

$ openstack volume list

将逻辑卷挂载到实例上:

$ openstack server add volume INSTANCE_NAME VOLUME_NAME

查看逻辑卷:

$ openstack volume list

应该能够看到该逻辑卷已被挂载。

登入实例查看挂载情况:

# fdisk -l

这一步在实例中操作。若有额外的存储设备(如 /dev/vdb )则逻辑卷挂载成功。

在存储节点使用 vgdisplay 查看 cinder-volumes 卷组下逻辑卷分配情况:

# vgdisplay cinder-volumes -v

应该存在一个逻辑卷 /dev/cinder-volumes/volume-***

总结

主要是配卷组的时候需要重新给硬盘分配空间比较麻烦,其他的跟着 Install Guide 走都没什么问题。但还是要切记做硬盘操作时一定要备份!备份!备份!因为没备份结果重装了计算节点的 nova 🙁

    分享到:
分类: Cloud Computing

发表评论

电子邮件地址不会被公开。 必填项已用*标注

验证码 *