OpenStack入门修炼之Cinder服务的部署与测试(17)

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDSClaw,2核4GB
简介:

1.理解块存储服务

操作系统获得存储空间的方式一般有两种:

通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据(数据库)

通过 NFS、CIFS 等 协议,mount 远程的文件系统
第一种裸硬盘的方式叫做 Block Storage(块存储),每个裸硬盘通常也称作 Volume(卷) 
第二种叫做文件系统存储。NAS 和 NFS 服务器,以及各种分布式文件系统提供的都是这种存储。

OpenStack 提供 Block Storage Service 的是 Cinder,其具体功能是:

①提供 REST API 使用户能够查询和管理 volume、volume snapshot 以及 volume type
②提供 scheduler 调度 volume 创建请求,合理优化存储资源的分配
③通过 driver 架构支持多种 back-end(后端)存储方式,包括 LVM,NFS,Ceph,GlusterFS

2.Cinder 架构以及块存储服务组件介绍

Cinder逻辑架构图:
OpenStack入门修炼之Cinder服务的部署与测试(17)

cinder不是一个存储软件,而是属于管理存储软件。块存储服务通常包含下列组件:
cinder-api: 接受API请求,调用 cinder-volume 执行操作。
cinder-volume:与块存储服务和例如“cinder scheduler”的进程进行交互
cinder-scheduler守护进程:scheduler 通过调度算法选择最合适的存储节点创建 volume,和nova-scheduler类似
cinder-backup daemon:备份进程
消息队列:Cinder 各个子服务通过消息队列实现进程间通信和相互协作。因为有了消息队列,子服务之间实现了解耦,这种松散的结构也是分布式系统的重要特征。
Database:Cinder 有一些数据需要存放到数据库中,一般使用 MySQL。数据库是安装在控制节点上的,比如实验环境中,可以访问名称为“cinder”的数据库。

3.物理部署方案

Cinder 的服务会部署在两类节点上,控制节点和存储节点。
查看当前计算节点cinder的相关服务

[root@linux-node1 ~]# ps -e |grep cinder
 1150 ?        01:19:09 cinder-api
 2025 ?        00:02:15 cinder-api
 3357 ?        00:17:16 cinder-schedule
24069 ?        00:27:01 cinder-volume
24089 ?        00:04:19 cinder-volume

cinder-api和cinder-schedule都部署在控制节点上,这无可厚非,思考:但是cinder-volume是否应该部署在存储节点上呢?
实际上,OpenStack是一个分布式系统,其每个组件的子服务都可以部署在任何节点上,只需要网络可通,这也表明了OpenStack的灵活性。无论哪个节点,只要运行了cinder-volume,它就是一个存储节点。同时,存储节点也可以部署其他组件的子服务。

4.安装组件并配置

(1)安装软件包

[root@linux-node1 ~]# yum install -y openstack-cinder

(2)修改配置:/etc/cinder/cinder.conf

[root@linux-node1 ~]# vim /etc/cinder/cinder.conf
[database]      <==配置数据库访问
connection = mysql+pymysql://cinder:cinder@192.168.56.11/cinder
[DEFAULT]       
transport_url = rabbit://openstack:openstack@192.168.56.11  <==配置RabbitMQ消息队列访问权限
auth_strategy = keystone    <==启动用keystoen认证

[keystone_authtoken]        <==配置认证服务访问
auth_uri = http://192.168.56.11:5000
auth_url = http://192.168.56.11:35357
memcached_servers = 192.168.56.11: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

查看配置:
[root@linux-node1 ~]# grep "^[a-z]" /etc/cinder/cinder.conf 
auth_strategy = keystone
transport_url = rabbit://openstack:openstack@192.168.56.11
connection = mysql+pymysql://cinder:cinder@192.168.56.11/cinder
auth_uri = http://192.168.56.11:5000
auth_url = http://192.168.56.11:35357
memcached_servers = 192.168.56.11:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = cinder
lock_path = /var/lib/cinder/tmp

