MongoDB 主服务器和从服务器 - Windows 或 Linux

MongoDB 主服务器和从服务器 - Windows 或 Linux

我最近将我的 MS Sql Server DB 移至 Windows Server 2008 上的 MongoDB (2.0)。它包含 2 个数据库,具有以下统计数据。(两个数据库每秒的读取/写入次数约为 100 次)。这些写入由在同一 DB 服务器上运行的 .Net 应用程序执行。

> db.stats()
{
        "db" : "FirstDB",
        "collections" : 112,
        "objects" : 94020788,
        "avgObjSize" : 62.86065307174409,
        "dataSize" : 5910208136,
        "storageSize" : 14340792320,
        "numExtents" : 1277,
        "indexes" : 110,
        "indexSize" : 4279800784,
        "fileSize" : 27837595648,
        "nsSizeMB" : 16,
        "ok" : 1
}

> db.stats()
{
        "db" : "SecondDB",
        "collections" : 10,
        "objects" : 2926198,
        "avgObjSize" : 158.5025346883567,
        "dataSize" : 463809800,
        "storageSize" : 720027648,
        "numExtents" : 49,
        "indexes" : 8,
        "indexSize" : 115248896,
        "fileSize" : 2080374784,
        "nsSizeMB" : 16,
        "ok" : 1
}

我发现 MongoDB 可以以所需的读/写速度保存我的所有数据。现在我需要专家的帮助来增强我的单服务器(数据库 + 应用程序)设置的可靠性;

但是,在 1 个月的时间里,我遇到了以下 MongoDB-On-Windows 问题;

  • 由于收款违规导致意外关机
  • MongoDB 不释放已删除对象的磁盘空间(目前约为 28 GB 并且还在增长)
  • 页面错误数量增加
  • 无法控制 RAM 中的数据(无法在 RAM 中预加载所需数据并在几分钟后删除)
  • 频繁出现数据库错误,例如:无法从传输连接读取数据......

对我来说,可靠性/备份/性能最好的救援设置是什么?

  1. 将 MongoDB 移至 Linux(前提是使用此数据库的 .Net 应用程序将驻留在同一个 LAN 内的 Windows Server 上)?或者
  2. 设置一个双服务器副本集,主服务器在 Windows 上,从服务器在 Linux 上?或者
  3. 你建议什么……?

編輯-1:

