直击PTG|Cinder项目重要变化纪要

由 OpenStack 基金会举办的 Project Teams Gathering(以下简称 PTG )会议已于9月11-15日在 Denver 举行,共计420名开发者参加,踊跃讨论有关 OpenStack 下一个版本 Queens cycle 的开发工作,积极推动OpenStack各项能力的提升,甚至许多开发工作也在 PTG 过程中实际展开。


Cinder 是 OpenStack Block Storage 的项目名称,它为虚拟机 (VM) 提供了持久块存储。对于可扩展的文件系统、最大性能、与企业存储服务的集成以及需要访问原生块级存储的应用程序而言,块存储通常是必需的。它类似于 Amazon 的 EBS 块存储服务,OpenStack 中的实例是不能持久化的,需要挂载 volume,在 volume 中实现持久化。Cinder 就是提供对 volume 实际需要的存储块单元的实现管理功能。


Cinder Team 合影


本次 PTG 为期5天,在 PTG 举办期间,OpenStack基金会组织了 Cinder sessions 进行讨论与现场开发。Cinder sessions 是从13日到15日,包括不少重要项目改进和重要功能热点,有些话题是从巴塞罗那峰会遗留下来的。


Team会议讨论情景


EasyStack派出多名工程师参与了本届PTG,并应开源云中文社区邀请做前方报道。EasyStack研发工程师Apolloliuhx参与了 Cinder sessions。


以下是来自Apolloliuhx带来的会议纪要:


笔者第一次参加 PTG,所以不能与之前的会议进行比较,但总的来说感觉这是一次较为成功的会议。


以下涉及的所有讨论详见:https://etherpad.openstack.org/p/cinder-ptg-queens


Day 1


1.Replication Failback


比较让人激动的一个 feature ,将实现完整的容灾恢复功能。之前 Cinder 项目的一些驱动已经支持 failover api,但是 failover 之后实现 failback 是尚未实现完成,因此 PTG 会议上重点讨论了该问题。Failback 之后可能原来的 primary system 就不再是原来的系统,但很难跟用户解释实现这个得有多困难,比如RBD可以实现这个功能,但其他 Drivers 呢?这些 Drivers 有很多需要考虑的问题。


这是一个怎么样的过程呢?用简短的话来说就是:从 primary cluster failover 到secondary cluster,promote 这个集群到 primary 让其正常运行,这个过程中需要添加一个状态“ promoting ”,这样我们可以看到整个 promotion 过程,并且可以看到这个过程需要很长时间完成,完成之后状态会修改为“ replicated ”。现在对于 replication 这个功能并未完成,因此用户没有使用。Cinder team 在此次PTG 会议上重点讨论了该功能,不过需要进一步讨论,不光得考虑对其他 drivers 的影响,还有 active/active HA 影响。


BP链接:

https://blueprints.launchpad.net/cinder/+spec/replication-backend-promotion


2.Micro version设置constraints


为 micro vision 设置 constants 。为了避免 rebase 的时候起冲突,比较好的方式是给 micro vision 设置 constants ,比如 GROUP_REPLICATION=3.35,这样在之后使用到改版本的功能代码会比较方便的直接 rebase 。


3.最小功能集文档化


Cinder 准备对每个 divers 进行文档化归类,并指出某些 driver 不提供某个功能或者某个值。


Cinder为每个driver实现基本的功能,包括:


  • Volume Create/Delete

  • Volume Attach/Detach

  • Snapshot Create/Delete

  • Create Volume from Snapshot

  • Get Volume Stats

  • Copy Image to Volume

  • Copy Volume to Image

  • Clone Volume

  • Extend Volume

  • 每个driver为scheduler服务提供调度的状态值

  • driver_version

  • free_capacity_gb

  • storage_protocol

  • total_capacity_gb

  • vendor_name

  • volume_backend_name


4.自动配置项生成


为方便直接生成配置项文件,cinder使用oslo库来实现新的配置项生成。Oslo config and oslo policy 提供了sphinxconfiggen and sphinxpolicygen 插件来使用产生ini格式的文档,还有 sphinxext plugins可以生成漂亮的表格格式的文档,利用这些工具来提取 cinder 项目所有配置项,最终生成配置项文档。


5.浓缩/标准化基本配置项集合


很多 drivers 的配置项是一样的或者说是重复的,比如 SAN 驱动的很多选项其他一些 driver 可以共用,需要浓缩一下配置项集合,弃用那些多余的部分。对于弃用某个配置项, nova 的做法是在选项中加入信息说明该选项已经弃用,请用新的选项代替,保证至少一个版本以上才可考虑删除,每次弃用或者删除都要加入 releasenote ,并且写入相应的驱动文档。


