记一次腾讯云上MongoDB集群的问题
MongoDB流量问题
在腾讯云上搭建了一个MongoDB集群,和一台实体服务器组成集群,但是在腾讯云服务器上读取时速度很慢,开始不知道原因,还以为是云硬盘io太差,但是觉得不至于差到这种地步,于是开始查原因。
偶然发现,在读取大量数据时,外网流量很大,而腾讯云的外网带宽很小,才5Mbps,觉得原因可能在这里。使用nethlogs
来查看进程流量,确实如此。原因在于腾讯云服务器有两个IP地址,一个是外网IP,一个内网IP。在搭建MongoDB集群时只能用外网IP,而在连接集群时程序只能拿到内网IP,于是数据要从外网转移到内网,先上传再下载,也就是相当于读取的远程服务器的数据,多了一次转换。
于是想对MongoClient做一层包装,在读取时选择localhost的连接,不直接连接集群,但是有点复杂,所以还是直接用两个连接好了,一个负责读,一个负责写。
MongoDB用户角色
创建一个新的角色和用户,对数据库tuchuang,集合images具有只读权限:
use tuchuang
db.createRole({
role: 'tuchuangRead',
privileges: [{
resource: {db: 'tuchuang', collection: 'images'},
actions: ['find']
}],
roles: []
})
db.createUser({
user: 'tuchuang',
pwd: 'tuchuang',
roles: [{role: 'tuchuangRead', db: 'tuchuang'}]
})
查看开机启动项:
systemctl list-unit-files | grep enabled
停用云监控
sudo systemctl stop YDService
sudo systemctl disable YDService