建立配置伺服器副本集
對於生產部署,請部署至少包含三個成員的配置伺服器副本集。出於測試目的,您可以建立單成員副本集。
對於本教程,配置伺服器副本整合員與以下主機關聯:
配置伺服器副本整合員
|
主機名
|
---|---|
會員 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()。
建立分片副本集
對於生產部署,請使用至少包含三個成員的副本集。出於測試目的,您可以建立單成員副本集。
分片副本集不能使用與配置伺服器副本集相同的名稱。
啟動分片副本集的每個成員
啟動每個 mongod
時, mongod
透過配置檔案或命令列指定設定。
sharding: clusterRole: shardsvr replication: replSetName: <replSetName> net: bindIp: localhost,<ip address>
-
根據您的部署新增其他設定,例如
storage.dbPath
和net.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
分片叢集
開始
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, ... } )
總結:
- 設定配置檔案,啟動配置伺服器副本集(3個)mongod 27019
- 連線其中一個,執行初始化配置伺服器
- 設定配置i檔案,啟動分片副本集(3個)mongod 27018
- 連線其中一個,執行初始化分片複製集伺服器
- 設定mongos配置檔案(檔案裡需要配置伺服器資訊),啟動路由伺服器mongos 27017
- 連線到路由伺服器,新增分片副本集
- 對集合進行分片