openstack数据库读写分离调研

阿凡达2018-07-20 14:10

现状

随着openstack集群规模的扩大,现有的H版本数据库作为整个集群中的单点组件也面临着越来越大的访问压力。社区采用的方式是通过conductor集中数据库访问链接,通过cell v2分库,减轻每个数据库的压力。现有H版本只能采用conductor服务降低并发连接数,但是并发数下降也会带来数据库访问性能的降低。因此我们打算使用读写分离方式提升数据库访问性能。

方案调研

现在无论是mysql官方还是第三方厂商都提供了比较成熟的数据库读写分离中间件,这些插件各有其特点。下面简单介绍一下查询到的几种方案:

  • mysql proxy

    是mysql官方提供的中间件,可以实现数据库的分析,监控。通过配置lua脚本也可以实现数据库的读写分离。其优点是读写分离由本身实现,不需要应用程序适配。但是这个组件由于架构设计不合理,代码非常复杂。到现在版本仍然没有GA,官方也不建议在生产环境中部署。从操作系统厂商的反应来看,debian7中是加入官方源的,debian7则将其中官方源中移除了。

  • MySQL Router

    mysql官方提供的另一个中间件,可以将数据库访问自动路由到后端数据库来实现数据库的HA,水平扩展等功能。其对数据库读写分离是通过不同的路由信息实现的。写操作路由到主库,读操作路由到从库上。这种方式要求应用程序修改数据库访问代码,对读写操作分别连接mysql router的不同端口,由mysql router路由到不同的数据库。对我们而言,这种方式太重了,需要大量修改openstack底层代码。

  • 第三方厂商提供的数据库产品

    现在各公有云厂商或者数据库中间件厂商也都提供了成熟的数据库读写分离方案,比如阿里云RDS,360 atlas(mysql proxy 二次开发)等。这些中间件都实现了较完善的高可用,读写分离等策略。但是在我们私有云应用场景中使用公有云厂商提供的产品不太合适,第三方厂商提供的组件则无法保证稳定性,出现异常也没有高效的解决途径。

对策

最近我们完成了nova数据库冗余数据的定时清理功能,降低了数据库的整体数据量。数据库读写性能在现有数据规模下可能不再是性能瓶颈,可以暂时放弃数据库读写分离方案。

本文来自网易实践者社区,经作者岳文远授权发布。