OpenStack系列之一:手动部署OpenStack Queens(7.块存储服务)


title: OpenStack系列之一:手动部署OpenStack Queens(7.块存储服务)
categories: Linux
tags:
- OpenStack
timezone: Asia/Shanghai
date: 2019-01-21

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

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

块存储服务概览

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

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

  • cinder-api

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

  • cinder-volume

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

  • cinder-scheduler守护进程

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

  • cinder-backup daemon

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

  • 消息队列

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

第零步:初始化准备

1.关闭防火墙并配置本地YUM(by all)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables

systemctl status firewalld
systemctl status iptables

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

cat <<EOF >/etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
EOF
2.网络设置

2.1 网络规划

主机名:block1
IP 地址: 10.0.1.63
子网掩码: 255.255.255.0 (or /24)
默认网关: 10.0.1.1

2.2 更改主机名并写入本地hosts

# 配置域名解析
# 一些发行版本在``/etc/hosts``文件中添加了附加条目解析实际主机名到另一个IP地址如 127.0.1.1。
# 为了防止域名解析问题,你必须注释或者删除这些条目。不要删除127.0.0.1条目。
hostnamectl set-hostname block1
echo "10.0.1.61 controller" >>/etc/hosts
echo "10.0.1.62 compute1" >>/etc/hosts
echo "10.0.1.63 block1" >>/etc/hosts
3.配置时间同步NTP
# 安装chrony服务
yum install -y chrony

# 修改前备份chrony.conf
/bin/grep 666666 /etc/chrony.conf && /bin/cp /etc/chrony.conf.666666 /etc/chrony.conf || /bin/cp /etc/chrony.conf /etc/chrony.conf.666666
# 删除默认Server
sed -i "/server/d" /etc/chrony.conf
sed -i "/makestep/d" /etc/chrony.conf
# 设置同步服务器为控制节点
echo "server controller iburst" >>/etc/chrony.conf
echo "makestep 1.0 -1" >>/etc/chrony.conf
# 重启服务并查看状态是否正常并设置开机自动启动
systemctl enable chronyd.service
systemctl stop chronyd.service
systemctl start chronyd.service
systemctl status chronyd.service
chronyc tracking

# 验证
chronyc sources
4.启用OpenStack仓库
警告:在你进行更多步骤前,你的主机必须包含最新版本的基础安装软件包。
警告:禁用或移除所有自动更新的服务,因为它们会影响到您的 OpenStack 环境。
警告:当使用RDO包时,我们推荐禁用EPEL,原因是EPEL中的更新破坏向后兼容性。或者使用yum-versionlock插件指定包版本号。

4.1.启用OpenStack库

# 在CentOS中, extras仓库提供用于启用 OpenStack 仓库的RPM包。
# CentOS 默认启用extras仓库,因此你可以直接安装用于启用OpenStack仓库的包。
yum install -y centos-release-openstack-queens

4.2.完成安装

# 在主机上升级包并重启服务器
yum upgrade -y && init 6

第一步:安装和配置控制器节点(控制节点)

1.先决条件

在安装和配置Block Storage服务之前,必须创建数据库,服务凭据和API端点。

1.1.要创建数据库,请完成以下步骤:

以下有两处xiaoliu,请根据自己情况更改

# 1.使用数据库访问客户端以root用户身份连接到数据库服务器:
mysql -u root -p

# 2.创建cinder数据库:
CREATE DATABASE cinder;

# 3.授予对cinder数据库的适当访问权限:
# 替换CINDER_DBPASS为合适的密码。
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'xiaoliu';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'xiaoliu';

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

source /home/admin-openrc
echo $OS_USERNAME

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

# 1.创建一个 cinder 用户:
openstack user create --domain default --password-prompt cinder

# 2.添加 admin 角色到 cinder 用户上(这个命令执行后没有输出)。
openstack role add --project service --user cinder admin

# 3.Create the cinderv2 and cinderv3 service entities
# 块设备存储服务要求两个服务实体:
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3

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

块设备存储服务每个服务实体都需要端点。

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

1.5.以上命令输出展示

