本文是在控制节点上部署的Cinder API等管理服务,控制节点不涉及最终数据存储,我们将在后续文章中介绍存储节点的安装配置
1 2 3 4 5 6 7 作者:李晓辉 联系方式: 微信:Lxh_Chat 邮箱:939958092@qq.com
前言 在云计算环境中,块存储服务是实现虚拟机持久化存储的关键组件。OpenStack作为一个功能强大的开源云平台,提供了灵活的块存储解决方案。Cinder作为OpenStack的核心块存储服务组件,负责管理和配置存储卷资源,支持多种存储后端技术。本文将详细介绍如何在OpenStack环境中安装和配置Cinder块存储服务,帮助你搭建一个高效、灵活且可靠的云平台存储架构。
Cinder服务概述 Cinder的作用 Cinder是OpenStack中的块存储服务组件,其主要功能包括:
存储卷管理 :提供存储卷的创建、删除、挂载和卸载功能,支持多种存储后端,如本地存储、SAN存储、分布式存储等。
快照管理 :支持存储卷的快照功能,允许用户创建、恢复和删除快照,用于数据备份和恢复。
与计算服务集成 :与Nova服务紧密集成,为虚拟机提供持久化存储,确保虚拟机能够正常访问存储资源。
存储类型管理 :支持多种存储类型,允许用户根据性能和成本需求选择合适的存储后端。
备份与恢复 :提供存储卷的备份和恢复功能,支持将备份数据存储到外部存储系统,增强数据的安全性。
Cinder的架构 Cinder服务由以下几个主要组件构成:
cinder-api :提供RESTful API接口,供用户和管理员管理存储卷资源。
cinder-scheduler :根据预定义的策略选择合适的存储节点来创建存储卷。
cinder-volume :负责实际的存储卷创建、管理和与后端存储设备的交互。
cinder-backup :提供存储卷的备份和恢复功能。
数据库 :Cinder使用关系型数据库(如MariaDB)存储存储卷的配置信息。
工作原理 Cinder的工作原理可以概括为以下几个步骤:
API请求处理 :用户通过Cinder API发送请求,如创建存储卷、挂载存储卷等。cinder-api
组件接收这些请求,并将其转发给相应的服务组件。
资源分配与配置 :根据用户的请求,cinder-scheduler
选择合适的存储节点,并将配置信息传递给cinder-volume
。
存储卷管理 :cinder-volume
根据配置信息,与后端存储设备进行交互,完成存储卷的创建、挂载等操作。
备份与恢复 :cinder-backup
负责存储卷的备份和恢复操作,确保数据的安全性和可靠性。
通过以上机制,Cinder服务确保了存储卷资源的高效管理和灵活配置,为OpenStack环境中的虚拟机提供了可靠的持久化存储。
本文是在控制节点上部署的Cinder API等管理服务,控制节点不涉及最终数据存储,我们将在后续文章中介绍存储节点的安装配置
准备cinder数据库 在控制节点上创建Cinder数据库和用户,并分配权限。
1 mysql -u root -pLiXiaohui
1 2 3 4 CREATE DATABASE cinder; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder' @'localhost' IDENTIFIED BY 'LiXiaohui' ; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder' @'%' IDENTIFIED BY 'LiXiaohui' ; exit
创建cinder服务用户和分配角色 加载管理员环境变量文件
注册Cinder服务到Keystone服务目录中,并创建相应的API端点,使其他服务能够通过Keystone发现和访问Cinder服务。
1 2 3 4 5 6 7 8 9 10 11 12 [root@controller ~]# openstack user create --domain default --password LiXiaohui cinder +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 8d60192ed38646519d542b3f1ea32d5a | | name | cinder | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ [root@controller ~]# openstack role add --project service --user cinder admin
创建cinder的service和endpoint 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 [root@controller ~]# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3 +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Block Storage | | enabled | True | | id | 0fccaf7817214304a4cd80b2890655ac | | name | cinderv3 | | type | volumev3 | +-------------+----------------------------------+ [root@controller ~]# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s +--------------+------------------------------------------+ | Field | Value | +--------------+------------------------------------------+ | enabled | True | | id | 1234bbb80dc244299bd2e8a4eaf3d168 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 0fccaf7817214304a4cd80b2890655ac | | 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 | 2e54e026ae3c42e282c4d2bb7ac5113d | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 0fccaf7817214304a4cd80b2890655ac | | 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 | 6b3c08a639854f22ae9b687bca0e9d27 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 0fccaf7817214304a4cd80b2890655ac | | service_name | cinderv3 | | service_type | volumev3 | | url | http://controller:8776/v3/%(project_id)s | +--------------+------------------------------------------+
安装配置cinder组件 安装Cinder相关软件 在控制节点上安装Cinder服务。
1 yum install openstack-cinder -y
准备配置文件 /etc/cinder/cinder.conf
是Cinder的配置文件,以下是配置内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 crudini --set /etc/cinder/cinder.conf DEFAULT transport_url rabbit://openstack:LiXiaohui@controller crudini --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone crudini --set /etc/cinder/cinder.conf DEFAULT my_ip 192.168.8.10 crudini --set /etc/cinder/cinder.conf database connection mysql+pymysql://cinder:LiXiaohui@controller/cinder crudini --set /etc/cinder/cinder.conf keystone_authtoken www_authenticate_uri http://controller:5000 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_url http://controller:5000 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_uri http://controller:5000 crudini --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers controller:11211 crudini --set /etc/cinder/cinder.conf keystone_authtoken auth_type password crudini --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name Default crudini --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name Default crudini --set /etc/cinder/cinder.conf keystone_authtoken project_name service crudini --set /etc/cinder/cinder.conf keystone_authtoken username cinder crudini --set /etc/cinder/cinder.conf keystone_authtoken password LiXiaohui crudini --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp
或者
指定Cinder服务与消息队列(RabbitMQ)之间的连接信息
1 2 3 4 [DEFAULT] transport_url = rabbit://openstack:LiXiaohui@controllerauth_strategy = keystonemy_ip = 192.168 .8.10
1 2 [database] connection = mysql+pymysql://cinder:LiXiaohui@controller/cinder
1 2 3 4 5 6 7 8 9 10 11 [keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = cinderpassword = LiXiaohui
1 2 [oslo_concurrency] lock_path = /var/lib/cinder/tmp
填充cinder数据库 运行cinder-manage db sync命令,初始化或更新Cinder服务使用的数据库。此命令会根据Cinder的配置文件(cinder.conf)中的数据库连接信息,创建或更新数据库表结构,确保Cinder服务能够正常运行。
1 su -s /bin/sh -c "cinder-manage db sync" cinder
配置计算服务使用cinder 为了使Nova(OpenStack的计算服务)能够使用Cinder提供的块存储服务,需要在Nova的配置文件中指定Cinder服务的区域名称。
在/etc/nova/nova.conf
中编辑
1 crudini --set /etc/nova/nova.conf cinder os_region_name RegionOne
或
1 2 [cinder] os_region_name = RegionOne
启动相关服务 1 2 systemctl restart openstack-nova-api.service systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service --now
systemctl restart openstack-nova-api.service
:重启Nova API服务,确保Nova服务能够加载最新的配置。systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service --now
:启用并启动Cinder API服务和Cinder调度服务。--now
选项表示立即启动这些服务,并确保它们在系统启动时自动启动。