Rocky版新功能集锦之三:Trove

摘要:8月31日,备受业界关注的OpenStack第18个版本Rocky正式发布。在人工智能,机器学习,NFV和边缘计算等用户的驱动下,Rocky版本的OpenStack变得比以往更强大,它带来了数十种增强功能,并支持各种硬件架构,包括裸机管理服务等,这些更新和升级能够很好的满足基础设施的新需求。OpenStack正力争为业界提供一个开放,完善,稳定,功能齐全的最优解决方案。今天将围绕Rocky版本的Trove项目,对项目的新特性进行展示,业界需要掌握的关键点都在这里。

Trove简介

Trove是OpenStack官方的database-as-service项目,提供关系型或非关系型数据库的部署、配置、备份、恢复和监控,大大简化了操作流程。它在OpenStack Havana版本中被孵化,并被正式集成在OpenStack Icehouse版本中。项目的原始赞助商为HP和Rackspace,主要贡献者有Tesora,Rackspace,HP,IBM,Redhat,eBay,Mirantis。

Rocky版本Trove功能变更一览


在最新发布的OpenStack Rocky版本中,Trove未引入新的特性,更注重修复部分bug,例如:

1、MariaDB在主备切换的时候,如果在将副本附加到新主服务器之前重新激活旧主服务器,则可能会在旧主服务器上意外创建新的GTID,并同步到这些副本,从服务器无法变更为主服务器。该问题通过先将副本附加到新主服务来解决。

2、取消从Nova创建Volume,直接通过cinderclient创建volume。

3、Peviously root disable API返回没有任何内容的HTTP 200响应,现在将返回更合适的HTTP 204响应。

Trove项目架构


图1 Trove系统架构图

图1展示了Torve项目的架构,它由trove-api,trove-taskmanager,trove-conductor和trove-guestagent子系统构成,各子系统之间通过RPC进行通信。在这4个子系统中:

1、trove-api 提供REST风格的API,完成一些数据层面的逻辑操作(直接操作DB),比如获取实例列表、集群列表等,将复杂的异步任务它都交给taskmanager去完成,例如创建虚拟机、卷等操作。

2、trove-taskmanager与OpenStack的核心组件Nova、Cinder、Neutron等进行操作,完成数据库实例的创建、删除等资源操作。

3、trove-guestagent集成在vm镜像里面,创建、管理、备份数据库等,并通过周期性任务,实时更新数据库状态。

4、trove-conductor作为trove数据库访问的中间件,避免了trove-guestagent直接访问trove数据库。

Trove抽象出系统的公共基础架构,通过对基础架构的继承开发,可支持各种不同类型数据库。这也使得用户可以通过统一的方式操作不同类型的数据库,降低了使用难度。OpenStack Trove目前支持Cassandra,CouchBase,CouchDB,DataStax Enterprise,DB2,MariaDB,MongoDB,MySQL,Oracle,Percona Server,PostgreSQL,Redis和Vertica。

Trove常用操作


图2 Trove概念架构图

图2显示了Trove的概念架构图,trove的主要操作也是围绕这几个概念实现的,分别为instance操作、datastore操作、backup操作、cluster操作、configuration操作、replica操作、user操作和database操作。下面展示了它们的部分操作,详细的操作参数可通过trove --help获得。

1. Instance操作

Instance代表一个运行有mysql或MongoDB等的虚拟机,对Instance的操作即可落在虚拟机上,也可落在mysql、MongoDB上。

•    trove create:创建一个trove instance 
•    trove delete:删除一个trove instance 
•    trove resize-instance:调整虚拟机的flavor 
•    trove resize-volume:调整mysql或MongoDB等载盘的大小 
•    trove restart:重启一个trove instance 
•    trove show:显示一个trove instance的detail信息 
•    trove update:更新一个trove instance的信息
•    trove list: 展示当前项目下的所有trove instances
•    trove root-disable: 禁止mysql等获得root权限
•    trove root-enable: 运行mysql等获得root权限

2. datastore操作

Datastore维护着当前Trove能够支持的数据库系统版本和对应镜像等信息。
•    trove datastore-list:显示有哪些datastore trove 
•    datastore-show:显示一个datastore的detail信息 
•    trove datastore-version-list:显示一个datastore的version list 
•    trove datastore-version-show:显示一个datastore的一个version的detail信息 

3. backup操作

trove提供备份mysql或MongoDB中的数据库到swift的操作,支持全量备份和增量备份。

•    trove backup-create:创建一个数据库的backup 
•    trove backup-delete:删除指定ID的backup 
•    trove backup-list:列出可用的所有backups 
•    trove backup-list-instance:列出指定instance对应数据库的所有可用backups
•    trove backup-show:显示指定ID的backup的detail信息 
•    trove backup-copy:从一个backup copy生成一个新的backup 

