天天看點

MongoDB ReplacaSet & Sharding叢集安裝 配置 和 非叢集情況的安裝 配置 -摘自網絡

單台機器做sharding

--單機配置叢集服務(Sharding)
--shard1_1
mongod --install  --serviceName MongoDBServerShard1 --serviceDisplayName MongoDBServerShard1 --shardsvr --port 27017 --dbpath "G:\MongoData\shard1_1" --oplogSize 100 --logpath "G:\MongoData\log\shard1_1.log" --logappend    --profile=1 --slowms=5 --rest

--shard2_1
mongod --install  --serviceName MongoDBServerShard2 --serviceDisplayName MongoDBServerShard2 --shardsvr  --port 27018 --dbpath "F:\MongoData\shard2_1" --oplogSize 100 --logpath "F:\MongoData\log\shard2_1.log" --logappend    --profile=1 --slowms=5 --rest


--配置config services(配置shard config)
mongod --install  --serviceName MongoDBConfigServer --serviceDisplayName MongoDBConfigServer --configsvr --dbpath "F:\MongoData\config" --port 20000 --logpath "F:\MongoData\log\config.log" --logappend


--配置mongos service
比如在172.16.1.86機器上安裝如下服務。
mongos --install  --serviceName MongoDBMongosServer --configdb 172.16.1.86:20000 --port 30000 --chunkSize 5 --logpath "F:\MongoData\log\mongos.log" --logappend

db.runCommand({addshard:"172.16.1.86:27017",allowLocal:true });
db.runCommand({addshard:"172.16.1.86:27018",allowLocal:true });
      

  

多台機器做sharding & ReplacaSet

分擔讀寫負載
三台伺服器,如果将所有資料分為三片,每一台作為其中一片資料的寫入點,其他兩個節點進行拷貝,使讀寫壓力在'一定條件'下分布在三台機器。
      
自動故障轉移
在單點損壞條件下,可以立刻将主伺服器轉換到随機另外一台從屬伺服器的分片上。不過之前未處理的請求将會被全部抛棄。
      
靈活配置分片 
不設定表分片,表就不會進行分片,會完整儲存在該庫所在的主Shard中。可以在配置某資料庫資訊啟用分片之後,單獨設定某個表的資訊在其他分片中分散存儲。并設定盡量有規律的分片條件。

      
動态添加删除
可以在壓力接近瓶頸的時候動态的進行分片添加,并設定該伺服器為某分片寫入點,分散IO壓力,也可以在伺服器出現異常時,進行分片資料的遷移和分片解除安裝。在資料庫叢集運作中時,添加分片,資料自動流入此分片。
在資料庫叢集運作中時,删除分片,系統立即設定此分片狀态 "draining" : true ,之後慢慢将此分片資料轉移到其他分片。
      
實時檢視狀态
可以在資料庫資訊設定和資訊的CRUD操作時,實時進行資料庫狀态、資料分片資訊、資料狀态的監控。
      
-------------------------------------------------
(非叢集情況)
--配置單點服務
mongod --logpath "G:\MongoData\log\log.log"  --logappend --dbpath "G:\MongoData\db" --directoryperdb   --config "E:\Program Files\MongoDB\Server\3.0\bin\mongod.cfg" --install




--------------------------------------------------
(叢集情況)
--配置叢集服務(3個機器,每台都裝2個shard)

--shard1_1
mongod --install  --serviceName MongoDBServerShard1 --serviceDisplayName MongoDBServerShard1 --shardsvr --replSet shard1 --port 27017 --dbpath "G:\MongoData\shard1_1" --oplogSize 100 --logpath "G:\MongoData\log\shard1_1.log" --logappend    --profile=1 --slowms=5 --rest

--shard2_1
mongod --install  --serviceName MongoDBServerShard2 --serviceDisplayName MongoDBServerShard2 --shardsvr --replSet shard2 --port 27018 --dbpath "F:\MongoData\shard2_1" --oplogSize 100 --logpath "F:\MongoData\log\shard2_1.log" --logappend    --profile=1 --slowms=5 --rest


