Openstack Trove 是 Openstack 为用户提供的数据库即服务。Trove 允许用户快速又简单的使用关系型或非关系型数据库,不需要有处理复杂管理任务的负担。在实际使用中,原生的 Trove 在创建主从模式数据库实例,如 RDS/Redis 时,需要先单独创建一个主实例,再创建一个该实例的副本,才能建立好主从关系,需要两步操作。同时在实例里,用户私有网络需要与管理网络互通,有很大的安全隐患。本文将介绍奇云在创建主从模式数据库实例上,对 Trove 做了哪些改造。
Trove 简介
Trove 能完全运行于 Openstack 中,Trove 与 Openstack 其他组件通过 Restful API 来交互。其中最主要的部分,Trove 在 Nova 中创建包含 trove-guestagent 和数据库程序的虚机,Trove 所使用的镜像存放在 Glance 中, Neutron 为 Trove 分配所要的网络信息,同时 Trove 依赖 keystone 与其他组件通信。
Trove 自身包含的组件通过消息队列来通信,它们可以运行在不同的服务器上。Trove 主要由下面这些组件组成。
API Server
Message Bus
Task Manager
Guest Agent
Conductor
Trove-api 服务对外提供创建和管理实例等 Restful API 接口,支持 Json 和 Xml 格式。Trove-api 将复杂的异步任务交给 trove-taskmanager 来处理,对于简单任务,Trove-api 也可以直接与 Trove-guestagent 通信。
Trove-taskmanager 服务主要是做一些重的任务,比如创建实例,管理实例的生命周期,对数据库实例执行一些操作等
Trove-guestagent 服务运行在每一个客户实例中,监听消息队列的消息,负责管理数据库和对数据库执行相应操作,
Trove-conductor 运行在主机上,接收从客户实例发送来的消息。
Trove 相关概念
Instance:数据库实例,一个包含数据库程序的 Openstack 虚机
Replica instance:数据库副本实例,创建时需要指定从属于哪个主实例
Datastore/Dastastore version:用来表示和存储数据库的类型、版本、对应虚拟机镜像等信息。当用户创建一个数据库实例时需要指定 Datastore 和版本
Trove 在奇云中的实践
系统架构
奇云基于原生 Mitaka 版的 Trove,结合自身需要,做了很多改造,增加了自动备份服务 Trove-backup,存活监控服务 Trove-monitor, 优化了主从切换,实例扩容,参数配置等操作,在这里不进行一一详述。下面主要讲述奇云在创建主从模式的数据库实例,例如 RDS/Redis,做了哪些操作。
创建主从模式的实例
奇云 Trove 支持一个 API 创建请求创建出主从两个实例,两个实例分属于两个物理集群(master/slave),之后再关联好主从关系,这样主从实例就可以正常使用了。实例虚机内包含两块网卡,管理网卡可与管理网络通信,而与用户数据网络隔离,并且用户数据网络增加一个服务 IP(VIP),便于主从切换的实现。下图所示是奇云 Trove 在创建 RDS 实例的过程,该网络交互过程是在虚机分配的管理网卡上。
主从切换
用户通过 VIP 来访问数据库实例,当主节点宕机或不可用时,管理员可以进行主从切换,切换节点角色,把 VIP 切换到从节点上,保证服务的可用性。
本文转载自公众号 360 云计算(ID:hulktalk)。
原文链接:
https://mp.weixin.qq.com/s/oloafWaDFTJRIG9IHxcN3A
评论