十、块存储服务集群

概述

cinder-api

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

cinder-volume

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

cinder-scheduler守护进程

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

cinder-backup daemon

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

消息队列

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

7.1.、控制节点安装

7.1.1、先决条件

 

在你安装和配置块存储服务之前,你必须创建数据库、服务证书和API端点。

完成下面的步骤以创建数据库:

1、建数据库

$ mysql -u rgalera -p galera -h 192.168.16.10

创建 cinder 数据库:

MariaDB [(none)]> CREATE DATABASE cinder;

 

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

MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \

  IDENTIFIED BY 'CINDER_DBPASS';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \

  IDENTIFIED BY 'CINDER_DBPASS';

 

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

$ . admin-openrc

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

2、创建角色、用户

创建一个 cinder 用户:

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

User Password:

Repeat User Password:

+---------------------+----------------------------------+

| Field               | Value                            |

+---------------------+----------------------------------+

| domain_id           | default                          |

| enabled             | True                             |

| id                  | 9d7e33de3e1a498390353819bc7d245d |

| name                | cinder                           |

| options             | {}                               |

| password_expires_at | None                             |

+---------------------+----------------------------------+

3、添加 admin 角色到 cinder 用户上

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

 

4、创建cinder服务实体

$ openstack service create --name cinderv2 \

  --description "OpenStack Block Storage" volumev2

 

+-------------+----------------------------------+

| Field       | Value                            |

+-------------+----------------------------------+

| description | OpenStack Block Storage          |

| enabled     | True                             |

| id          | eb9fd245bdbc414695952e93f29fe3ac |

| name        | cinderv2                         |

| type        | volumev2                         |

+-------------+----------------------------------+

$ openstack service create --name cinderv3 \

  --description "OpenStack Block Storage" volumev3

 

+-------------+----------------------------------+

| Field       | Value                            |

+-------------+----------------------------------+

| description | OpenStack Block Storage          |

| enabled     | True                             |

| id          | ab3bbbef780845a1a283490d281e7fda |

| name        | cinderv3                         |

| type        | volumev3                         |

+-------------+----------------------------------+

 注解

 

块设备存储服务要求两个服务实体。

 

5、创建块存储服务API端点

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

$ openstack endpoint create --region RegionOne \

  volumev2 public http://controller:8776/v2/%\(project_id\)s

 

+--------------+------------------------------------------+

| Field        | Value                                    |

+--------------+------------------------------------------+

| enabled      | True                                     |

| id           | 513e73819e14460fb904163f41ef3759         |

| interface    | public                                   |

| region       | RegionOne                                |

| region_id    | RegionOne                                |

| service_id   | eb9fd245bdbc414695952e93f29fe3ac         |

| service_name | cinderv2                                 |

| service_type | volumev2                                 |

| url          | http://controller:8776/v2/%(project_id)s |

+--------------+------------------------------------------+

 

$ openstack endpoint create --region RegionOne \

  volumev2 internal http://controller:8776/v2/%\(project_id\)s

 

+--------------+------------------------------------------+

| Field        | Value                                    |

+--------------+------------------------------------------+

| enabled      | True                                     |

| id           | 6436a8a23d014cfdb69c586eff146a32         |

| interface    | internal                                 |

| region       | RegionOne                                |

| region_id    | RegionOne                                |

| service_id   | eb9fd245bdbc414695952e93f29fe3ac         |

| service_name | cinderv2                                 |

| service_type | volumev2                                 |

| url          | http://controller:8776/v2/%(project_id)s |

+--------------+------------------------------------------+

 

$ openstack endpoint create --region RegionOne \

  volumev2 admin http://controller:8776/v2/%\(project_id\)s

 

+--------------+------------------------------------------+

| Field        | Value                                    |

+--------------+------------------------------------------+

| enabled      | True                                     |

| id           | e652cf84dd334f359ae9b045a2c91d96         |

| interface    | admin                                    |

| region       | RegionOne                                |

| region_id    | RegionOne                                |

| service_id   | eb9fd245bdbc414695952e93f29fe3ac         |

| service_name | cinderv2                                 |

| service_type | volumev2                                 |

| url          | http://controller:8776/v2/%(project_id)s |

+--------------+------------------------------------------+

$ openstack endpoint create --region RegionOne \

  volumev3 public http://controller:8776/v3/%\(project_id\)s

 

+--------------+------------------------------------------+

| Field        | Value                                    |

+--------------+------------------------------------------+

| enabled      | True                                     |

| id           | 03fa2c90153546c295bf30ca86b1344b         |

| interface    | public                                   |

| region       | RegionOne                                |

| region_id    | RegionOne                                |

| service_id   | ab3bbbef780845a1a283490d281e7fda         |

| service_name | cinderv3                                 |

| service_type | volumev3                                 |

| url          | http://controller:8776/v3/%(project_id)s |

+--------------+------------------------------------------+

 

$ openstack endpoint create --region RegionOne \

  volumev3 internal http://controller:8776/v3/%\(project_id\)s

 

+--------------+------------------------------------------+

| Field        | Value                                    |

+--------------+------------------------------------------+

| enabled      | True                                     |

| id           | 94f684395d1b41068c70e4ecb11364b2         |

| interface    | internal                                 |

| region       | RegionOne                                |

| region_id    | RegionOne                                |

| service_id   | ab3bbbef780845a1a283490d281e7fda         |

| service_name | cinderv3                                 |

| service_type | volumev3                                 |

| url          | http://controller:8776/v3/%(project_id)s |

+--------------+------------------------------------------+

 

$ openstack endpoint create --region RegionOne \

  volumev3 admin http://controller:8776/v3/%\(project_id\)s

 

