OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder

OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder

TRAVEL

OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder

时间很匆忙,别错过落日与夕阳


cinder 组件提供虚拟机的外挂存储服务,在商业云平台上也称为云盘。cinder 作为管理存储的工具,可以支持 LVM,NAS、SCSI、glusterfs,ceph,sleepdog 等众多存储方案。

相关组件:

Cinder 架构如图所示:

OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder

  • cinder-api:接收 clent 的 api 请求,包含卷的增删改查(包括对源卷、镜像、快照创建)、快照增删改查、备份、volume type 管理、挂载/卸载(Nova 调用)等。
  • cinder-scheduler:调度器,把来自客户端的磁盘请求分配给不同的 cinder-volume 处理。
  • cinder-volume:提供存储空间,接入不同的 backend 设备,如:NAS/SAN, NFS,Swift、Ceph 等。
  • cinder-backup:备份卷的数据到其他存储介质。

OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder

「以下步骤在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 and cinderv3 服务
[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 块磁盘(不关机添加磁盘)

OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder
image-20220119205256988

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!


OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder


OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder

扫描二维码获取

更多精彩

OpenStack Queen 版的安装与配置(七)| 核心组件:Cinder

带米的笨老头



往期推荐




原文始发于微信公众号(带米的笨老头):

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/20788.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!