5.初始化块存储服务的数据库,并验证

[root@linux-node1 ~]# su -s /bin/sh -c "cinder-manage db sync" cinder
[root@linux-node1 ~]# mysql -h 192.168.56.11 -ucinder -pcinder -e "use cinder;show tables;"

6.配置计算服务以使用块设备存储

[root@linux-node1 ~]# vim /etc/nova/nova.conf
[cinder]
os_region_name=RegionOne

7.完成安装

[root@linux-node1 ~]# systemctl restart openstack-nova-api.service
[root@linux-node1 ~]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
[root@linux-node1 ~]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

8.创建cinder和cinderv2服务实体

[root@linux-node1 ~]# openstack service create --name cinder \
>   --description "OpenStack Block Storage" volume
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | c63c93beff014724b036a811e2b0d591 |
| name        | cinder                           |
| type        | volume                           |
+-------------+----------------------------------+
[root@linux-node1 ~]# openstack service create --name cinderv2 \
>   --description "OpenStack Block Storage" volumev2
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | 6829915c1f9745409ca9bda364fe26c4 |
| name        | cinderv2                         |
| type        | volumev2                         |
+-------------+----------------------------------+

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

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volume public http://192.168.56.11:8776/v1/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volume internal http://192.168.56.11:8776/v1/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volume admin http://192.168.56.11:8776/v1/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volumev2 public http://192.168.56.11:8776/v2/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volumev2 internal http://192.168.56.11:8776/v2/%\(tenant_id\)s

[root@linux-node1 ~]# openstack endpoint create --region RegionOne \
   volumev2 admin http://192.168.56.11:8776/v2/%\(tenant_id\)s
[root@linux-node1 ~]# openstack service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| 18b41a6647e84ef68c5df6058c2f4eab | glance   | image    |
| 436e446b475a46fa978349211d6c64eb | keystone | identity |
| 613a3d7e61574fdbb7c330f6892a1b50 | neutron  | network  |
| 6829915c1f9745409ca9bda364fe26c4 | cinderv2 | volumev2 |
| 7347593df9034e369d27caf8f0240470 | nova     | compute  |
| c63c93beff014724b036a811e2b0d591 | cinder   | volume   |
+----------------------------------+----------+----------+
[root@linux-node1 ~]# openstack endpoint list
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------------------------+
| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                                          |
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------------------------+
| 0ae3e6275b4c4c20a7e8619909726bd4 | RegionOne | cinder       | volume       | True    | internal  | http://192.168.56.11:8776/v1/%(tenant_id)s   |
| 1fba971a2dc6424eaa06ef61c910e739 | RegionOne | cinder       | volume       | True    | admin     | http://192.168.56.11:8776/v1/%(tenant_id)s   |
| 20222ecb6eeb4f378035e79c47810b08 | RegionOne | keystone     | identity     | True    | public    | http://192.168.56.11:5000/v3/                |
| 45fd632b46684fdca9782a1e23b91f8c | RegionOne | glance       | image        | True    | admin     | http://192.168.56.11:9292                    |
| 64f9ee02b5d0489598f31e164d40e6df | RegionOne | nova         | compute      | True    | public    | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
| 6cc75ee06e5245059e106e89e1643a92 | RegionOne | keystone     | identity     | True    | internal  | http://192.168.56.11:35357/v3/               |
| 77f141dede894dea877d505b60e60de7 | RegionOne | nova         | compute      | True    | internal  | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
| 7883d0f227a54ac5a0db3ad3a02606df | RegionOne | nova         | compute      | True    | admin     | http://192.168.56.11:8774/v2.1/%(tenant_id)s |
| 7c7b33e8c2ac431aa7380ceeac80fb37 | RegionOne | keystone     | identity     | True    | admin     | http://192.168.56.11:35357/v3/               |
| 84e4273b741148e2a2d9c71d2c62da1e | RegionOne | cinder       | volume       | True    | public    | http://192.168.56.11:8776/v1/%(tenant_id)s   |
| abd82401a31d453ca2e28fc17816fd6c | RegionOne | neutron      | network      | True    | public    | http://192.168.56.11:9696                    |
| af72b7e0d3824c1e82663d06c1bd0205 | RegionOne | glance       | image        | True    | internal  | http://192.168.56.11:9292                    |
| cb6a870ba8a543ee882afe4b07d3c087 | RegionOne | neutron      | network      | True    | admin     | http://192.168.56.11:9696                    |
| e27bccfa73984db889f9373f288b4c67 | RegionOne | cinderv2     | volumev2     | True    | internal  | http://192.168.56.11:8776/v2/%(tenant_id)s   |
| e3a7e437be8a4cf1968c82ceca932d57 | RegionOne | glance       | image        | True    | public    | http://192.168.56.11:9292                    |
| e54250bd44384b15b5bbf1bb6eb34337 | RegionOne | cinderv2     | volumev2     | True    | admin     | http://192.168.56.11:8776/v2/%(tenant_id)s   |
| eba3e70ff0a44ab28898169f4807145f | RegionOne | cinderv2     | volumev2     | True    | public    | http://192.168.56.11:8776/v2/%(tenant_id)s   |
| f5c7dad4452840d788ed59c905efb3e7 | RegionOne | neutron      | network      | True    | internal  | http://192.168.56.11:9696                    |
+----------------------------------+-----------+--------------+--------------+---------+-----------+----------------------------------------------+

