360SDN.COM

UOS 4.0 - MongoDB 集群测试 (性能,高可用)

来源:UnitedStack有云  2017-09-20 15:44:08    评论:0点击:

MongoDB 集群测试 

性能,高可用

测试环境

在CT环境的44, 45, 46,部署mongodb 1 master 2 replcias高可用环境。系统使用CentOS 7,mongodb version v2.6.11

测试程序

写入程序:

查询程序:

删除程序:

测试结果:

增大数据规模测试:

大规模数据删除时CPU(200%)和内存(6G)占用都很高。

MongoDB集群,100个线程写入1000万条记录:


高可用测试

集群正常时,10.0.100.45为主节点:

关掉10.0.100.45的mongod服务,主节点迁移到10.0.100.46:

mongodb读写服务可以正常继续执行。

重新启动45节点的mongod服务,45节点mongod成为secondary节点,在经过一段时间后,45升级为primary节点

Ceilometer结合测试

测试环境

测试环境使用的是公有云上申请的一台4核4G内存的Ubuntu 14.04云主机,在上面搭建的M版的devstack,并且挂载了一个300G的云硬盘到存储MongoDB数据的目录,如下图

测试数据

ceilometer上的监控数据存储在数据库上的主要有resource, meter数据,这其中meter数据量远大于resource数据,所以我们这里模拟MongoDB存储meter数据。devstack上ceilometer默认监控的都是image和image.size的meter数据,所以这里用脚本模拟生成了大量这样的数据。存储到数据库的数据大概是这样的


通过调用ceilometer源码ceilometer/ceilometer/storage/impl_MongoDB中提供的record_metering_data(data)函数接口,来模拟正常情况下meter数据的存储,大概存储了1000万条数据,其中模拟数据中重要的一项meter数据的时间戳timestamp是以时间datetime.datetime(2016,7,26,12)为基准,下一个数据累计加5秒来生成的,模拟每隔5秒插入一个数据。

MongoDB查询性能

测试时可以发现MongoDB的插入和删除速度都非常快,下面我们就来测试一下在1000万条数据中查询特定的特定条件的数据的性能。

由于对于监控数据来说,可能通常是以时间为条件来查询,所以ceilometer在用MongoDB存储meter数据时,主要创建了resource_id 和timestamp两个索引,来优化查询速度。

我们1000万meter数据,模拟每隔5秒一个数据,得到的大概是1.6年的监控数据。

查询特定一天的监控数据量,平均大概需要0.046秒。

查询一个星期的监控数据量,需要0.3秒左右

查询一个月的数据量,平均大概需要1秒左右

查询一年的数据量,大概平均需要14秒左右

除此之外,源码里还提供了get_resource()和get_meter_statistics()等方法,可以比较快速的根据条件来查询监控数据。

注意事项

使用MongoDB存储比较占用空间,当数据量较大的时候,需要注意加硬盘。刚开始测试的时候没有在云主机上加硬盘,当存贮了接近400万条数据的时候就存不进去了,一查发现磁盘空间被占满,下图是当时的情况

存贮1000万条数据占用了大概24G的存储空间,好在可以在MongoDB中有存活时间(TTL),可以自动清理超过设置时间的存储数据

总结

MongoDB有很多优点,特别是MongoDB还支持自动分片(将集合自动切分为小块,这些块分散在若干片中,每一片只负责总数据的一部分), 当然你想手动分片也可以。MongoDB的存储数据的文件夹

另外需要注意的是MongoDB之所以插入数据那么快,其中的一个原因是:MongoDB默认不检测数据是否插入成功,也就是说默认是一种不安全的操作,为了更好的性能,数据库不等待是否插入成功的回复码,当然也可以设置成安全的操作,但那样可能会降低性能.不安全的操作对日志之类的数据影响不大。

阅读原文

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权