对于公有云计算平台来说,只有计算、网络与存储这三大服务往往是不太够的,在目前互联网应用百花齐放的背景下,几乎所有应用都使用到数据库,而数据 库承载的往往是应用最核心的数据。此外,在大数据分析越来越盛行的背景下,对数据库的可靠便捷管理也变得更为重要。因此,DBase as a Service(DBaaS,数据库服务)也就顺理成章地成为了云计算平台为用户创造价值的一个重要服务。

对比Amazon AWS中各种关于数据的服务,其中最著名的是RDS(SQL-base)和DynamoDB(NoSQL),除了实现了基本的数据管理能力,还具备良好的 伸缩能力、容灾能力和不同规格的性能表现。因此,对于最炙手可热的开源云计算平台Openstack来说,也从Icehouse版加入了DBaaS服务, 代号Trove。直到去年底发布的Openstack Liberty版本,Trove已经经过了4个版本的迭代发布,目前已经成为Openstack官方可选的核心服务之一。本文将深入介绍Trove的原 理、架构与功能,并通过实践来展示Trove的应用。

Trove的设计目标

“Trove is Database as a Service for OpenStack. It’s designed to run entirely on OpenStack, with the goal of allowing users to quickly and easily utilize the features of a relational or non-relational database without the burden of handling complex administrative tasks. ”这是Trove在官方首页上对这个项目的说明,有两个关键点。一个是从产品设计上说,它定位不仅仅是关系型数据库,而且还涵盖非关系数据库的服务。另一 个是从产品实现上说,它是完全基于Openstack的。

从第一点可以看出Trove解决问题的高度已经超越了同类产品。因为我们从其他云 计算平台对比去看,关系型和非关系型数据库都是由不同的服务去提供(比如AWS的RDS和DynamoDB),而且实现上也往往互相独立的系统,不仅UI 不同,API也不一样。而Trove的目标是抽象尽可能多的东西,对外提供统一的UI和API,尽量减少冗余实现,提升平台内聚。只要具备了实例、数据 库、用户、配置、备份、集群、主从复制这些概念,不管是关系型还是非关系型数据库,都能统一管理起来。从最新的Liberty版本发布的情况下,目前开源 的主流关系型和非关系型数据库也得到了支持,比如Mysql(包括Percona和MariaDB分支)、Postgresql、Redis、 MongoDB、CouchDB、Cassandra等等。不过根据官方的介绍,目前只有Mysql是得到了充分的生产性测试,其他的还处于实验性阶段。

而 第二点完全基于Openstack的,可以说是一个较大的创新。试想,假设你是一个云计算服务商,如果现在要提供数据库服务,只需要在原有平台软件上升级 与配置一下就行,其他什么都不需要,不需要采购数据库服务器硬件,不需要规划网络,不需要规划IDC,这是一种什么样的感觉?Trove完全构建于 Openstack原有的几大基础服务之上。打个比喻类似于Google著名的Bigtable服务是构建于GFS、Borg、Chubby等几个基础服 务之上。所以,Trove实际上拥有了云平台的一些基础特性,比如容灾隔离、动态调度、快速响应等能力,而且从研发的角度看,也大大减少了重复造轮子的现 象。

Trove的架构介绍

实 际上Trove的架构(最新版本)与Openstack Nova项目的架构是如出一辙,可以说是Nova的一个简化版。也是典型的Openstack项目架构风格。Trove所管理的各个数据库引擎的差异性主 要体现在trove-guestagent的具体manager和strategies代码实现上。架构如图所示:

trove- api是接入层,轻量级请求通过在接入层直接处理或者通过直接访问guestagent处理,比如获取实例列表、获取实例规格列表等;而比较重的请求则通 过message bus(Openstack默认实现是Rabbitmq)中转给trove-taskmanager进行调度处理。trove-taskmanager是 调度处理层,主要是处理较重的请求,比如创建实例、实例resize等。
taskmanager会通过Nova、Swift的API访问Openstack基础的服务,而且是有状态的,是整个系统的核心。trove-conductor是guestagent访问数据库的代理层,主要是为了屏蔽掉guestagent直接对数据库的访问。

