
TRAVEL

时间很匆忙,别错过落日与夕阳
cinder 组件提供虚拟机的外挂存储服务,在商业云平台上也称为云盘。cinder 作为管理存储的工具,可以支持 LVM,NAS、SCSI、glusterfs,ceph,sleepdog 等众多存储方案。
相关组件:
Cinder 架构如图所示:
-
cinder-api:接收 clent 的 api 请求,包含卷的增删改查(包括对源卷、镜像、快照创建)、快照增删改查、备份、volume type 管理、挂载/卸载(Nova 调用)等。 -
cinder-scheduler:调度器,把来自客户端的磁盘请求分配给不同的 cinder-volume 处理。 -
cinder-volume:提供存储空间,接入不同的 backend 设备,如:NAS/SAN, NFS,Swift、Ceph 等。 -
cinder-backup:备份卷的数据到其他存储介质。
「以下步骤在controller node
上操作完成」
数据库创库授权
mysql -uroot -p
MariaDB [(none)]> CREATE DATABASE cinder;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost'
-> IDENTIFIED BY 'CINDER_DBPASS';
Query OK, 0 rows affected (0.07 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%'
-> IDENTIFIED BY 'CINDER_DBPASS';
Query OK, 0 rows affected (0.00 sec)
服务创建授权
controller node操作
-
创建 cinder
用户
[root@controller ~]#openstack user create --domain default --password CINDER_PASS cinder
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 6708f01a2e7a49a68c7bd8a320dc16cf |
| name | cinder |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
-
给 cinder 用户分配 admin
角色
[root@controller ~]# openstack service create --name cinderv2
> --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Block Storage |
| enabled | True |
| id | f7442072f12a4cc8b7776e651d1ca0b1 |
| name | cinderv2 |
| type | volumev2 |
+-------------+----------------------------------+
-
创建 cinderv2
andcinderv3
服务
[root@controller ~]# openstack service create --name cinderv3
> --description "OpenStack Block Storage" volumev3
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Block Storage |
| enabled | True |
| id | af07b95ca7e845a3a8eac17704d654c2 |
| name | cinderv3 |
| type | volumev3 |
+-------------+----------------------------------+
创建存储服务 API 端点
[root@controller ~]# openstack endpoint create --region RegionOne
> volumev2 public http://controller:8776/v2/%(project_id)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 6ec9d09cf9f14c80bfd37aefcc5ab406 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f7442072f12a4cc8b7776e651d1ca0b1 |
| service_name | cinderv2 |
| service_type | volumev2 |
| url | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne
> volumev2 internal http://controller:8776/v2/%(project_id)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | e3ae15c9d0d245a28a53ad39b892752a |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f7442072f12a4cc8b7776e651d1ca0b1 |
| service_name | cinderv2 |
| service_type | volumev2 |
| url | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne
> volumev2 admin http://controller:8776/v2/%(project_id)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | 1979e44bfb71497d8deae85ec348bfef |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f7442072f12a4cc8b7776e651d1ca0b1 |
| service_name | cinderv2 |
| service_type | volumev2 |
| url | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne
> volumev3 public http://controller:8776/v3/%(project_id)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | b13e33dab4b24105bd980d780a156c3b |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | af07b95ca7e845a3a8eac17704d654c2 |
| service_name | cinderv3 |
| service_type | volumev3 |
| url | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne
> volumev3 internal http://controller:8776/v3/%(project_id)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | a3a82a4f33de459f8ffd6fcd081a4c71 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | af07b95ca7e845a3a8eac17704d654c2 |
| service_name | cinderv3 |
| service_type | volumev3 |
| url | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne
> volumev3 admin http://controller:8776/v3/%(project_id)s
+--------------+------------------------------------------+
| Field | Value |
+--------------+------------------------------------------+
| enabled | True |
| id | cca0398717bf42bfb0a99b132937fe62 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | af07b95ca7e845a3a8eac17704d654c2 |
| service_name | cinderv3 |
| service_type | volumev3 |
| url | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
安装配置Cinder
安装包
[root@controller ~]# yum install -y openstack-cinder
[root@controller ~]# cd /etc/cinder/
[root@controller cinder]# ll
total 188
-rw-r----- 1 root cinder 2204 Oct 24 2019 api-paste.ini
-rw-r----- 1 root cinder 181390 Nov 19 2019 cinder.conf
-rw-r----- 1 root cinder 991 Oct 24 2019 rootwrap.conf
drwxr-xr-x 2 root root 30 Jan 19 16:41 rootwrap.d
drwxr-xr-x 2 cinder root 6 Nov 19 2019 volumes
[root@controller cinder]# grep -Ev "^$|^#" cinder.conf.bak > cinder.conf
编辑/etc/cinder/cinder.conf
配置文件
-
[DEFAULT]
段
auth_strategy = keystone
my_ip = 10.0.0.11
#Rabbit消息阵列
transport_url = rabbit://openstack:RABBIT_PASS@controller
-
[database]
段,配置数据库访问信息
[database]
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
-
[keystone_authtoken]
段
[keystone_authtoken]
auth_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_PASS
-
[oslo_concurrency]
段
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
同步cinder
数据库
su -s /bin/sh -c "cinder-manage db sync" cinder
验证查看
[root@controller cinder]# mysql cinder -e "show tables"
+----------------------------+
| Tables_in_cinder |
+----------------------------+
| attachment_specs |
| backup_metadata |
| backups |
| cgsnapshots |
| clusters |
| consistencygroups |
...
配置nova
调用cinder
编辑 /etc/nova/nova.conf
配置文件
[cinder]
os_region_name = RegionOne
重启nova-api
服务
systemctl restart openstack-nova-api.service
启动 cinder 服务
systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
❝
cinder-api 服务端口:tcp 8776
❞
「以下步骤在compute1
节点完成」
配置存储节点
存储基本知识
在配置存储节点前,我们先熟悉下存储的基本知识。
OpenStack中的存储分为2类:
-
「临时存储」
如果 OpenStack 没有提供外挂存储,而仅仅部署了 nova 服务,则虚拟机的磁盘是临时的。当虚拟机终止后,存放空间也将会释放。
默认情况下,临时存储存储文件放置在计算节点的本地磁盘上。
-
「永久存储」
外挂存储设备,也称为持久性存储设备上存储的数据将一直可用,在虚拟机被停止或被删除后,数据依旧存在。
目前OpenStack支持三种类型的持久存储:块存储、对象存储和文件系统存储。
-
「块存储:」
如 DAS 和 SAN,提供给虚拟机的是磁盘文件,需要格式化、挂载才能使用;
-
「文件存储:」
如 NAS 系统,提供给虚拟机的是目录,可以直接存取文件。
-
「对象存储:」
对象存储-Object-based Storage,适合静态数据的存储,如虚拟机镜像、图片存储、邮件存储和存档备份。swift 是 OpenStack 开源云计算项目的子项目之一现在很多云厂商,也直接称之为“云存储”。不同的云厂商对它有不同的英文缩写命名。例如阿里云把自家的对象存储服务叫做 OSS,华为云叫 OBS,腾讯云叫 COS,七牛叫 Kodo 等等,反正都是一种技术。
常见的开源对象存储系统,如 glusterfs、ceph、swift 等。文件存储的最大特点,就是所有存储资源都是通过 URL 方式进行访问的。
如腾讯云 cos,访问 url 类似这种方式:http://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/folder/picture.jpg
搭建 LVM 存储环境
作为初学者,我们主要的学习目标是先弄懂什么是后端存储、后端存储的种类,OpenStack 与后端存储对接的思路等。
那么我们就按照官方文档,用 2 块磁盘实现简单的LVM
卷组作为后端存储系统(实际环境中不可能用 LVM)。以后的学习中,可以用同样的思路对接 NFS、swift、ceph 等存储系统。
添加磁盘并激活
1.虚拟机热添加 2 块磁盘(不关机添加磁盘)

2.服务器不重新启动的情况下激活新硬盘
#使用lsblk查看当前系统内已激活的磁盘,也可以使用fdisk -l命令
[root@compute1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part
├─centos-root 253:0 0 37G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 942M 0 rom
#通过lsblk看到当前系统内只有一块磁盘,新添加的磁盘没有被发现
#确定主机总线号
[root@compute1 ~]# ls /sys/class/scsi_host/
host0 host1 host2
#重新扫描SCSI总线来添加设备
[root@compute1 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@compute1 ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
[root@compute1 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
#使用fdisk -l查看系统内的当前的磁盘
[root@compute1 ~]# fdisk -l |grep '/dev/'
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 83886079 40893440 8e Linux LVM
Disk /dev/mapper/centos-root: 39.7 GB, 39720058880 bytes, 77578240 sectors
Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
#/dev/sdb、/dev/sdc两块磁盘已被识别
安装 lvm 相关包
#如果OpenStack yum源忘了更换为aliyun,安装将会出现问题
#更换yum源
[root@compute1 ~]#cd /etc/yum.repo.d/
[root@compute1 yum.repo.d]#sed -i 's/mirror.centos.org/mirrors.aliyun.com/g' ./*.repo
[root@compute1 yum.repo.d]# yum clean all
[root@compute1 yum.repo.d]# yum makecache
[root@compute1 yum.repo.d]#yum install lvm2 device-mapper-persistent-data
创建 LVM 卷组
[root@compute1 ~]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created
[root@compute1 ~]#
[root@compute1 ~]# vgcreate cinder-volumes /dev/sdb /dev/sdc
Volume group "cinder-volumes" successfully created
#vgs查看生成的VG卷组
[root@compute1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
cinder-volumes 2 0 0 wz--n- 19.99g 19.99g
#cinder-volumes已存在
设置 LVM 卷组的安全性,仅允许虚拟机实例才能访问
编辑**/etc/lvm/lvm.conf**配置文件,
[root@compute1 ~]# cd /etc/lvm/
[root@compute1 lvm]# vim lvm.conf
#在devices段,添加如下:
devices {
#...其他内容保留
filter = [ "a/sdb/","a/sdc/", "r/.*/"]
❝
a,表示 accept,接受;r,表示 reject,拒绝。
❞
安装配置 cinder 组件
安装 cinder 软件包
[root@compute1 ~]#yum install openstack-cinder targetcli python-keystone
-
编辑** /etc/cinder/cinder.conf
**配置文件
[root@compute1 ~]# cd /etc/cinder/
[root@compute1 cinder]# ll
total 188
-rw-r----- 1 root cinder 2204 Oct 24 2019 api-paste.ini
-rw-r----- 1 root cinder 181390 Nov 19 2019 cinder.conf
-rw-r----- 1 root cinder 991 Oct 24 2019 rootwrap.conf
drwxr-xr-x 2 root root 30 Jan 19 22:48 rootwrap.d
drwxr-xr-x 2 cinder root 6 Nov 19 2019 volumes
[root@compute1 cinder]# cp -a cinder.conf cinder.conf.bak
[root@compute1 cinder]# grep -Ev '^$|^#' cinder.conf.bak > cinder.conf
[root@compute1 cinder]# vim cinder.conf
-
[DEFAULT]
段
auth_strategy = keystone
enabled_backends = lvm
glance_api_servers = http://controller:9292
my_ip = 10.0.0.31
#rabbit消息阵列访问信息
transport_url = rabbit://openstack:RABBIT_PASS@controller
-
[database]
段
[database]
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
-
[keystone_authtoken]
段
[keystone_authtoken]
auth_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_PASS
-
新创建 [lvm]
段,默认不存在
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm
-
[oslo_concurrency]
段
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
启动 cinder 服务
「启动服务」
systemctl enable openstack-cinder-volume.service target.service
systemctl start openstack-cinder-volume.service target.service
「检查下服务状态」
systemctl status openstack-cinder-volume.service target.service
基本配置到此结束,后续的验证工作在实例创建阶段。Good Lucky!


扫描二维码获取
更多精彩

带米的笨老头
往期推荐
原文始发于微信公众号(带米的笨老头):
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/20788.html