4. cluster操作

针对有些数据库系统有cluster的概念,比如MongoDB。

•    trove cluster-create:创建一个新的cluster 
•    trove cluster-delete:删除一个cluster 
•    trove cluster-instances:列出一个cluster的所有instances 
•    trove cluster-list:列出所有的clusters 
•    trove cluster-show:显示指定ID的cluster的detail信息
•    trove cluster-grow: 向cluster中添加更多的instance
•    trove cluster-shrink: 从cluster中移除instance
•    trove cluster-seset_status: 设置cluster的任务状态为None
•    trove cluster-upgrade:将cluster升级到一个新的datastore

5. configuration group操作

trove提出了配置组的概念,这是为了是用户可以定制不同Instance中数据库系统的配置参数,针对不同的数据库系统类型,支持的配置参数也不相同,比如mysql支持的配置参数定义在:trove/templates/mysql/validation-rules.json。此外,trove限制每个instance只能配置一个configuration group。

•    trove configuration-create:创建一个新的configuration group 
•    trove configuration-delete:删除一个configuration group 
•    trove configuration-attach:attach一个configuration group到一个trove instance上 
•    trove configuration-detach:detach一个trove instance上的configuration group 
•    trove configuration-default:显示一个trove instance的默认configuration group 
•    trove configuration-instances:显示绑定到一个configuration group上的所有trove instances 
•    trove configuration-list:显示所有的configuration group 
•    trove configuration-show:显示一个configuration group的detail信息 
•    trove configuration-parameter-list:列出指定version的datastore支持的configuration group配置参数 
•    trove configuration-parameter-show:显示指定version的datastore支持的configuration group的某一项配置的详细信息 
•    trove configuration-patch:把新的<values> patch到一个configuration group 
•    trove configuration-update:更新一个configuration group的信息 

6. replica操作

为了支持数据库的高可用,trove可动态添加或删除一个instance副本。 

•    trove create [--replica_of <source_instance>] [--replica_count <count>] :为一个instance添加一个新的副本
•    trove detach-replica: 去除一个instance的副本

7. user操作

trove支持创建数据库系统的user,并支持赋予/收回 user访问数据库系统的权限。

•    trove user-create:创建一个数据库系统的user 
•    trove user-delete:删除一个数据库系统的user 
•    trove user-grant-access:赋予user访问database(可以同时指定多个)的权限
•    trove user-revoke-access:收回user访问database的权限 
•    trove user-list:list一个数据库系统的所有users 
•    trove user-show:显示一个数据库系统中指定user的detail信息 
•    trove user-show-access:显示一个数据库系统中指定user访问database的权限信息 

8. database操作

trove支持在一个数据库系统上创建多个database;

•    trove database-create:在一个数据库系统上创建database 
•    trove database-delete:删除一个数据库系统上的database 
•    trove database-list:列举一个数据库系统上的所有databases

除了这些操作,Trove还有针对security group、metadata、log等,这些操作使得Trove功能十分强大,满足了用户的需求。


Rocky版本遇到的问题与解决方案

目前,Trove向虚拟机中注入guestagent的配置文件等是通过Nova api中的personality参数,但是此参数已经从OpenStack Queens版本中启用,将来会从Nova代码中移除。未来,Trove将使用Nova api中的--user-data参数进行文件的注入,具体操作如下:

1、重建trove.instance.models.BaseIntance中的get_injected_file函数,用来获取注入文件内容、路径、所有者和权限,生成InjectedFile对象,请将所有需要注入的文件构成InjectedFile list返回。

2、调整trove.taskmanger.models.FreshIntanceTask中的_prepare_userdata函数,基于InjectFile对象建立cloud-config脚本。如果Trove中还存在datastore_manager的cloudinit脚本,将会对该cloudinit脚本进行检测,然后将它和cloud-config脚本转化为mime multi part file类型脚本,以防止传递给cloud-init的数据类型大于一种。

3、利用-user-data传递参数给Nova api,虚拟机启动的时候,cloud-init通过执行脚本完成文件的注入。

未来Trove server与Trove guest agent间的通信将采用octaviad的网络架构模式。

参考链接:
https://github.com/openstack/trove
https://wiki.openstack.org/wiki/Trove
https://docs.openstack.org/developer/trove/
https://docs.openstack.org/releasenotes/trove/rocky.html

搞个大事件

值此Rocky版本发布之际,九州云将于10月10日上午10:00,正式线上同步发布全球首款基于 Rocky版本第七代全新开源云管理平台 ——Animbus® 7.0系列产品。

10月10日10点,诚邀业界同仁一同品鉴。

猜你喜欢

转载自blog.csdn.net/OpenInfra/article/details/82870437