+--------------+------------------------------------------+

| Field        | Value                                    |

+--------------+------------------------------------------+

| enabled      | True                                     |

| id           | 4511c28a0f9840c78bacb25f10f62c98         |

| interface    | admin                                    |

| region       | RegionOne                                |

| region_id    | RegionOne                                |

| service_id   | ab3bbbef780845a1a283490d281e7fda         |

| service_name | cinderv3                                 |

| service_type | volumev3                                 |

| url          | http://controller:8776/v3/%(project_id)s |

+--------------+------------------------------------------+

 注解

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

 

7.1.2、安装并配置组件
1、安装软件包

所有控制节点上安装

# yum install openstack-cinder

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

 

在 [database] 部分,配置数据库访问:

[database]

connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

用你为块设备存储数据库选择的密码替换 CINDER_DBPASS。

 

在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:

[DEFAULT]

transport_url = rabbit://openstack:RABBIT_PASS@controller

用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。

 

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

[DEFAULT]

auth_strategy = keystone

 

[keystone_authtoken]

auth_uri = http://controller:5000

auth_url = http://controller:35357

memcached_servers = controller1:11211,controller2:11211,controller3:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = cinder

password = CINDER_PASS

 

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

[DEFAULT]

my_ip = 10.129.0.11

 

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

 

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

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

 

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

 

 

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

编辑文件 /etc/nova/nova.conf 并添加如下到其中:

 

[cinder]

os_region_name = RegionOne

完成安装

 

重启计算API 服务:

# systemctl restart openstack-nova-api.service

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

 

2、启动并开启启动服务

# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service

# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

 

 

7.2、cinder节点安装

 

7.2.1、先决条件

 

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

在存储节点实施这些步骤。

安装支持的工具包:

 

1、安装 LVM 包:

# yum install lvm2

启动LVM的metadata服务并且设置该服务随系统启动:

 

# systemctl enable lvm2-lvmetad.service

# systemctl start lvm2-lvmetad.service

 注解

 

一些发行版默认包含了LVM。

2、创建逻辑卷卷组

创建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

块存储服务会在这个卷组中创建逻辑卷。

 

只有实例可以访问块存储卷组。但是,底层的操作系统管理着与这些卷相关联的设备。默认情况下,LVM卷扫描工具会扫描``/dev`` 目录,查找包含卷的块存储设备。如果项目在他们的卷上使用了LVM,扫描工具便会在检测到这些卷时尝试缓存它们,这可能会在底层操作系统和项目卷上产生各种问题。所以您必须重新配置LVM,让它扫描仅包含``cinder-volume``卷组的设备。编辑``/etc/lvm/lvm.conf``文件并完成下面的操作:

3、添加过滤器

在``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/.*/"]

 

 

4、安装并配置组件

安装软件包:

# yum install openstack-cinder targetcli python-keystone

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

 

在 [database] 部分,配置数据库访问:

[database]

connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

用你为块设备存储数据库选择的密码替换 CINDER_DBPASS。

 

在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:

[DEFAULT]

transport_url = rabbit://openstack:RABBIT_PASS@controller

用你在 “RabbitMQ” 中为 “openstack” 选择的密码替换 “RABBIT_PASS”。

 

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

[DEFAULT]

auth_strategy = keystone

 

[keystone_authtoken]

auth_uri = http://controller:5000

auth_url = http://controller:35357

memcached_servers = controller1:11211,controller2:11211,controller3:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = cinder

password = CINDER_PASS

将 CINDER_PASS 替换为你在认证服务中为 cinder 用户选择的密码。

 

 注解

在 [keystone_authtoken] 中注释或者删除其他选项。

 

在 [DEFAULT] 部分,配置 my_ip 选项:

 

[DEFAULT]

my_ip = 10.129.0.51

将其中的``MANAGEMENT_INTERFACE_IP_ADDRESS``替换为存储节点上的管理网络接口的IP 地址,例如样例架构 <overview-example-architectures>中所示的第一台节点 10.129.0.41 。

 

在``[lvm]``部分中,配置LVM后端,包括LVM驱动,``cinder-volumes``卷组 ,iSCSI 协议和适当的 iSCSI服务。如果``[lvm]``部分不存在,则创建它:

 

[lvm]

volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver

volume_group = cinder-volumes

iscsi_protocol = iscsi

iscsi_helper = lioadm

在 [DEFAULT] 部分,启用 LVM 后端:

 

[DEFAULT]

enabled_backends = lvm

 注解 后端名字是任意的。比如,本教程使用驱动的名字作为后端的名字。

 

在 [DEFAULT] 区域,配置镜像服务 API 的位置:

[DEFAULT]

glance_api_servers = http://controller:9292

 

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

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

完成安装¶

 

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

5、启动并开机启动服务

# systemctl enable openstack-cinder-volume.service target.service

# systemctl start openstack-cinder-volume.service target.service

 

7.3、验证操作

控制节点上验证

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

 

$ . admin-openrc

列出服务组件以验证是否每个进程都成功启动:

 

$ openstack volume service list

 

+------------------+------------+------+---------+-------+----------------------------+

| Binary           | Host       | Zone | Status  | State | Updated_at                 |

+------------------+------------+------+---------+-------+----------------------------+

| cinder-scheduler | controller | nova | enabled | up    | 2016-09-30T02:27:41.000000 |

| cinder-volume    | block@lvm  | nova | enabled | up    | 2016-09-30T02:27:46.000000 |

+------------------+------------+------+---------+-------+----------------------------+

posted @ 2018-05-24 12:24  韩景正  阅读(151)  评论(0编辑  收藏  举报