--在其中一台上配置Config
config = {_id: "shard1", members: [
                          {_id: 0, host: "17.16.1.86:27017"},
                          {_id: 1, host: "17.16.1.89:27017"},
                          {_id: 2, host: "17.16.1.90:27017"}]
           }
rs.initiate(config)


config = {_id: "shard2", members: [
                          {_id: 0, host: "17.16.1.86:27018"},
                          {_id: 1, host: "17.16.1.89:27018"},
                          {_id: 2, host: "17.16.1.90:27018"}]
           }

rs.initiate(config)

rs.status()

/*暫時不這麼使用
config = { _id:"shard1", members:[ 
                          {_id: 0, host: "17.16.1.86:27017",priority:2},
                          {_id: 1, host: "17.16.1.89:27017",priority:1},
                          {_id: 2, host: "17.16.1.90:27017",arbiterOnly:true}]};  
 rs.initiate(config)


config = { _id:"shard2", members:[ 
                          {_id: 0, host: "17.16.1.86:27018",priority:2},
                          {_id: 1, host: "17.16.1.89:27018",priority:1},
                          {_id: 2, host: "17.16.1.90:27018",arbiterOnly:true}]};  
 rs.initiate(config)

*/


--配置config services(配置shard config,在三台機器上)
mongod --install  --serviceName MongoDBConfigServer --serviceDisplayName MongoDBConfigServer --configsvr --dbpath "F:\MongoData\config" --port 20000 --logpath "F:\MongoData\log\config.log" --logappend


--配置mongos service(可在一台或多台機器配置)
比如在172.16.1.86機器上安裝如下服務。
mongos --install  --serviceName MongoDBMongosServer --configdb 17.16.1.86:20000,17.16.1.89:20000,17.16.1.90:20000 --port 30000 --chunkSize 5 --logpath "F:\MongoData\log\mongos.log" --logappend

通路的時候mongo 17.16.1.86:30000



--2個分片已經設定好,在mongos控制台的admin資料庫下,執行下面的代碼,添加分片。
mongo 17.16.1.86:30000
db.runCommand({addshard:"shard1/17.16.1.86:27017,17.16.1.89:27017,17.16.1.90:27017",name:"s1",maxsize:20480});
db.runCommand({addshard:"shard2/17.16.1.86:27018,17.16.1.89:27018,17.16.1.90:27018",name:"s2",maxsize:20480});      
其他指令
————————————————————

允許資料庫中的内容被分片
db.runCommand({enablesharding:"test"}) 

設定表分片與分片規則,作為分片規則的key,必須為該表索引。
db.runCommand({shardcollection:"teset.user",key:{id:1, email:1, regtime:1}})

檢視資料庫狀态
db.stats()

檢視表狀态
db.tableName.stats()
 
檢視所有分片資訊狀态
db.printShardingStatus();

删除分片,删除分片指令執行後,mongos将不再寫入該分片資料,同時會将資料遷移到其他分片,這個過程需要一段時間,此時檢視db.printShardingStatus();,該分片狀态為"draining" : true。
但是由于bug,會一直處于此狀态下。需要在人工确定已無資料在此分片後,在mongos中進入config資料庫執行db.shards.remove({draining:true}),删除掉該分片。
db.runCommand({removeshard : "shard1/17.16.1.86:27017,17.16.1.89:27017,17.16.1.90:27017"});

使Primary降為Secondary,每一個分片,都是一組副本集,1主2從,設定時自動選舉,如果不符合寫入壓力分散的需求,可以将該主庫降級,2個從屬會随機選擇一個重新為主。
rs.stepDown() 

手動移動碎片


      

--備份

mongodump -h localhost:27020 -d ssr2016db -o G:\MongoData\dump

mongodump -h localhost:27020 -d ssr2016pointsdb -o G:\MongoData\dump

--恢複

mongorestore -h localhost:30000 -d ssr2016db G:\MongoData\dump\ssr2016db

mongorestore -h localhost:30000 -d ssr2016pointsdb G:\MongoData\dump\ssr2016pointsdb