[root@controller home]# openstack user create --domain default --password-prompt cinder
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 87d4338d0c9f4b3c98d386d55b6c6f03 |
| name                | cinder                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+
[root@controller home]# openstack role add --project service --user cinder admin
[root@controller home]# openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 84c8172c7b51476c8a2aac803c245e83 |
| name        | cinderv2                         |
| type        | volumev2                         |
+-------------+----------------------------------+
[root@controller home]# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 8b559b15bca545e7899d1b4e1ddd80a1 |
| name        | cinderv3                         |
| type        | volumev3                         |
+-------------+----------------------------------+
[root@controller home]# openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 310bce02191b4be68d09fc81992994ca         |
| interface    | public                                   |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 84c8172c7b51476c8a2aac803c245e83         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+
[root@controller home]# openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 80b65ef9f9fc4eb4b088b5f227e5249b         |
| interface    | internal                                 |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 84c8172c7b51476c8a2aac803c245e83         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+
[root@controller home]# openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 0948b943808d4fb3b75ab8d07bf93f8e         |
| interface    | admin                                    |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 84c8172c7b51476c8a2aac803c245e83         |
| service_name | cinderv2                                 |
| service_type | volumev2                                 |
| url          | http://controller:8776/v2/%(project_id)s |
+--------------+------------------------------------------+
[root@controller home]# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 4d658df890234fd1a92a67134da58aff         |
| interface    | public                                   |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 8b559b15bca545e7899d1b4e1ddd80a1         |
| service_name | cinderv3                                 |
| service_type | volumev3                                 |
| url          | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
[root@controller home]# openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | a521d33a52ef45f2847d75625f6ff7de         |
| interface    | internal                                 |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 8b559b15bca545e7899d1b4e1ddd80a1         |
| service_name | cinderv3                                 |
| service_type | volumev3                                 |
| url          | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
[root@controller home]# openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | bd081ecba5664c34b397b7a407eb023a         |
| interface    | admin                                    |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | 8b559b15bca545e7899d1b4e1ddd80a1         |
| service_name | cinderv3                                 |
| service_type | volumev3                                 |
| url          | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+
2.安全并配置组件

2.1.安装软件包:

yum install -y openstack-cinder

2.2.编辑 /etc/cinder/cinder.conf,同时完成如下动作:

cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak
cat /etc/cinder/cinder.conf.bak | grep -v "^#" | grep -v '^$' > /etc/cinder/cinder.conf
vim /etc/cinder/cinder.conf

# 1.在 [database] 部分,配置数据库访问:
# 用你为块设备存储数据库选择的密码替换 CINDER_DBPASS。
[database]
# ...
connection = mysql+pymysql://cinder:xiaoliu@controller/cinder

# 2.在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:
# 用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。
[DEFAULT]
# ...
transport_url = rabbit://openstack:xiaoliu@controller

# 3.在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
# 将 CINDER_PASS 替换为你在认证服务中为 cinder 用户选择的密码。
# 在 [keystone_authtoken] 中注释或者删除其他选项。
[DEFAULT]
# ...
auth_strategy = keystone

