记一次腾讯云上MongoDB集群的问题

2019-05-24 889 0

MongoDB流量问题

在腾讯云上搭建了一个MongoDB集群,和一台实体服务器组成集群,但是在腾讯云服务器上读取时速度很慢,开始不知道原因,还以为是云硬盘io太差,但是觉得不至于差到这种地步,于是开始查原因。

偶然发现,在读取大量数据时,外网流量很大,而腾讯云的外网带宽很小,才5Mbps,觉得原因可能在这里。使用nethlogs来查看进程流量,确实如此。原因在于腾讯云服务器有两个IP地址,一个是外网IP,一个内网IP。在搭建MongoDB集群时只能用外网IP,而在连接集群时程序只能拿到内网IP,于是数据要从外网转移到内网,先上传再下载,也就是相当于读取的远程服务器的数据,多了一次转换。

于是想对MongoClient做一层包装,在读取时选择localhost的连接,不直接连接集群,但是有点复杂,所以还是直接用两个连接好了,一个负责读,一个负责写。

MongoDB用户角色

创建一个新的角色和用户,对数据库tuchuang,集合images具有只读权限:

  1. use tuchuang
  2. db.createRole({
  3. role: 'tuchuangRead',
  4. privileges: [{
  5. resource: {db: 'tuchuang', collection: 'images'},
  6. actions: ['find']
  7. }],
  8. roles: []
  9. })
  10. db.createUser({
  11. user: 'tuchuang',
  12. pwd: 'tuchuang',
  13. roles: [{role: 'tuchuangRead', db: 'tuchuang'}]
  14. })

查看开机启动项:

  1. systemctl list-unit-files | grep enabled

停用云监控

  1. sudo systemctl stop YDService
  2. sudo systemctl disable YDService