Day 2 & Day 3


以下是 Cinder 第二天和第三天的会议纪要,其中 1、2、3 是 Nova 和 cinder 跨项目综合讨论。


1.Multi-attach


这个无疑是本次PTG跨项目 ( nova/cinder ) 讨论里的重头戏。Cinder 项目为了支持 multi-attach 功能将引入新的 attach/detach api 。启用该功能的主要的问题是怎么处理共享连接。Nova 调用 create_attachment(没有 connector ),cinder 的配置项 is_using_shareable_backend_connection_thingy 设置为True;如果 is_using_shareable_backend_connection_thingy 设置为 True,nova 调用 delete_attachment(有 connector )时会有一个 host 锁,这个锁将影响所有和挂载有关系的操作,比如 create_attachment 。从 Policy 控制的角度,通过 nova 的 policy 可以允许 multi-attach 从 volume 启动虚机,通过 cinder 的 policy ,cinder 需要后端允许的前提下才能实现 multi-attach ,并且只允许 read-only 的卷 multi-attach 。能否从一个 multi-attach 卷起虚机,还需要看操作系统是否能实现。os-brick 实现 host 的共享连接,必须提的是锁只用在使用了共享连接的 host 上,且基于 IQN 。最后还讨论了升级连接调用的问题,针对旧的 attachment 升级,但是具体尚无结论。


2.Cinder 和 Nova 关联的 API 更新


会上提到关于 Cinder 和 Nova 存在关联的 API 更新的问题,以保证两边 API 调用时功能的正常使用。


下面是新旧 API 的列表:


1)新 API 包括:attachment_create, attachment_update, attachment_complete, attachment_delete。信息并返回该信息。


2)旧 API 包括:reserve, os-initialize_connection, os-attach, begin_detaching, os-terminate_connection, os-detach。


Attachment create/attachment delete 更新之后,使用了新的工作流,如果想使用原来的 api,只需要使用 Attachment create 保留卷,新的 API 可以通过 attachment update 更新 connector 。Multi-attach 功能正在实现,需要提供接口来显示一个卷是否是可共享的,nova 可以根据返回的 volume 状态来抉择是否能挂载。


3.API之刷新卷 connection info


不得不考虑cinder后端修改之后,nova 能够及时修改连接后端的信息。在某些连接信息修改之后,比如后端 ceph 集群 ip 修改后能够上报新的 ip,不中断用户使用的情况下能够刷新cinder连接信息,这里的连接信息是指 Nova的block_device_mappings 表,cinder 上报的 os-initialize_connection 信息会被记录到这张表上,然后根据这张表更新连接。如果要刷新信息重启并不能实现,很多 API 多不提供刷新,比如 cold migrate/resize, stop/start, suspend/resume, and rebuild,可能需要将现有 API 改进一下,目前建议使用热迁移和 hard reboot,利用 attachment_delete/create 来更新存储后端。


BP链接:

https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/cinder-new-attach-apis.html


4.Volume 加密


加密分前端和后端两种,目前我们实现的大都是前端加密,后端加密支持的不多。据华为反映,客户有对后端加密的需求,比如能对每个 volume 进行加密。Cinder 已经支持加密机制,比如GPFS driver(闲置状态时的加密),但是一些后端只支持加密整个后端。Barbican 提供加密,诸如华为并没有使用其来加密,并且在加密的时候能够指定 key ,现在的 key 一般都是自动创建好的。接下来 Cinder 将考虑更新旧的key manager,使其能够获取静态 key,在创建 volume 并加载的过程中使用Barbican来做加密处理。这里还要提一下对 volume 数据的加密和对 volume 的加密是有区别的。LUKS 是对数据的加密,不管 volume 是在进行数据传输过程还是限制状态,数据均是加密的。


5.Quota管理性能提升


这个讨论主要涉及批量创建/删除资源,一次对多个资源进行操作,有一种情况是在两个人同时创建多个资源的时候,一个成功,另一个可能会不成功,这个问题还没有具体结论,需要进一步讨论,可能需要结构化查询来处理这种批量操作,可以借鉴 nova cell 的 quota 管理实现 【1】,详见 cinder 的BP链接:【2】。


BP链接:

【1】https://specs.openstack.org/openstack/nova-specs/specs/pike/approved/cells-count-resources-to-check-quota-in-api.html

【2】https://review.openstack.org/#/c/496562/


6.卷的Qos实现


