搭建多OpenStack多节点私有云平台(九)(块存储服务)

安装和配置控制节点

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

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

    • 用数据库连接客户端以 root 用户连接到数据库服务器:

      $ mysql -u root -p
      
    • 创建 cinder 数据库:

      CREATE DATABASE cinder;
      
    • 允许 cinder 数据库合适的访问权限:

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

      用合适的密码替换 CINDER_DBPASS

    • 退出数据库客户端。

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

    $ . admin-openrc
    
  3. 要创建服务证书,完成这些步骤:

    • 创建一个 cinder 用户:

      $ openstack user create --domain default --password CINDER_PASS cinder
      +-----------+----------------------------------+
      | Field     | Value                            |
      +-----------+----------------------------------+
      | domain_id | e0353a670a9e496da891347c589539e9 |
      | enabled   | True                             |
      | id        | bb279f8ffc444637af38811a5e1f0562 |
      | 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          | ab3bbbef780845a1a283490d281e7fda |
      | name        | cinder                           |
      | type        | volume                           |
      +-------------+----------------------------------+
      
      $ 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          | a95acbacaefc4a79a6370943bc76346a |
      | name        | cinderv3                         |
      | type        | volumev3                         |
      +-------------+----------------------------------+
      
      

    注解

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

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

    $ openstack endpoint create --region RegionOne \
      volume public http://controller:8776/v1/%\(tenant_id\)s
      +--------------+-----------------------------------------+
      | Field        | Value                                   |
      +--------------+-----------------------------------------+
      | enabled      | True                                    |
      | id           | 03fa2c90153546c295bf30ca86b1344b        |
      | interface    | public                                  |
      | region       | RegionOne                               |
      | region_id    | RegionOne                               |
      | service_id   | ab3bbbef780845a1a283490d281e7fda        |
      | service_name | cinder                                  |
      | service_type | volume                                  |
      | url          | http://controller:8776/v1/%(tenant_id)s |
      +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      volume internal http://controller:8776/v1/%\(tenant_id\)s
      +--------------+-----------------------------------------+
      | Field        | Value                                   |
      +--------------+-----------------------------------------+
      | enabled      | True                                    |
      | id           | 94f684395d1b41068c70e4ecb11364b2        |
      | interface    | internal                                |
      | region       | RegionOne                               |
      | region_id    | RegionOne                               |
      | service_id   | ab3bbbef780845a1a283490d281e7fda        |
      | service_name | cinder                                  |
      | service_type | volume                                  |
      | url          | http://controller:8776/v1/%(tenant_id)s |
      +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      volume admin http://controller:8776/v1/%\(tenant_id\)s
      +--------------+-----------------------------------------+
      | Field        | Value                                   |
      +--------------+-----------------------------------------+
      | enabled      | True                                    |
      | id           | 4511c28a0f9840c78bacb25f10f62c98        |
      | interface    | admin                                   |
      | region       | RegionOne                               |
      | region_id    | RegionOne                               |
      | service_id   | ab3bbbef780845a1a283490d281e7fda        |
      | service_name | cinder                                  |
      | service_type | volume                                  |
      | url          | http://controller:8776/v1/%(tenant_id)s |
      +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      volumev2 public http://controller:8776/v2/%\(tenant_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/%(tenant_id)s |
    +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      volumev2 internal http://controller:8776/v2/%\(tenant_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/%(tenant_id)s |
    +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      volumev2 admin http://controller:8776/v2/%\(tenant_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/%(tenant_id)s |
    +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      volumev3 public http://controller:8776/v3/%\(tenant_id\)s
    +--------------+-----------------------------------------+
    | Field        | Value                                   |
    +--------------+-----------------------------------------+
    | enabled      | True                                    |
    | id           | 0cecef109ee143a282b672a7a5c7996f        |
    | interface    | public                                  |
    | region       | RegionOne                               |
    | region_id    | RegionOne                               |
    | service_id   | a95acbacaefc4a79a6370943bc76346a        |
    | service_name | cinderv3                                |
    | service_type | volumev3                                |
    | url          | http://controller:8776/v3/%(tenant_id)s |
    +--------------+-----------------------------------------+
    
    
    $ openstack endpoint create --region RegionOne \
      volumev3 internal http://controller:8776/v3/%\(tenant_id\)s
    +--------------+-----------------------------------------+
    | Field        | Value                                   |
    +--------------+-----------------------------------------+
    | enabled      | True                                    |
    | id           | 10c8cff8ae1a409287af7671cd887090        |
    | interface    | internal                                |
    | region       | RegionOne                               |
    | region_id    | RegionOne                               |
    | service_id   | a95acbacaefc4a79a6370943bc76346a        |
    | service_name | cinderv3                                |
    | service_type | volumev3                                |
    | url          | http://controller:8776/v3/%(tenant_id)s |
    +--------------+-----------------------------------------+
    
    $ openstack endpoint create --region RegionOne \
      volumev3 admin http://controller:8776/v3/%\(tenant_id\)s
    +--------------+-----------------------------------------+
    | Field        | Value                                   |
    +--------------+-----------------------------------------+
    | enabled      | True                                    |
    | id           | 81cf4fca80094795bde9564babb23303        |
    | interface    | admin                                   |
    | region       | RegionOne                               |
    | region_id    | RegionOne                               |
    | service_id   | a95acbacaefc4a79a6370943bc76346a        |
    | service_name | cinderv3                                |
    | service_type | volumev3                                |
    | url          | http://controller:8776/v3/%(tenant_id)s |
    +--------------+-----------------------------------------+
    
    

    注解

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