> db.serverStatus()
{
        "host" : "OWNEROR-GTPD0H9",
        "version" : "2.2.2",
        "process" : "mongod",
        "pid" : 5972,
        "uptime" : 2246315,
        "uptimeMillis" : NumberLong("2246314871"),
        "uptimeEstimate" : 1418073,
        "localTime" : ISODate("2013-02-01T18:20:48.371Z"),
        "locks" : {
                "." : {
                        "timeLockedMicros" : {
                                "R" : NumberLong(1009609910),
                                "W" : NumberLong("41166641284")
                        },
                        "timeAcquiringMicros" : {
                                "R" : NumberLong("233444382285"),
                                "W" : NumberLong("26675293061")
                        }
                },
                "admin" : {
                        "timeLockedMicros" : {
                                "r" : NumberLong("20598738435"),
                                "w" : NumberLong(0)
                        },
                        "timeAcquiringMicros" : {
                                "r" : NumberLong("681905051780"),
                                "w" : NumberLong(0)
                        }
                },
                "local" : {
                        "timeLockedMicros" : {
                                "r" : NumberLong(7054206),
                                "w" : NumberLong(0)
                        },
                        "timeAcquiringMicros" : {
                                "r" : NumberLong(323140436),
                                "w" : NumberLong(0)
                        }
                },
                "FirstDB" : {
                        "timeLockedMicros" : {
                                "r" : NumberLong("40372661580"),
                                "w" : NumberLong("54059509747")
                        },
                        "timeAcquiringMicros" : {
                                "r" : NumberLong("769458843030"),
                                "w" : NumberLong("357708107433")
                        }
                },
                "SecondDB" : {
                        "timeLockedMicros" : {
                                "r" : NumberLong("25053503869"),
                                "w" : NumberLong("395081595504")
                        },
                        "timeAcquiringMicros" : {
                                "r" : NumberLong("69429086729"),
                                "w" : NumberLong("9163194312205")
                        }
                }
        },
        "globalLock" : {
                "totalTime" : NumberLong("2246314871000"),
                "lockTime" : NumberLong("41166641284"),
                "currentQueue" : {
                        "total" : 54,
                        "readers" : 52,
                        "writers" : 2
                },
                "activeClients" : {
                        "total" : 2,
                        "readers" : 0,
                        "writers" : 2
                }
        },
        "mem" : {
                "bits" : 64,
                "resident" : 69,
                "virtual" : 34059,
                "supported" : true,
                "mapped" : 16793,
                "mappedWithJournal" : 33586
        },
        "connections" : {
                "current" : 114,
                "available" : 19886
        },
        "extra_info" : {
                "note" : "fields vary by platform",
                "page_faults" : 631285910,
                "usagePageFileMB" : 6848,
                "totalPageFileMB" : 49132,
                "availPageFileMB" : 34274,
                "ramMB" : 24567
        },
        "indexCounters" : {
                "note" : "not supported on this platform"
        },
        "backgroundFlushing" : {
                "flushes" : 37430,
                "total_ms" : 86130745,
                "average_ms" : 2301.115281859471,
                "last_ms" : 3853,
                "last_finished" : ISODate("2013-02-01T18:19:49.233Z")
        },
        "cursors" : {
                "totalOpen" : 227,
                "clientCursors_size" : 227,
                "timedOut" : 125,
                "totalNoTimeout" : 226
        },
        "network" : {
                "bytesIn" : 46807928165,
                "bytesOut" : 24400717839,
                "numRequests" : 462799358
        },
        "opcounters" : {
                "insert" : 92590009,
                "query" : 92755757,
                "update" : 183285338,
                "delete" : 7489,
                "getmore" : 1004,
                "command" : 94208472
        },
        "asserts" : {
                "regular" : 0,
                "warning" : 0,
                "msg" : 0,
                "user" : 97431,
                "rollovers" : 0
        },
        "writeBacksQueued" : false,
        "dur" : {
                "commits" : 17,
                "journaledMB" : 0.139264,
                "writeToDataFilesMB" : 0.033338,
                "compression" : 2.2571516556184057,
                "commitsInWriteLock" : 0,
                "earlyCommits" : 0,
                "timeMs" : {
                        "dt" : 3291,
                        "prepLogBuffer" : 0,
                        "writeToJournal" : 8,
                        "writeToDataFiles" : 1,
                        "remapPrivateView" : 38
                }
        },
        "recordStats" : {
                "accessesNotInMemory" : 3942359,
                "pageFaultExceptionsThrown" : 15956,
                "FirstDB" : {
                        "accessesNotInMemory" : 163718,
                        "pageFaultExceptionsThrown" : 6931
                },
                "SecondDB" : {
                        "accessesNotInMemory" : 3778641,
                        "pageFaultExceptionsThrown" : 9025
                },
                "admin" : {
                        "accessesNotInMemory" : 0,
                        "pageFaultExceptionsThrown" : 0
                },
                "local" : {
                        "accessesNotInMemory" : 0,
                        "pageFaultExceptionsThrown" : 0
                }
        },
        "ok" : 1
}

答案1

我建议不要使用 Windows 来托管 MongoDB 服务器。原因如下:

  1. 您已经看到了意外行为,例如意外关机、磁盘空间问题、RAM 问题等等。
  2. 支持社区“期待”Linux 上的标准 MongoDB,它使一切变得更容易,特别是当您寻求社区支持时。
  3. 最近有人发布了有关 Windows 上的 MySQL 服务器因不兼容升级而出现故障的帖子,不难想象同样的事情可能会发生,因为大多数更新都会针对 SQL Server 之类的东西进行测试,但可能不会针对 Mongo 进行测试。

我会更加谨慎地在 Linux 上运行 Mongo,而使用不同操作系统上的从属服务器。在某种程度上,我甚至会担心在不同 Linux 发行版上运行从属服务器(主要是因为 glibc 变化等)。我无法想象在什么情况下我会认为这样的集群是好事。

计划如下:

迁移您的 MongoDB 服务器,以便它们在 Linux 上。认真的说。

增加 MongoDB 服务器的数量:2 服务器副本集美好的,除了拥有奇数个服务器(特别是奇质数)意味着多数选择要容易得多之外,如果您有 2 个服务器,并且它们都无法互相看到,那么您就会遇到难以解决的裂脑场景。

你可以有 2 个主服务器,并且一个节点仅有的是否进行仲裁..

如果你有 3、5、7 台服务器,那么你至少有一个节点可以作为仲裁者并决定哪个集合是活动集。这就是为什么建议的最低配置为 3 成员组由 10Gen 提供。

相关内容