Cinder 要讨论的 Qos 具体来说就是对卷的流量控制。Cinder 对流量的控制有两种方式,一种是使用卷 metadata 来标记,另一种就是与卷类型绑定的 qos spec 。公有云的应用场景比较多见,创建每个卷资源是和具体的流量绑定好的,这需要创建不同的卷类型,用户创建卷时候根据需要来选择合适的卷类型,如果需要改变挂载卷的流量,可以通过更改卷类型来实现,但是疑虑就是对一个使用中的卷修改类型,一些后端可能会遇到麻烦。因此建议使用 metadata 的方式来限制卷流量大小。


7.Generic backup实现


这个是本次 PTG 讨论中较大的功能变动之一,作为从巴塞罗那峰会就开始讨论的话题。为什么这么说呢?将把 backup 服务融合到 cinder scheduler 中。具体部署 backup 服务器有两种方式:1. 耦合方式,运行 volume 服务的服务器上,用于备份该服务器上的卷;2.非耦合方式,通过 rabbitmq 的 Robin 循环和其他的 backup 服务进行通信。Cinder scheduler 融合 backup 服务,考虑实现第二种方式,将更新现有的 scheduler 功能相关代码。


8.利用Backup创建卷


考虑到端用户的需求,会上决定新加了从备份来创建卷的功能。讨论是因为 restore 卷,不能指定 volume 的大小、类型、卷名以及一些特征。Cinder 目前支持从快照、镜像创建卷。这次添加从备份创建,简单地理解就是 restore+resize ,因此当创建小于源备份大小的卷会报错,只能创建更大或者一样大小的卷。


9.Active/Active HA 测试


Cinder 将实现一个 library ,该库可以用在所有服务里进行各种测试。引入这个测试框架来进行 HA 的测试,vendor 可以通过给出输入来测试每个 Driver ,包括输入一些错误信息来测试服务结果是否正常,并且提供相应的指南和 RBD 测试样例。


10.验证安装文档


由于 doc team 不能顾及到项目文档,需要实践并验证安装文档( install guide )是否有错,包括 RedHat and Ubuntu 的文档,如果有错开发者包括社区贡献者可以及时提出 bug 作更新。


11.关于bulk create volume


简单来说,就是一次创建多个 volume 。为什么着重提出这个问题呢,因为客户需要在部署一个虚机的时间里把需要的 volumes 创建出来,从 nova 的角度需要执行一个 bulk attach 请求。但是具体怎么实现呢?一个解决方案就是利用 group API ,按 group 来处理,包括创建、删除等。cinder create 一次创建多个 volume,如果有失败的 volume,可以不管,选择最后创建成功的那些。但是问题是创建 volume 的这个 pool 究竟需要多大的的 size ,实际管理起来会存在很多问题。具体实践起来,还得考虑 scheduler、quotas 等。


再次特别感谢EasyStack的工程师们从 Denver 发回的报道!


阅读推荐:

OpenStack能拯救混合云吗?

容器管理:如何防止容器蔓延与成本蔓延


投稿邮箱:openstackcn@sina.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
PTG(Python to MySQL)是一种将Python与MySQL数据库进行交互的方法。通过PTG,你可以使用Python编程语言连接到MySQL数据库,并执行各种数据库操作,如查询、插入、更新和删除数据等。 要使用PTG连接到MySQL数据库,你需要先安装Python的MySQL驱动程序,例如`mysql-connector-python`或`pymysql`。然后,你可以使用这些驱动程序提供的API来连接到MySQL数据库,并执行相应的操作。 以下是使用PTG连接到MySQL数据库的一般步骤: 1. 安装Python的MySQL驱动程序(如`mysql-connector-python`或`pymysql`)。 2. 导入相应的模块,如`mysql.connector`或`pymysql`。 3. 建立与MySQL数据库的连接,提供主机名、用户名、密码和数据库名称等必要信息。 4. 创建一个游标对象,用于执行SQL语句。 5. 使用游标对象执行SQL语句,如查询、插入、更新和删除等操作。 6. 提交对数据库的更改(如果有)。 7. 关闭游标和数据库连接。 下面是一个简单的示例代码,演示了如何使用PTG将数据插入到MySQL数据库中: ```python import mysql.connector # 建立与MySQL数据库的连接 cnx = mysql.connector.connect( host="localhost", user="your_username", password="your_password", database="your_database" ) # 创建游标对象 cursor = cnx.cursor() # 执行插入数据的SQL语句 sql = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)" values = ("value1", "value2") cursor.execute(sql, values) # 提交对数据库的更改 cnx.commit() # 关闭游标和数据库连接 cursor.close() cnx.close() ``` 请注意,上述示例中的`your_username`、`your_password`、`your_database`、`your_table`、`column1`和`column2`等都需要根据你的实际情况进行替换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值