OpenStack搭建之块存储服务cinder(八)-可选

文章
林里克斯

Linux下搭建OpenStack之存储服务cinder

一、实验平台:CentOS Linux release 7.3.1611 (Core)

二、openstack版本:Mitake

三、本机所有IP:内网:192.168.1.2 192.168.1.3

外网:192.168.2.4 192.168.2.5

四、openstack1:192.168.1.2 #控制节点 1 处理器, 4 GB 内存, 及20 GB 存储

五、openstack2:192.168.1.3 #计算节点 1 处理器, 2 GB 内存, 及20 GB 存储

六、openstack2:192.168.1.4 #存储节点 1 处理器, 2 GB 内存, 及20 GB 存储 及10 GB 存储

OpenStack搭建之块存储服务cinder(八)-可选



一、块存储服务概览

块存储服务(cinder)为实例提供块存储。存储的分配和消耗是由块存储驱动器,或者多后端配置的驱动器决定的。还有很多驱动程序可用:NAS/SANNFSISCSICeph等。

典型情况下,块服务API和调度器服务运行在控制节点上。取决于使用的驱动,卷服务器可以运行在控制节点、计算节点或单独的存储节点。

OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷。此服务也会激活管理卷的快照和卷类型的功能。

块存储服务通常包含下列组件:

cinder-api

接受API请求,并将其路由到cinder-volume执行。

cinder-volume

块存储服务和例如cinder-scheduler的进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。cinder-volume服务响应送到块存储服务的读写请求来维持状态。它也可以和多种存储提供者在驱动架构下进行交互。

cinder-scheduler守护进程

选择最优存储提供节点来创建卷。其与nova-scheduler组件类似。

cinder-backup守护进程

cinder-backup服务提供任何种类备份卷到一个备份存储提供者。就像cinder-volume服务,它与多种存储提供者在驱动架构下进行交互。

消息队列

在块存储的进程之间路由信息。


二、安装并配置控制节点

这个部分描述如何在控制节点上安装和配置块设备存储服务,即cinder。这个服务需要至少一个额外的存储节点,以向实例提供卷。

创建cinder数据库:

$ mysql -u root -p CREATE DATABASE cinder;

允许cinder数据库合适的访问权限:

> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'cinder';
> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder';

获得admin凭证来获取只有管理员能执行的命令的访问权限:

$ . admin-openstack.sh

要创建服务证书,完成这些步骤:

创建一个cinder用户:

$ openstack user create --domain default --password-prompt cinder
User Password:              #设置密码,我设置为cinder
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 563963f57f154b628814c4e1bc9d2169 |
| enabled   | True                             |
| id        | cff192988057486ab2b8157f79559a83 |
| name      | cinder                           |
+-----------+----------------------------------+

添加admin角色到cinder用户上。 openstack role add --project service --user cinder admin 创建cindercinderv2服务实体:

$ openstack service create --name cinder --description "OpenStack Block Storage" volume
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 05be1947137d43b6a5e5f8a7e198a21c |
| name        | cinder                           |
| type        | volume                           |
+-------------+----------------------------------+

openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 577f2447fac24edd824e59b8b715f772 |
| name        | cinderv2                         |
| type        | volumev2                         |
+-------------+----------------------------------+

创建块设备存储服务的API入口点:

$ openstack endpoint create --region RegionOne volume public http://192.168.1.2:8776/v1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 46f2ba76ef7c41f798be72f3fd1665ee         |
| interface    | public                                   |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 05be1947137d43b6a5e5f8a7e198a21c         |
| service_name | cinder                                   |
| service_type | volume                                   |
| url          | http://192.168.1.2:8776/v1/%(tenant_id)s |
+--------------+------------------------------------------+

$ openstack endpoint create --region RegionOne volume internal http://192.168.1.2:8776/v1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 72a9422c024243bf9c67928f40db6693         |
| interface    | internal                                 |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 05be1947137d43b6a5e5f8a7e198a21c         |
| service_name | cinder                                   |
| service_type | volume                                   |
| url          | http://192.168.1.2:8776/v1/%(tenant_id)s |
+--------------+------------------------------------------+

$ openstack endpoint create --region RegionOne volume admin http://192.168.1.2:8776/v1/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | fda53e2eaeca48409fcbab8f7bb3f824         |
| interface    | admin                                    |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 05be1947137d43b6a5e5f8a7e198a21c         |
| service_name | cinder                                   |
| service_type | volume                                   |
| url          | http://192.168.1.2:8776/v1/%(tenant_id)s |
+--------------+------------------------------------------+

$ openstack endpoint create --region RegionOne volumev2 public http://192.168.1.2:8776/v2/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 5dc815d40f8f480facf4a2b169aadbe8         |
| interface    | public                                   |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 577f2447fac24edd824e59b8b715f772         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://192.168.1.2:8776/v2/%(tenant_id)s |
+--------------+------------------------------------------+

$ openstack endpoint create --region RegionOne volumev2 internal http://192.168.1.2:8776/v2/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 0d458a0174e649938ee6445ae7b1b582         |
| interface    | internal                                 |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 577f2447fac24edd824e59b8b715f772         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://192.168.1.2:8776/v2/%(tenant_id)s |
+--------------+------------------------------------------+

$ openstack endpoint create --region RegionOne volumev2 admin http://192.168.1.2:8776/v2/%\(tenant_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 620b773b9e894217b28813ac10dab2ef         |
| interface    | admin                                    |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 577f2447fac24edd824e59b8b715f772         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://192.168.1.2:8776/v2/%(tenant_id)s |
+--------------+------------------------------------------+

安装软件包:

$ yum -y install openstack-cinder

编辑/etc/cinder/cinder.conf

$ vim /etc/cinder/cinder.conf

[database]
connection = mysql+pymysql://cinder:cinder@192.168.1.2/cinder       #配置数据库访问

[DEFAULT] 
rpc_backend = rabbit        #配置RabbitMQ消息队列访问
auth_strategy = keystone    #配置认证服务访问

[oslo_messaging_rabbit]     #配置RabbitMQ消息队列访问
rabbit_host = 192.168.1.2
rabbit_userid = openstack
rabbit_password = openstack

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

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

初始化块设备服务的数据库:

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

检查是否有表结构

$ mysql -h 192.168.1.2 -ucinder -pcinder -e "use cinder;show tables;"
+----------------------------+
| Tables_in_cinder           |
+----------------------------+
| backups                    |
| cgsnapshots                |
| consistencygroups          |
| driver_initiator_data      |
| encryption                 |
| image_volume_cache_entries |
| iscsi_targets              |
| migrate_version            |
| quality_of_service_specs   |
| quota_classes              |
| quota_usages               |
| quotas                     |
| reservations               |
| services                   |
| snapshot_metadata          |
| snapshots                  |
| transfers                  |
| volume_admin_metadata      |
| volume_attachment          |
| volume_glance_metadata     |
| volume_metadata            |
| volume_type_extra_specs    |
| volume_type_projects       |
| volume_types               |
| volumes                    |
+----------------------------+

三、配置计算节点以使用块设备存储


编辑文件nova.conf

$ vim /etc/nova/nova.conf

[cinder]
os_region_name = RegionOne

重启计算API服务:

$ systemctl restart openstack-nova-api.service

启动块设备存储服务,并将其配置为开机自启:

$ systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
$ systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

四、安装并配置一个存储节点


在存储节点上配置

这个部分描述怎样为块存储服务安装并配置存储节点。为简单起见,这里配置一个有一个空的本地块存储设备的存储节点。这个向导用的是/dev/sdb,但是你可以为你特定的节点中替换成不同的值。

在你安装和配置块存储服务之前,你必须准备好存储设备。

我们是用虚拟机做的实验,添加一块磁盘即可。我这里添加了一块10GB的磁盘

OpenStack搭建之块存储服务cinder(八)-可选

添加硬盘后需重启计算机,若你没有设置一些服务开机自启。使用下面的方法,不用开机重启,识别到硬盘。

$ echo "- - -" > /sys/class/scsi_host/host0/scan #重新扫描SCSI总线来添加设备

安装支持的工具包:

安装LVM包:

$ yum -y install lvm2
#一些发行版默认包含了LVM。

启动LVMmetadata服务并且设置该服务随系统启动:

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

创建LVM物理卷/dev/sdb

$ pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created.

创建LVM卷组cinder-volumes

$ vgcreate cinder-volumes /dev/sdb Volume group "cinder-volumes" successfully created

安装Openstack仓库

$ yum install -y centos-release-openstack-mitaka
#安装完成后会在/etc/yum.repos.d/下生成CentOS-OpenStack-mitaka.repo

安装软件包:

$ yum install openstack-cinder targetcli python-keystone

只有实例可以访问块存储卷组。不过,底层的操作系统管理这些设备并将其与卷关联。默认情况下,LVM卷扫描工具会扫描/dev目录,查找包含卷的块存储设备。如果项目在他们的卷上使用LVM,扫描工具检测到这些卷时会尝试缓存它们,可能会在底层操作系统和项目卷上产生各种问题。
您必须重新配置LVM,让它只扫描包含cinder-volume卷组的设备。

编辑lvm.conf

$ vim /etc/lvm/lvm.conf

devices {
filter = [ "a/sdb/", "r/.*/"]
filter = [ "a/sda/", "a/sdb/", "r/.*/"]     #如果您的存储节点在操作系统磁盘上使用了 LVM,您还必需添加相关的设备到过滤器中。例如,如果 /dev/sda 设备包含操作系统
filter = [ "a/sda/", "r/.*/"]               #类似地,如果您的计算节点在操作系统磁盘上使用了 LVM,您也必需修改这些节点上/etc/lvm/lvm.conf 文件中的过滤器,将操作系统磁盘包含到过滤器中。例如,如果/dev/sda设备包含操作系统

安装软件包:

$ yum -y install openstack-cinder targetcli python-keystone

编辑cinder.conf

$ vim /etc/cinder/cinder.conf

[lvm]           #配置LVM后端以LVM驱动结束
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm

[DEFAULT]
enabled_backends = lvm          #启用 LVM 后端
glance_api_servers = http://192.168.1.2:9292    #配置镜像服务 API 的位置

五、验证操作


在控制节点上执行这些命令

获得admin凭证来获取只有管理员能执行的命令的访问权限 . admin-openstack.sh 列出服务组件以验证是否每个进程都成功启动:

$ cinder service-list
+------------------+----------------+------+---------+-------+----------------------------+-----------------+
|      Binary      |      Host      | Zone |  Status | State |         Updated_at         | Disabled Reason |
+------------------+----------------+------+---------+-------+----------------------------+-----------------+
| cinder-scheduler |   openstack1   | nova | enabled |  down | 2017-07-20T01:24:11.000000 |        -        |
|  cinder-volume   | openstack1@lvm | nova | enabled |  down | 2017-07-20T01:23:58.000000 |        -        |
|  cinder-volume   | openstack3@lvm | nova | enabled |  down | 2017-07-20T10:50:31.000000 |        -        |
+------------------+----------------+------+---------+-------+----------------------------+-----------------+

Over ~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

1327 0 2017-01-20


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-12-28

今日天气
站点统计
  • 文章总数:241篇
  • 分类总数:29个
  • 评论总数:12条
  • 本站总访问量 353811 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!