Trove作为OpenStack的核心项目之一,功能已逐步完善。Trove主要由下面几个模块组成:
·API服务器
·消息总线
·任务管理器
·Guest Agent
·Conductor
其中,每个模块封装相对独立的功能,并与其他模块进行消息交互,完成对数据库的统一管理、配置和监控。
1.API服务器
API服务器是一个HTTP协议的Web服务器,它提供了支持Json和XML的RESTful API,通过这些接口接收外部的数据库访问和管理指令。
API服务器和两个Trove模块直接发生交互。它通过任务管理器来处理复杂的、异步的任务,如创建一个数据库实例。同时可以直接通过Guest Agent来处理简单的任务,如查询MySQL的用户、查询一条数据等,这些任务都是同步的。API服务器根据接收到的指令类型进行相应操作,将复杂的异步指令转发给任务管理器,再由任务管理器协调各个模块共同完成任务;如果是简单的同步指令,则直接转发给Guset Agent,由Guset Agent触发数据库完成,并返回响应的处理结果。
2.消息总线
消息队列在OpenStack其他模块中经常使用,Trove也同样沿用这个技术来完成Trove向其他各个模块的消息传递。一个消息队列在API服务器、任务管理器和Guest Agent之间传递消息。云控制器的通信则通过多个API服务器的HTTP请求来完成。
3.任务管理器
任务管理器处理数据库中相对复杂的任务,如配置实例、管理实例的生命周期、操作实例等。它从API服务器获取请求信息,根据请求的类型,分解出任务并下发到响应的模块,完成争取请求任务的调度,最终将响应结果返回给API服务器。复杂的任务包括改变数据库大小、创建数据库实例、删除数据库实例等。
4.Guest Agent
Guest Agent和实例端部署一起部署运行,负责管理和执行操作数据存储。每个数据存储的实例都有一个Guest Agent负责完成特定任务。
5.Conductor
Conductor负责接收各个实例的状态变更信息,并更新到本地,从而实现数据库实例的监控。Conductor和Guest Agent类似,监听消息队列,从消息队列中获取各数据库实例的状态信息。
Trove的总体架构和内部交互如图10-2所示。
图10-2 Trove总体架构和内部交互