在 Trove目前的实现中,一个数据库实例一一对映到一个vm,而guestagent也是运行在vm里面。vm镜像包含了经过裁剪的操作系统、数据库引擎 和guestagent(镜像具体实现没有标准,数据库引擎和guestagent也都可以在vm启动时通过网络动态装载)。而实例所在分区的硬盘是通过 Cinder提供的云硬盘。每个vm都会关联一个安全组防火墙,只允许数据库服务的端口通过(比如Mysql,默认是TCP 3306端口)。从这里可以看出,Trove创建数据库实例是非常灵活的,后期的调度也非常方便,这些都得益于Nova和Cinder。

Trove功能介绍

正如前面说的,实际上Trove是在主流的关系和非关系型数据库的一些核心概念基础上抽象出的一个系统框架,所以其实现的功能也是围绕着这些核心概念的。Trove的概念关系图:


因此Trove的主要功能也是围绕这几个概念实现的。datastore管理,Instance管理,configuration管理,database管理,user管理,replication管理,backup管理,cluster管理等等。

从 最新的Liberty版本看,目前Trove的功能还是比较多的,而且扩展性很强。可惜的是实例统计监控功能却没有看到,而统计监控功能的缺失,应该也是 导致了实例容灾的自动切换还没有实现,相信这些都会在不久的新版本中逐渐完善。不过从另外一个角度看,由于数据库对用户来说是非常关键的服务,涉及到核心 数据的数据一致性问题,目前交由用户上层去确认和切换实例也不失一个明智的选择。下面以Mysql数据库作为例子,对Trove的一些重要功能进行分析。

1、动态resize能力

分 为instance-resize和volume-resize,前者主要是实例运行的内存大小和cpu核数,后者主要是指数据库分区对应的硬盘卷的大 小。由于实例是跑在vm上的,而vm的cpu和memory的规格可以通过Nova来进行动态调整,所以调整是非常方便快捷的。另外硬盘卷也是由 Cinder提供的动态扩展功能来实现resize。resize过程中服务会有短暂的中断,是由于mysqld重启导致的。

2、全量与增量备份

目 前mysql的实现中,备份是由实例vm上的guestagent运行xtrabackup工具进行备份,且备份后的文件会存储在Swift对象存储中。 从备份创建实例的过程则相反。由于xtrabackup强大的备份功能,所以Trove要做的只是做一些粘胶水的工作。

3、动态配置更新

目前支持实例的自定义配置,可以创建配置组应该到一组实例上,且动态attach到运行中的实例中生效。

4、一主多从的一键创建

在 创建数据库实例的API中,支持批量创建多个从实例,并以指定的实例做主进行同步复制。这样就方便了从一个已有实例创建多个从实例的操作。而且 mysql5.6版本之后的同步复制支持GTID二进制日志,使得主从实例之间关系的建立更加可靠和灵活,在failover处理上也更加快速。

5、集群创建与管理(percona/mariadb支持)

Cluster功能目前在mysql原生版本暂时不支持,但是其两个分支版本percona和mariadb基于Galera库实现的集群复制技术是支持的。另外Liberty版本的Trove也提供了对mongodb的集群支持。

Trove还提供了以其他一些许多功能,使用troveclient可以有详细的帮助信息输出。对于一个要求不是很高的云数据库管理平台,Trove目前这些功能已经够用,而且能够搭配好Openstack其他服务无缝运行起来。

Trove实践例子

在 Openstack上启用Trove服务有两个要点。一个是要制作Trove的数据库实例运行的vm镜像,因为要把troveguestagent和相关 的数据库引擎(比如mysql)打包进镜像,而且需要精简OS。另外,就是要有一个包含Trove服务的Openstack环境。幸好Trove项目有个 子项目trove-integration,把这些工作都打包了,方便了开发者使用。本文实践的例子是在一个虚拟机上利用trove- integration建立带Trove的Openstack的运行环境,并且制作Trove实例运行的vm镜像(mysql镜像),并在上面搭建 mysql一主二从实例集群运行起来。

1、准备一个运行ubuntu的虚拟机(trove-integration建议用ubuntu),内存至少8G以上,CPU最少2核以上,否则跑起整个环境来会比较吃力,用libvirt快速创建一个。

