trove
Trove是openstack推出的Database As a Service(DBaas)服务组件,类似于AWS提出的RDS概念,虽说trove目前也支持不少的Nosql,但在M版本时,经过测试可以商用的主要还是mysql这个关系型数据库。
传统的数据库部署一般常见的是部署在固定的物理服务器上,不管是单机部署还是集群部署,自从有了虚拟机之后,也有不少直接部署在虚拟机之上的,当然也有不少文章评论说像mysql这种数据库不适合部署在虚拟机之上,我们咱不讨论,总的来说,类似于这种传统的部署方式,在做运维监控时,往往是靠DBA通过借助某些工具,或者自己编写一些脚本来尽量达到自动化运维的目的,而且还有一个明显的缺点就是,对这些数据库进行运维管理需要比较强的专业水准方可,否则如何去给mysql做主从呢。而我们现在讨论的数据库及服务呢,也和openstack其他组件服务一样,通过前端管理平台(Horizon),可以让并不是DBA身份的人可以很容易的对数据库进行用户管理,授权管理,数据库主从配置,容灾备份等常见操作。
业界喜欢把这种数据库服务称为PAAS服务,虽然从实现手段上看,并没有通过标准的容器来承载数据库(现在的kubernetes+docker是完全可以实现的)。而仍然是常见的IAAS手段,及通过虚拟机来承载,这个就不做过多讨论了,我不确定阿里云和Azure是不是也是这种IAAS+实现。当然,trove和AWS和阿里云的RDS相比起来,还是有一定的差距,比如自动化备份,参数前端配置等。
我们来看一下trove的架构图:
先介绍一下其中的几个核心模块:
trove-api: 这个很容易想到,提供基于RESTful的api入口,负责加载配置参数,接受消息请求,然后通过rabbitmq转发消息到其他模块进行处理。 /etc/trove/trove.conf配置请参考点击打开链接
trove-taskmanager: 它负责大部分的任务逻辑处理,包括数据库实例的生命周期管理,负责和其他openstack组件 nova,cinder,swift等通信。trove的数据库备份默认是存储在swift里面的,因此在openstack环境里,必须要配置有swift存储。trove-taskmanager会读取/etc/trove/trove-taskmanager.conf中的swift_url = http://172.16.12.112:8880/v1/AUTH_
读取相应的swift endpoint。
trove-conductor: 它主要负责对实例的一些状态信息进行存储。
trove-guestagent: 这是一个部署在每一个数据库实例所在虚拟机上的agent,主要用来执行trove-taskmanager通过rabbitmq发送过来的任务请求,重点是针对数据库执行的各种操作,比如启动,停止之类的。它也会保持和taskmanager之间发送心跳。 guestagent的配置文件请参考:
点击打开链接
基本介绍就先到这,后续继续以trove常使用的功能进行源码分析。
文章最后发布于: 2017-12-20 11:26:28