部署分片叢集

wongchaofan發表於2024-07-08

對於生產部署,請部署至少包含三個成員的配置伺服器副本集。出於測試目的,您可以建立單成員副本集。

對於本教程,配置伺服器副本整合員與以下主機關聯:

配置伺服器副本整合員
主機名
會員 0
cfg1.example.net
成員 1
cfg2.example.net
成員 2
cfg3.example.net
1啟動配置伺服器副本集的每個成員
啟動每個 mongod時, mongod透過配置檔案或命令列指定設定。
sharding:
  clusterRole: configsvr
replication:
  replSetName: <replica set name>
net:
  bindIp: localhost,<hostname(s)|ip address(es)>  #包括配置伺服器副本集的其他成員以及分片叢集的其他成員

mongod透過將--config選項設定為配置檔案路徑來啟動。

mongod --config <path-to-config-file>
2連線到其中一個配置伺服器。
連線mongosh到其中一個配置伺服器成員。
mongosh --host <hostname> --port <port>
3啟動副本集。
mongosh執行該rs.initiate()方法。
rs.initiate()可以採用可選的副本集配置檔案。在 副本集配置檔案中,包括:
  • 設定為或選項_id中指定的副本集名稱replication.replSetName--replSet

  • configsvr欄位設定true為配置伺服器副本集。

  • members陣列中的每個副本整合員都有一個文件。

rs.initiate(
  {
    _id: "myReplSet",
    configsvr: true,
    members: [
      { _id : 0, host : "cfg1.example.net:27019" },
      { _id : 1, host : "cfg2.example.net:27019" },
      { _id : 2, host : "cfg3.example.net:27019" }
    ]
  }
)
僅在副本集的一個且僅在一個mongod例項上執行rs.initiate()。

對於生產部署,請使用至少包含三個成員的副本集。出於測試目的,您可以建立單成員副本集。

分片副本集不能使用與配置伺服器副本集相同的名稱。

啟動每個 mongodmongod透過配置檔案或命令列指定設定。

sharding:
    clusterRole: shardsvr
replication:
    replSetName: <replSetName>
net:
    bindIp: localhost,<ip address>
  • 根據您的部署新增其他設定,例如 storage.dbPathnet.port。有關配置檔案的更多資訊,請參閱配置選項

mongod --config <path-to-config-file>
2連線到分片副本集的一個成員。
mongosh --host <hostname> --port <port>
3啟動副本集。
mongosh執行該rs.initiate()方法。

rs.initiate()可以採用可選的副本集配置文件。在複製副本集配置文件中,包括:
_id欄位設定為replication.replSetName或--replSet選項中指定的副本集名稱。
成員陣列,其中副本集的每個成員都有一個文件。

以下示例啟動一個由三名成員組成的副本集。

僅在副本集的一個且僅在一個mongod例項上執行rs.initiate()。
rs.initiate(
  {
    _id : "myReplSet",
    members: [
      { _id : 0, host : "s1-mongo1.example.net:27018" },
      { _id : 1, host : "s1-mongo2.example.net:27018" },
      { _id : 2, host : "s1-mongo3.example.net:27018" }
    ]
  }
)
開始mongos使用配置檔案或命令列引數指定配置伺服器。
如果使用配置檔案,請將sharding.configDB設定為配置伺服器副本集名稱和至少一個副本整合員,格式為<replSetName>/<host:port>。
sharding:
  configDB: <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019
net:
  bindIp: localhost,<hostname(s)|ip address(es)>

mongos開始指定--config 選項和配置檔案的路徑。

mongos --config <path-to-config>
mongosh --host <hostname> --port <port>

以下操作將單個分片副本集新增到叢集:

sh.addShard( "<replSetName>/s1-mongo1.example.net:27018,s1-mongo2.example.net:27018,s1-mongo3.example.net:27018")
碎片和索引
如果集合已經包含資料,則在對集合進行分片之前,必須建立一個支援分片鍵的索引。如果集合為空,MongoDB將建立索引作為sh.shardCollection()的一部分。

MongoDB 提供了兩種對集合進行分片的策略:

  • 雜湊分片使用 單個欄位的 雜湊索引作為分片鍵來跨分片叢集對資料進行分割槽。

sh.shardCollection("<database>.<collection>", { <shard key field> : "hashed" } )

基於範圍的分片可以使用多個欄位作為分片鍵,並根據分片鍵值將資料劃分為連續的範圍。

sh.shardCollection("<database>.<collection>", { <shard key field> : 1, ... } )

總結:

  1. 設定配置檔案,啟動配置伺服器副本集(3個)mongod 27019
  2. 連線其中一個,執行初始化配置伺服器
  3. 設定配置i檔案,啟動分片副本集(3個)mongod 27018
  4. 連線其中一個,執行初始化分片複製集伺服器
  5. 設定mongos配置檔案(檔案裡需要配置伺服器資訊),啟動路由伺服器mongos 27017
  6. 連線到路由伺服器,新增分片副本集
  7. 對集合進行分片

相關文章