2、用Git下载trove-integration(https://github.com/openstack/trove-integration.git)。 仔细查看目录可以看到其实是利用了devstack去安装整个Openstack环境,而且里面还带了diskimage-builder工具,专门制作 Openstack的各种vm镜像(利用diskimage-builder创建Trove镜像在Openstack官方也给了专门的讲解 《Building Guest Images for OpenStack Trove》http://docs.openstack.org/developer/trove/dev/building_guest_images.html)。

3、 安装带Trove的Openstack环境。进入trove-integration目录trove-integration/scripts下,运行. /redstack install,这个过程会比较长,视乎网络速度和运行的机器的速度,在我的虚拟机上运行大概1个小时多一点。redstack是一个入口程序,里面有很 多功能,可以单独运行有详细的帮助信息。

4、制作mysql的实例运行镜像,并把镜像导入Glance,在Trove中建立 datastore(比如mysql)和version(比如5.6版本)信息,运行./redstack kick-start mysql。(其中version信息是包含存放在Glance中的vm镜像信息)这个过程也有点长,因为是使用diskimage-builder根据 定义好的element去动态下载打包并配置镜像的。
实际上利用trove-instegration项目建立的实例运行的vm镜像,并没有把guestagent打包进去,而是通过vm文件系统中/etc /init/troveguestagent脚本,在vm启动的时候从宿主机上把guestagent拷贝过去,这个过程其实是很快的,因为程序比较小。

以上过程可以参考https://wiki.openstack.org/wiki/Trove/trove-integration,由于实际运行可能会由于环境问题导致出错需要重试或者具体问题具体分析。

5、利用Openstack提供的Trove客户端工具troveclient创建mysql实例并搭建集群。运行trove -h会有详细的帮助信息。

1)创建主实例

trove create my_inst_master 8 --size 10 --database my_inst_db --users admin:admin123 --datastore mysql --datastore_version 5.6 

实例名字为my_inst_master,实例规格ID是8(512MB内存),硬盘卷大小是10GB,并且创建数据库my_inst_db和用户admin(密码是admin123),数据库引擎类型是mysql,版本是5.6版本。

2)创建主实例的备份(先随便在创建的数据库实例里创建表和插入一些数据)

trove backup-create my_inst_master my_bak.0001

创建数据库实例my_inst_master的当前的备份,备份名字为my_bak.0001。

3)从主实例的备份创建两个从实例,并且建立主从关系

trove create my_inst_slave 8 --size 10 --backup my_bak.0001 --replica_of my_inst_master --replica_count 2

创建两个数据库实例,名字以mysql_inst_slave开头,实例规格ID为8,硬盘卷大小是10GB,并且用备份名为my_bak.0001的备份导入数据,且建立到实例my_inst_master的主从复制关系。

4)动态Resize主实例规格

trove resize-instance my_inst_master 2

动态调整实例my_inst_master的instance规格为2(内存2GB大小)

trove resize-volume my_inst_master 20

动态调整实例my_inst_master的硬盘卷大小为20GB

对比与总结

从以上的介绍可以知道,Openstack的DBaaS服务Trove确实有所创新,不同与业界的类似产品实现。在这样的设计目标与实现机制下,可以说有优点也有缺点,通过与典型的云数据库平台进行对别,稍微总结如下:


目 前大规模使用Trove做云数据库平台有ebay、Rackspace、HP等公司。近来也得益于Openstack的版本迭代速度较快,从Juno版本 开始每个版本Trove都会带来不少新特性,项目本身也越来越受社区重视,相信在后续版本中,Trove会补足已有的一些缺点,充分利用 Openstack平台的优势,在稳定性和可运营性方面做得更好,特别是在实例创建与调度上提升容灾级别,增加taskmanager这个中心点的容灾能 力,增加数据库实例的监控信息、自动透明切换实例的能力,所以Trove的下两个版本应该是非常值得期待。

欢迎加入OpenStack微信群,探讨技术和经验,搜索微信号“k15751091376”由管理员拉入

转载于:https://www.cnblogs.com/Dennis-mi/articles/5511380.html