10.cinder-scheduler的调度

创建 Volume 时,cinder-scheduler 会基于容量、Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume。
Filter scheduler 是 cinder-scheduler 默认的调度器。

scheduler_driver = cinder.scheduler.filter_scheduler.FilterScheduler

scheduler 调度过程如下:

通过过滤器(filter)选择满足条件的存储节点(运行 cinder-volume)
通过权重计算(weighting)选择最优(权重值最大)的存储节点。



本文转自 IT_外卖小哥  51CTO博客,原文链接:http://blog.51cto.com/jinlong/2049785

相关文章
|
7月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
526 1
|
9月前
|
Web App开发 JavaScript 测试技术
Playwright 极速入门:1 小时搞定环境搭建与首个测试脚本
本文带你1小时快速入门Playwright,完成环境搭建并编写首个测试脚本。Playwright是微软推出的现代化Web自动化测试工具,支持Chromium、Firefox和WebKit三大浏览器引擎,具备跨平台、多语言(Python/JS/Java/C#)特性。其核心优势包括:智能自动等待机制减少失败率、内置录制工具实时生成脚本、多语言灵活选择,以及真移动端设备模拟能力,显著提升测试效率和可靠性。
|
机器学习/深度学习 自然语言处理 API
阿里云零门槛、轻松部署您的专属 DeepSeek模型体验测试
DeepSeek R1是基于Transformer架构的先进大规模深度学习模型,2025年1月20日发布并开源,遵循MIT License。它在自然语言处理等任务上表现出色,高效提取特征,缩短训练时间。阿里云推出的满血版方案解决了服务器压力问题,提供100万免费token,云端部署降低成本,用户可快速启动体验。虽然回答速度有待提升,但整体表现优异,备受关注。
519 8
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
446 10
|
敏捷开发 Devops 测试技术
自动化测试中的持续集成与持续部署
在现代软件开发实践中,自动化测试是确保软件质量和快速迭代的关键。本文将探讨自动化测试如何与持续集成(CI)和持续部署(CD)流程相结合,以提高开发效率和软件质量。我们将分析CI/CD管道中自动化测试的最佳实践,以及如何克服实施过程中的挑战。
316 6
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
10月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1410 23
|
12月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1863 24