以前,我有三台机器:10.10.10.5,10.10.10.6和10.10.10.7
10.10.10.5运行:
- 配置数据库
- mongoS
- shard3,shard4 mongod的过程(这些是主要在它们的碎片) 个
10.10.10.6运行:
- mongoS
- shard3 shard4 mongod的过程(这些是在它们的碎片次级)
10.10.10.7运行:
- mongoS
- shard3,shard4 mongod进程(这些是仲裁员)
我的应用程序连接到10.10.10.6 mongoS。
一切运行良好约一年。然后,10.5和10.6经历了非常沉重的负荷,特别是10.6。 CPU使用率和平均负载非常高,因此我计划在群集中添加两台新机器。
我创建了两个分片:shard1和shard2。新机10.10.10.8运行:
- shard1(主),shard2(二次)
- mongoS
新机10.10.10.9运行:
- shard1(二次),shard2(初级)
- mongoS
给老成员10.10.10.7我还添加了shard1,shard2仲裁者。
问题是,当我添加两台新机器(使用addShard命令)时,大约5个小时后他们完成了迁移(虽然我无法确定),然后10.10.10.6主机再次具有极端高负载,平均负载约90.5(4 cpus)。
同时有很多写入和读取请求到10.10.10.6 mongoS应用程序,但很少有数据或没有数据写入新的两台机器。我使用iostat来查找两台新机器中几乎没有io字节。
10.10.10.6为什么如此高负载?
此前,即使在高峰时间,最高负荷约为30。5
所以,你们可以提出一些建议,如何解决负载问题并让新机器启动并运行?
编辑:我的环境的更多信息
10.5,10.6,10.7,10.8,10.9都具有相同的种源:4CPUS,6G纪念品,150G磁盘空间,所述netio是光纤。
Shard3 datasize = 16g和Shard4 datasize 15g。
我使用1.8.2
追加一个小问题,你认为仲裁器neccesary我用命令:配置= {_ ID: 'shard3',成员:[{_ ID:0,主机: '服务器5:27019',优先:1},{_ id:1,host:'server6:27019'},{_ id:2,host:'server7:27019',arbiterOnly:true}]} server7拥有150g disckspace,所以如果我改变sever7如果更好地分担10.6的阅读压力,从仲裁者到中等。 – Jack
您是否会将10.7上的所有仲裁进程转换为次级进程?如果这样会有很大的开销。如果将读取首选项设置为次级,则在该节点上拥有两个辅助节点可能会帮助读取压力。这是因为每个辅助可能是一个阅读目标,而不仅仅是你现在拥有的单一目标。 –
亲爱的安德烈,我还在广告下添加了一条新评论,你看到了吗? 谢谢 – Jack