[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 = xiaoliu

# 4.在 [DEFAULT 部分,配置``my_ip`` 来使用控制节点的管理接口的IP 地址。
[DEFAULT]
# ...
my_ip = 10.0.1.61

2.3.在 [oslo_concurrency] 部分,配置锁路径:

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

2.4.初始化块设备服务的数据库(忽略输出中任何不推荐使用的信息。):

# 写入数据库
su -s /bin/sh -c "cinder-manage db sync" cinder

# 验证数据是否写入成功:应该有35张表
mysql -uroot -p'xiaoliu' -D cinder -se "show tables;"
mysql -uroot -p'xiaoliu' -D cinder -se "show tables;" | wc -l
3.配置以允许计算节点以使用块设备存储
# 编辑文件 /etc/nova/nova.conf 并添加如下到其中:
cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
vim /etc/nova/nova.conf

[cinder]
os_region_name = RegionOne
4.完成安装

4.1.重启计算API 服务:

systemctl restart openstack-nova-api.service
systemctl status openstack-nova-api.service

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

systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl stop openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl status openstack-cinder-api.service openstack-cinder-scheduler.service

第二步:安装和配置存储节点(存储节点)

本节介绍如何为Block Storage服务安装和配置存储节点。为简单起见,此配置引用一个具有空本地块存储设备的存储节点。说明使用/dev/sdb,但您可以为特定节点替换不同的值。

该服务使用LVM驱动程序在此设备上配置逻辑卷, 并通过iSCSI传输将它们提供给实例。您可以按照这些说明进行微小修改,以使用其他存储节点水平扩展您的环境。

1.先决条件

1.1.安装 LVM 包、启动LVM的metadata服务并且设置该服务随系统启动:

yum install -y lvm2 device-mapper-persistent-data
systemctl enable lvm2-lvmetad.service
systemctl stop lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service
systemctl status lvm2-lvmetad.service

1.2.为【存储节点】准备一块除系统磁盘外的一块单独的硬盘,并确认新准备的硬盘为/dev/sdb

ll /dev/sdb

1.3.创建LVM 物理卷 /dev/sdb

pvcreate /dev/sdb

1.4.创建 LVM 卷组 cinder-volumes:
块存储服务会在这个卷组中创建逻辑卷。

vgcreate cinder-volumes /dev/sdb

1.5.配置只有实例才能访问块存储卷。
但是,底层的操作系统管理着与这些卷相关联的设备。

默认情况下,LVM卷扫描工具会扫描/dev 目录,查找包含卷的块存储设备。

如果项目在他们的卷上使用了LVM,扫描工具便会在检测到这些卷时尝试缓存它们,

这可能会在底层操作系统和项目卷上产生各种问题。

所以您必须重新配置LVM,让它扫描仅包含cinder-volume卷组的设备。

编辑/etc/lvm/lvm.conf文件并完成下面的操作:

cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.bak
vim /etc/lvm/lvm.conf
# 在``devices``部分,添加一个过滤器,只接受``/dev/sdb``设备,拒绝其他所有设备:
devices {
...
filter = [ "a/sdb/", "r/.*/"]
  • 每个过滤器组中的元素都以a开头,即为 accept,或以 r 开头,即为reject

    并且包括一个设备名称的正则表达式规则。过滤器组必须以r/.*/结束,过滤所有保留设备。您可以使用 :命令:vgs -vvvv 来测试过滤器。

  • 警告:

    如果您的存储节点在操作系统磁盘上使用了 LVM,您还必需添加相关的设备到过滤器中。例如,如果 /dev/sda 设备包含操作系统:
    filter = [ “a/sda/”, “a/sdb/”, “r/.*/”]

  • 警告:

    类似地,如果您的计算节点在操作系统磁盘上使用了 LVM,您也必需修改这些节点上 /etc/lvm/lvm.conf 文件中的过滤器,将操作系统磁盘包含到过滤器中。例如,如果/dev/sda 设备包含操作系统:
    filter = [ “a/sda/”, “r/.*/”]

2.安装和配置组件

2.1.安装包

yum install -y openstack-cinder targetcli python-keystone

2.2.编辑/etc/cinder/cinder.conf文件并完成以下操作:

以下有三处xiaoliu,请根据自己情况更改

以下有一处IP地址为存储节点IP,请根据自己情况更改

cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak
cat /etc/cinder/cinder.conf.bak | grep -v "^#" | grep -v '^$' > /etc/cinder/cinder.conf
vim /etc/cinder/cinder.conf

# 1.在该[database]部分中,配置数据库访问:
# 替换CINDER_DBPASS为您为Block Storage数据库选择的密码。
[database]
# ...
connection = mysql+pymysql://cinder:xiaoliu@controller/cinder

# 2.在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:
# 替换RABBIT_PASS为您为openstack帐户选择的密码RabbitMQ。
[DEFAULT]
# ...
transport_url = rabbit://openstack:xiaoliu@controller

# 3.在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问:
# 替换CINDER_PASS为您cinder在Identity服务中为用户选择的密码 。
# 注释掉或删除该[keystone_authtoken]部分中的任何其他选项 。
[DEFAULT]
# ...
auth_strategy = keystone

[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 = xiaoliu

# 4.在该[DEFAULT]部分中,配置my_ip选项:
# 替换MANAGEMENT_INTERFACE_IP_ADDRESS为存储节点上管理网络接口的IP地址
# 对于示例体系结构中的第一个节点,通常为10.0.0.41 。
[DEFAULT]
# ...
# my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
my_ip = 10.0.1.63


# 5.在本[lvm]节中,使用LVM驱动程序,cinder-volumes卷组,iSCSI协议和相应的iSCSI服务配置LVM后端。
# 如果该[lvm]部分不存在,请创建它:
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm

# 6.在 [DEFAULT] 部分,启用 LVM 后端:
# 后端名称是任意的。例如,本指南使用驱动程序的名称作为后端的名称。
[DEFAULT]
# ...
enabled_backends = lvm

# 7.在该[DEFAULT]部分中,配置Image服务API的位置:
[DEFAULT]
# ...
glance_api_servers = http://controller:9292

# 8.在该[oslo_concurrency]部分中,配置锁定路径:
[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp
3.完成安装

启动块存储卷服务及其依赖的服务,并将其配置为随系统启动:

systemctl enable openstack-cinder-volume.service target.service
systemctl stop openstack-cinder-volume.service target.service
systemctl start openstack-cinder-volume.service target.service
systemctl status openstack-cinder-volume.service target.service
4.验证操作:

列出服务组件以验证是否每个进程都成功启动(控制节点):

source /home/admin-openrc
echo $OS_USERNAME
openstack volume service list

[root@controller home]# openstack volume service list
+------------------+------------+------+---------+-------+----------------------------+
| Binary           | Host       | Zone | Status  | State | Updated At                 |
+------------------+------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller | nova | enabled | up    | 2019-01-21T08:29:14.000000 |
| cinder-volume    | block1@lvm | nova | enabled | up    | 2019-01-21T08:29:13.000000 |
+------------------+------------+------+---------+-------+----------------------------+
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值