安全并配置组件

  1. 安装软件包:

    # yum install openstack-cinder -y
    
  2. 编辑 /etc/cinder/cinder.conf,同时完成如下动作:

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

      [database]
      ...
      connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
      

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

    • 在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列访问:

      [DEFAULT]
      ...
      rpc_backend = rabbit
      auth_strategy = keystone
      my_ip = 192.168.25.141
      
      [oslo_messaging_rabbit]
      ...
      rabbit_host = controller
      rabbit_userid = openstack
      rabbit_password = RABBIT_PASS
      

      用你在 “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 = controller: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 来使用控制节点的管理接口的IP 地址。

      [DEFAULT]
      ...
      my_ip = 192.168.25.141
      
    • [oslo_concurrency] 部分,配置锁路径:

      [oslo_concurrency]
      ...
      lock_path = /var/lib/cinder/tmp
      
  3. 初始化块设备服务的数据库:

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

    注解

    忽略输出中任何不推荐使用的信息。

配置计算节点以使用块设备存储,2个计算节点都要

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

    [cinder]
    os_region_name = RegionOne
    

完成安装(在控制节点重启)

  1. 重启计算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
    

安装和配置存储节点

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

注解

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

  1. 安装支持的工具包:

    • 安装 LVM 包:

      # yum install lvm2 -y
      
    • 启动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
    

    注意:如果Device /dev/sdb not found.表示缺少硬盘,需要添加一块硬盘。20G

  3. 创建 LVM 卷组 cinder-volumes

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

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

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

    • devices部分,添加一个过滤器,只接受/dev/sdb设备,拒绝其他所有设备:

      devices {
      ...
      filter = [ "a/sdb/", "r/.*/"]
      

      每个过滤器组中的元素都以a开头,即为 accept,或以 r 开头,即为reject,并且包括一个设备名称的正则表达式规则。过滤器组必须以r/.*/[](https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/cinder-storage-install.html#id1)结束,过滤所有保留设备。您可以使用 :命令:vgs -vvvv 来测试过滤器。

      警告

      如果您的存储节点在操作系统磁盘上使用了 LVM,您还必需添加相关的设备到过滤器中。例如,如果 /dev/sda 设备包含操作系统:

      (这个覆盖上面的)

      filter = [ "a/sda/", "a/sdb/", "r/.*/"]
      

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

      (2个计算节点要加下面这个)

      filter = [ "a/sda/", "r/.*/"]
      

安全并配置组件

  1. 安装软件包:

    # yum install openstack-cinder targetcli python-keystone -y
    
  2. 编辑 /etc/cinder/cinder.conf,同时完成如下动作:

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

      [database]
      ...
      connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
      

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

    • 在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列访问:

      [DEFAULT]
      ...
      rpc_backend = rabbit
      auth_strategy = keystone
      glance_api_servers = http://compute2:9292
      enabled_backends = lvm
      glance_api_servers = http://compute2:9292
      
      [oslo_messaging_rabbit]
      ...
      rabbit_host = controller
      rabbit_userid = openstack
      rabbit_password = RABBIT_PASS
      

      用你在 “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 = controller: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 = 192.168.25.144
      

      将其中的MANAGEMENT_INTERFACE_IP_ADDRESS替换为存储节点上的管理网络接口的IP 地址,例如样例架构 中所示的第一台节点 10.0.0.41 。

    • [lvm]部分,配置LVM后端以LVM驱动结束,卷组cinder-volumes ,iSCSI 协议和正确的 iSCSI服务:

      [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://compute2:9292
      
      注意要映射主机名

      vim /etc/hosts

      192.168.25.145 compute2

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

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

完成安装

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

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

    在控制节点验证操作

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

    $ . admin-openrc
    
  2. 列出服务组件以验证是否每个进程都成功启动:

    $ cinder service-list
    +------------------+------------+------+---------+-------+----------------------------+-----------------+
    |      Binary      |    Host    | Zone |  Status | State |         Updated_at         | Disabled Reason |
    +------------------+------------+------+---------+-------+----------------------------+-----------------+
    | cinder-scheduler | controller | nova | enabled |   up  | 2014-10-18T01:30:54.000000 |       None      |
    | cinder-volume    | block1@lvm | nova | enabled |   up  | 2014-10-18T01:30:57.000000 |       None      |
    +------------------+------------+------+---------+-------+----------------------------+-----------------+
    

3.创建一个带有卷的实例,并且启动

查错代码:[root@controller ~]# vim /var/log/cinder/scheduler.log

posted @ 2021-01-07 20:32  龙吟九枭  阅读(351)  评论(0)    收藏  举报