我们目前正在建立我们的mongodb生产环境。目前我们只有一个专用的mongodb数据库服务器。我们将在不久的将来用第二台服务器扩展它,我已经向管理层表示,对于理想的情况,我们也应该得到第三台服务器。
由于我已经知道我们将在不久的将来使用分片和复制,我想为它做好准备。
我现在的想法是从开发配置开始(正如mongo的文档所说的那样)。
每当我们的第二台服务器可用时,我想将此设置扩展为具有2个配置服务器和2个分片(副本集)的配置。
当然,当我们的第三台服务器可用时,它具有功能齐全的分片群集配置。
在阅读mongo的文档时,我的注意事项是de开发设置不应该用于生产。
MongoDb Development Configuration
请记住,我们将很快添加更多服务器,已经配置开发配置是不是一个坏主意,这样我们可以在第二台服务器可用时轻松添加第二台服务器?
答案 0 :(得分:1)
设置开发分片设置后#39;我找到了我的anwser。当然,我很乐意分享,以防任何人遇到与开始时相同的问题。
在我的情况下,可以从开发设置开始直到我的新服务器到达。这是一个暂时的情况,当我的新服务器到来时,我能够轻松扩展我的复制品。造成这种情况的原因有很多原因:
说明显而易见的是,还没有复制。由于我在一台机器上运行分片,因此存在单点故障。如果机器或一个节点发生故障,群集将不再工作。
现在这部分很有意思。添加第二台服务器后,我确实有主节点和辅助节点。主节点用于写入,辅助节点用于读取。我已经消除了没有复制的问题,而且我的数据具有更高的可用性。但是,我注意到使用2个成员的副本集,如果复制集的一个成员发生故障(即使这是次要成员),主要部分也会逐步降级到辅助节点。这与MongoDb使用的投票机制有关。 See Markus' more detailed answer on this.。由于复制集中没有更多的原色,我的集群不再具有功能。现在,如果我使用仲裁器,我也可以消除这个问题。
当您拥有3个成员的replicataset时,自动故障转移将启动。每当节点发生故障时,将自动分配另一个主节点,群集将继续像以前一样继续执行。
在我的测试期间,我还得到了一个点,我的一个MongoD.exe实例由于"内存不足异常"而停止工作。我正在运行一个包含3个replicasets的集群,这意味着每台机器至少运行了4个mongod.exe进程(3个用于replicaset分片,1个用于配置服务器replicaset)。除了查询没有进行优化之外,我还注意到了WiredTiger storage engine by default can use up to 50% of ram minus one gigabyte。也许在一台机器上拥有多个replicaset-shard并不是最好的选择,但我能够通过限制有线内存使用来消除这个问题。
我希望这个答案可以帮助任何开始为MongoDb设置复制和分片的人。