MongoDb Replica Set解決了容錯和單點故障問題,但單台機器的儲存和承受能力有限,Sharding就是為了海量儲存和動態擴容而產生的。這才有了Replica Set+Sharding高可用架構。
Sharding Cluster主要包括如下三部分:
Shards:每個shard都是replica set,具有自動備份、容錯、恢複能力,當然在開發環境你可配成單個mongod
Config Server:儲存metadata,包括每個shard的基本資料和chunk資訊,生產環境至少有3個config server
Mongos:叢集的入口,用戶端與之互動,複雜把請求轉寄到對應的shard上。
搭建MongoDB Replica Set+Sharding環境:
拓撲圖:
說明:由於本地測試,部署將在一台機器完成,並且mongos和config server都只用了一個執行個體。
配置:
複本集rep1配置:
#master.conf配置dbpath=/data/mongo_cluster/masterlogpath=/data/mongo_cluster/master/logs/master.logpidfilepath=/data/mongo_cluster/master/master.pidlogappend=true replSet=rep1bind_ip=192.168.15.130port=10000fork=truejournal=trueshardsvr=true #slave.conf配置dbpath=/data/mongo_cluster/slavelogpath=/data/mongo_cluster/slave/logs/slave.logpidfilepath=/data/mongo_cluster/slave/slave.pidlogappend=truereplSet=rep1bind_ip=192.168.15.130port=10001fork=truejournal=trueshardsvr=true #arbiter.conf配置dbpath=/data/mongo_cluster/arbiterlogpath=/data/mongo_cluster/arbiter/logs/arbiter.logpidfilepath=/data/mongo_cluster/arbiter/arbiter.pidlogappend=truereplSet=rep1bind_ip=192.168.15.130port=10002fork=truejournal=trueshardsvr=true
複本集rep2配置:
#master.conf配置dbpath=/data/mongo_cluster2/masterlogpath=/data/mongo_cluster2/master/logs/master.logpidfilepath=/data/mongo_cluster2/master/master.pidlogappend=true replSet=rep2bind_ip=192.168.15.130port=10004fork=truejournal=trueshardsvr=true #slave.conf配置dbpath=/data/mongo_cluster2/slavelogpath=/data/mongo_cluster2/slave/logs/slave.logpidfilepath=/data/mongo_cluster2/slave/slave.pidlogappend=truereplSet=rep2bind_ip=192.168.15.130port=10005fork=truejournal=trueshardsvr=true #arbiter.conf配置dbpath=/data/mongo_cluster2/arbiterlogpath=/data/mongo_cluster2/arbiter/logs/arbiter.logpidfilepath=/data/mongo_cluster2/arbiter/arbiter.pidlogappend=truereplSet=rep2bind_ip=192.168.15.130port=10006fork=truejournal=trueshardsvr=true
配置Replica Set主、備、仲裁節點:(點擊查看)
config server配置:
#config server配置configsvr.confdbpath=/data/mongo_config_serverlogpath=/data/mongo_config_server/logs/configsvr.logpidfilepath=/data/mongo_config_server/configsvr.pidlogappend=true bind_ip=192.168.15.130port=10007fork=truejournal=trueconfigsvr=truemongos配置:#mongos配置 mongos.conflogpath=/data/mongos/logs/mongos.logpidfilepath=/data/mongos/mongos.pidlogappend=true bind_ip=192.168.15.130port=10008fork=trueconfigdb=192.168.15.130:10007
啟動:
#啟動shard/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster/master/master.conf/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster/slave/slave.conf/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster/arbiter/arbiter.conf /usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster2/master/master.conf/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster2/slave/slave.conf/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_cluster2/arbiter/arbiter.conf #啟動config server/usr/local/mongodb3.0.5/bin/mongod -f /data/mongo_config_server/configsvr.conf #啟動mongos/usr/local/mongodb3.0.5/bin/mongos -f /data/mongos/mongos.conf
配置mongos,設定分區規則:
(1)串連mongos與replica set
#進入mongos/usr/local/mongodb3.0.5/bin/mongo 192.168.15.130:10008#串連mongos與replica setmongos> db.runCommand( { addshard : "rep1/192.168.15.130:10001"});{ "shardAdded" : "rep1", "ok" : 1 }mongos> db.runCommand( { addshard : "rep2/192.168.15.130:10004"});{ "shardAdded" : "rep2", "ok" : 1 }#查看分區配置mongos> db.runCommand( { listshards : 1 } );
(2)設定分區規則並測試
#指定testdb分區生效db.runCommand( { enablesharding :"testdb"});#指定資料庫裡需要分區的集合和片鍵db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } ) #測試> use testdb; #插入測試資料> for (var i = 1; i <= 1000; i++) db.table1.save({id:i,"test1":"testval1"});#查看分區情況如下> db.table1.stats();