標籤:同步 啟動 刪除節點 gets status source 不能 訪問 db2
Mongodb存在三種層級的分布式配置:主從配置、叢集配置以及叢集分區配置,建議我們採用叢集配置。
主從配置
- 啟動主伺服器: mongod.exe --dbpath ..\db --port 27017 –master
- 啟動若干個從伺服器:mongod.exe --slave --source 127.0.0.1:27017 --dbpath ..\db2 --port 27018,source後面是主伺服器的地址和連接埠號碼。
這種方式簡單靈活,可用於備份、故障恢複,讀擴充。為了平衡負載,一般通過讀寫分離模式,即主庫寫、從庫讀。缺點是如果主庫down了,就不能寫了,不會自動回復。
叢集配置
- 啟動三個執行個體:mongod.exe –replSet rs --dbpath ..\db --port 27017,mongod.exe –replSet rs --dbpath ..\db --port 27018,mongod.exe –replSet rs --dbpath ..\db --port 27019。接下來要初始化Replica Sets環境
- 登入任何一個執行個體:mongo.exe --port 27018 –host localhost
- config_rs={_id:‘rs‘,members:[{_id:0,host:‘127.0.0.1:27017‘},{_id:1,host:‘127.0.0.1:27018‘},{_id:2,host:‘127.0.0.1:27019‘}]}
4. 執行rs.initiate(config_rs),成功後執行rs.status()即可看到配置的叢集。等所有節點的“stateStr”為“Primary”或者“secondary”則叢集同步好了。
5. 之後如果要添加或者刪除節點,使用rs.add(hostportstr), rs.remove(hostportstr)
在叢集分兩類節點一個Primary和多個secondary(使用rs.isMaster()看節點的類型),Primary可讀寫,secondary只能讀。當Primary 出錯時,剩下的secondary會推舉一個成為Primary,當出錯的Primary恢複正常時會自動添加到叢集並成為secondary。
6. MongoDB.Driver 的連結配置:
mongodb://localhost:3000,localhost:3001,localhost:3002/?replicaSet=rs&readPreference=primaryPreferred,如果需要更好的效能可以使用 readPreference= secondaryPreferred實現讀寫分離。
叢集分區配置
- 建立叢集shard-a (同叢集配置中的過程)
mongod.exe --shardsvr --replSet shard-a --dbpath "..\data\rs-a-1" --port 3000
mongod.exe --shardsvr --replSet shard-a --dbpath "..\data\rs-a-2" --port 3001
mongod.exe --shardsvr --replSet shard-a --dbpath "..\data\rs-a-3" --port 3002
config_rsa={_id:‘shard-a‘,members:[{_id:0,host:‘127.0.0.1:3000‘},{_id:1,host:‘127.0.0.1:3001‘},{_id:2,host:‘127.0.0.1:3002‘}]}
rs.initiate(config_rsa)
2. 建立叢集shard-b
mongod.exe --shardsvr --replSet shard-b --dbpath "..\data\rs-b-1" --port 30100
mongod.exe --shardsvr --replSet shard-b --dbpath "..\data\rs-b-2" --port 30101
mongod.exe --shardsvr --replSet shard-b --dbpath "..\data\rs-b-3" --port 30102
config_rsb={_id:‘shard-b‘,members:[{_id:0,host:‘127.0.0.1:30100‘},{_id:1,host:‘127.0.0.1:30101‘},{_id:2,host:‘127.0.0.1:30102‘}]}
rs.initiate(config_rsb)
3. 啟動設定管理員
mongod.exe --configsvr --dbpath "..\data\config-1" --port 27019
mongod.exe --configsvr --dbpath "..\data\config-2" --port 27020
mongod.exe --configsvr --dbpath "..\data\config-3" --port 27021
4. 啟動Mongos(也可以多個)
Mongos.exe --configdb localhost:27019,localhost:27020,localhost:27021 --port 40000
把分區shard-a, shard-b添加到分區叢集中:(使用mongo.exe登入Mongos)
sh.addShard("shard-a/127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002")
sh.addShard("shard-b/127.0.0.1:30100,127.0.0.1:30101,127.0.0.1:30102")
5. 開啟分區集合(登入到Mongos)
sh.enableSharding("UserSubscribe_DB")
sh.shardCollection("UserSubscribe_DB.Sector",{_id:1})
6. 查看Mongos狀態
sh.status
db.getSiblingDB("config").databases.find():查看分區資料庫的設定
db.getSiblingDB("config").collections.find():查看分區集合的設定
7. MongoDB.Driver 的連結配置
mongodb://localhost:40000/
8. 對於已有非分區資料,再使用分區集合的方案
首先把現有資料匯出,然後在根據以上過程配置分區叢集和為庫開啟分區(選擇合適的鍵進行分區),最後通過Mongos匯入資料。這樣通過Mongos就能訪問了。
Mongodb的分布式配置