mongod 進程組成的副本集,存儲數據分片。(collection, minKey, maxKey),默認 100MB,超過則分裂。main()int main(int argc, char* argv[]) {
try { return _main(argc, argv); }
catch (DBException& e) { /* log & exit */ }
catch (std::exception& e) { /* log & exit */ }
catch (...) { /* log & exit */ }
return 20;
}
_main() 執行流程:
boost::program_options 解析命令行參數(--configdb, --chunkSize, --port 等)。--configdb,解析 1 或 3 個配置服務器地址。grid.setAllowLocalHost()。ShardingConnectionPool 連接配置服務器。Balancer(均衡器)、ConfigManager 等。// 參數解析
po::options_description options("General options");
po::options_description sharding_options("Sharding options");
sharding_options.add_options()
("configdb", po::value<string>(), "1 or 3 comma separated config servers")
("chunkSize", po::value<int>(), "maximum amount of data per chunk")
("ipv6", "enable IPv6 support")
("jsonp", "allow JSONP access via http");
po::variables_map params;
if (!CmdLine::store(argc, argv, options, hidden, positional, params)) return 0;
// 必選 configdb
if (!params.count("configdb")) { error; return 4; }
vector<string> configdbs;
splitStringDelim(params["configdb"].as<string>(), &configdbs, ",");
if (configdbs.size() != 1 && configdbs.size() != 3) { error; return 5; }
// 實例化 HostAndPort,驗證地址
for (auto& s : configdbs) {
HostAndPort addr(s);
if (first) grid.setAllowLocalHost(addr.isLocalHost());
}
mongod --configsvr --dbpath d:\data\config --port 27022mongod --dbpath d:\data\shard1 --port 27012--configdb localhost:27022 --port 27017server.cpp::main()。

Mongos 啟動核心在於參數解析 → 配置服務器連接 → 後台任務啟動 → 請求路由循環。理解此流程是深入分片路由、均衡遷移、Chunk 管理的基礎。