摘要: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的概念架构图,trove的主要操作也是围绕这几个概念实现的,分别为instance操作、datastore操作、backup操作、cluster操作、configuration操作、replica操作、user操作和database操作。下面展示了它们的部分操作,详细的操作参数可通过trove --help获得。
- 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权限
- 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信息
- 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
- 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
- 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:把新的
• trove configuration-update:更新一个configuration group的信息
- replica操作
为了支持数据库的高可用,trove可动态添加或删除一个instance副本。
• trove create [--replica_of
• trove detach-replica: 去除一个instance的副本
- 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的权限信息
- 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点,诚邀业界同仁一同品鉴。