OpenStack Trove2相关推荐

  1. [网摘学习]在Ubuntu上安装和配置OpenStack Nova之二

    再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.htm ...

  2. 末学者笔记--openstack共享组件:rabbitmq(3)

    openstack共享组件:消息队列rabbitmq 一.MQ 全称为 Message Queue, 消息队列( MQ )                       是一种应用程序对应用程序的通信方 ...

  3. OpenStack之虚拟机热迁移

    这里的环境是centos7版本,openstack K版 1.在各个计算节点设置权限 chmod 755 /var/lib/nova/instances 2.修改各个节点的nova.conf(/etc ...

  4. linux镜像修改密码,OpenStack 镜像修改密码方案

    现在各大linux厂商,其实已经有专门给openStack提供的镜像,不过国内的朋友,不太习惯老外做镜像的方式,经常问密码是多少.本博客提供几种修改密码方案,仅供参考. 前言 对OpenStack云主 ...

  5. devstack —— 单机部署 OpenStack 体验

    2019独角兽企业重金招聘Python工程师标准>>> devstack 是一个用来快速部署 OpenStack 的脚本. 使用非常简单,执行 ./stack.sh 即可,但是在安装 ...

  6. 《OpenStack实战》——第1章 介绍OpenStack 1.1OpenStack是什么

    本节书摘来自异步社区<OpenStack实战>一书中的第1章,第1.1节,作者: [美]V. K. Cody Bumgardner(V. K. 科迪•布姆加德纳)著,更多章节内容可以访问云 ...

  7. CHUCK手把手带你搞定OPENSTACK

    以下是原文链接:http://blog.oldboyedu.com/openstack/ 转载于:https://blog.51cto.com/bovin/1858198

  8. Openstack组件实现原理 — Keystone认证功能

    前言 Keystone实现始终围绕着Keystone所实现的功能来展开,所以在理解其实现之前,建议大家尝试通过安装Keystone这一个过程来感受Keystone在Openstack架构中所充当的角色 ...

  9. Restore Volume 操作 - 每天5分钟玩转 OpenStack(60)

    前面我们 backup 了 voluem,今天我们将讨论如何 restore volume. restore 的过程其实很简单,两步走: 在存储节点上创建一个空白 volume. 将 backup 的 ...

最新文章

  1. Matlab中计算程序运行时间的三种方法
  2. Caffe2:ubuntu修改链接方式ln
  3. 使用DDD、事件风暴和Actor来设计反应式系统
  4. Lambda表达式使用2
  5. 高薪的 10 倍工程师不能带来 10 倍的产出?
  6. ie6,ie7兼容性总结
  7. HTML5新API记录
  8. 苹果Mac批量图像格式转换软件:XnConvert
  9. [转]Android--多线程之Handler
  10. 计算机应用基础公开课,计算机应用基础-公开课教案.doc
  11. 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(2)
  12. win10计算机不显示usb,win10系统U盘不识别怎么办 没有显示U盘的解决方法
  13. 全球与中国高效无气油漆喷涂机市场深度研究分析报告
  14. QT警告Slots named on_foo_bar are error prone
  15. Verilog 实现占空比为50%的三分频 断言SVA查看波形
  16. 乌镇互联网大会发布15项世界领先科技成果
  17. 动作捕捉系统用于机器人关节位移与几何参数标定
  18. [整站源码]thinkphp古筝古琴书画培训类网站模板+前后端源码
  19. 通俗理解 三次握手四次挥手(老友依恋式)
  20. 116 · 跳跃游戏 Jump Game

热门文章

  1. 支持的存储类型有_跟我一起看博途1200系统手册之数据类型的介绍
  2. 简述中断处理的6个步骤_计算机组成原理期末考试简答题重点分解
  3. 深圳职业技术学院计算机专业组代码,深圳职业技术学院代码是多少 有哪些优势专业...
  4. linux6.3 插u盘,U盘安装centos 6.3教程(超级详细教程)
  5. Python查找列表中相加等于s的n个数字(combinations的使用)
  6. 小学教师计算机应用培训通讯稿,暑期培训通讯稿
  7. 广东机电职业技术学校计算机怎么样,广东机电职业技术学院宿舍怎么样 住宿条件好不好...
  8. html项目的文件结构,项目文件结构
  9. 操作指令详解_爱码小士丨 APP稳定性测试(附视频详解)
  10. 计算机系要考英语口语吗,2015年高考英语口语由计算机“打分”,这些细节要注意!...