MongoDB集群分片部署

MongoDB中使用分片集群結構分布:

三個主要組件:

  • Shard:

    用於存儲實際的數據塊,實際生產環境中一個shard server角色可由幾台機器組個一個replica set承擔,防止主機單點故障

  • Config Server:

    mongod實例,存儲了整個 ClusterMetadata,其中包括 chunk資訊。

  • Query Routers:

    前端路由,客戶端由此接入,且讓整個集群看上去像單一資料庫,前端應用可以透明使用。

 

Shard 分片服,實例存儲實際數據:

一個片區應該分布在不同機器上,片區採用副本集模式

副本集(replica set): 分為三個節點,主服,備服,仲裁服。在實際部署時,為了避免單點故障,同一個副本集中的成員,應該部署在不同主機上。

 

 

啟動命令:

mongod –replSet=rs-test1 –dbpath=/data/mongodb/mongodb-4.4.2/shard1/db27017/ –port=27017 –logpath=/data/mongodb/mongodb-4.4.2/shard1/db27017/mongo.log –bind_ip=0.0.0.0 —shardsvr –fork

mongod –replSet=rs-test1 –dbpath=/data/mongodb/mongodb-4.4.2/shard1/db27018/ –port=27018 –logpath=/data/mongodb/mongodb-4.4.2/shard1/db27018/mongo.log –bind_ip=0.0.0.0 –shardsvr –fork

mongod –replSet=rs-test1 –dbpath=/data/mongodb/mongodb-4.4.2/shard1/db27019/ –port=27019 –logpath=/data/mongodb/mongodb-4.4.2/shard1/db27019/mongo.log –bind_ip=0.0.0.0 –shardsvr –fork

  初始化:
  mongo 127.0.0.1:27019

  cfg={_id:”rs-test1″, members:[{_id:0, host:’127.0.0.1:27017′, arbiterOnly:true},{_id:1, host:’127.0.0.1:27018′, priority:2},{_id:2, host:’127.0.0.1:27019′, priority:1}]};
  rs.initiate(cfg);

  //查看副本集狀態
  rs.status()

ConfigServer 配置服

存儲集群所有節點、分片數據路由資訊。默認需要配置3個Config Server節點。

這裡也應該是副本集模式,測試使用一個實例

mongod –replSet=rs-test-conf –dbpath=/data/mongodb/mongodb-4.4.2/dbconfig/ –port=27020 –logpath=/data/mongodb/mongodb-4.4.2/dbconfig/mongo.log –bind_ip=0.0.0.0  –fork —configsvr

  初始化:
    mongo 127.0.0.1:27020
    cfg={_id:”rs-test-conf”, members:[{_id:0, host:’127.0.0.1:27020′, priority:2}]};
    rs.initiate(cfg);

 

Mongos 路由

提供對外應用訪問,所有操作均通過mongos執行。一般有多個mongos節點。數據遷移和數據自動平衡。

 部署多個mongos實例可支援高可用性和可擴展性。一個常見的模式是在每個應用程式伺服器上部署一個 mongos實例。

在每個應用伺服器上部署一個 mongos實例可以減少應用程式和mongos之間的網路延遲。

另外,也可以在專用主機上部署 mongos實例。大型部署適用,因為它使客戶端應用程式伺服器的數量與mongos節點的數量脫鉤,可以更好地控制mongod實例服務的連接數。

mongos –port 27030 —configdb=rs-test-conf/127.0.0.1:27020 –logpath=/data/mongodb/mongodb-4.4.2/route.log –bind_ip=0.0.0.0  –fork

  添加分片:
  mongo 127.0.0.1:27030

  use admin;
  sh.addShard(“rs-test1/127.0.0.1:27017”);
  sh.addShard(“rs-test1/127.0.0.1:27018”);
  sh.addShard(“rs-test1/127.0.0.1:27019”);

  查看狀態:
  sh.status()

 

Tags: