首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

MongoDB 源碼分析:Mongos 啟動流程與分片架構

     編輯:關於C語言

分片集群核心組件

  • Shard:一個或多個 mongod 進程組成的副本集,存儲數據分片。
  • Chunk:集合的數據範圍 (collection, minKey, maxKey),默認 100MB,超過則分裂。
  • Config Server:存儲集群元數據(chunk 分佈、shard 信息),通常 1 或 3 台,全量複製。
  • Mongos:路由進程,客戶端入口,無狀態,可水平擴展。

Mongos 主入口 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() 執行流程:

  1. 初始化 boost::program_options 解析命令行參數(--configdb, --chunkSize, --port 等)。
  2. 檢查必選 --configdb,解析 1 或 3 個配置服務器地址。
  3. 驗證地址合法性,設置 grid.setAllowLocalHost()。
  4. 初始化 ShardingConnectionPool 連接配置服務器。
  5. 啟動後台任務:Balancer(均衡器)、ConfigManager 等。
  6. 進入網絡事件循環處理客戶端請求。

關鍵代碼片段

// 參數解析
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());
}

調試環境搭建

  1. 啟動配置服務器:mongod --configsvr --dbpath d:\data\config --port 27022
  2. 啟動分片節點:mongod --dbpath d:\data\shard1 --port 27012
  3. VS2010 設置 Mongos 項目啟動參數:--configdb localhost:27022 --port 27017
  4. 配置 Boost 路徑、斷點進入 server.cpp::main()。

架構圖解

Mongos Project Structure

VS Debug Config

總結

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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved