mongos 集群安裝部署文檔

fmms 13年前發布 | 35K 次閱讀 mongos 集群/負載均衡

介紹信息
————————————————————

官方文檔 Sharding Introduction: 
http://www.mongodb.org/display/DOCS/Sharding+Introduction
      
分擔讀寫負載
三臺服務器,如果將所有數據分為三片,每一臺作為其中一片數據的寫入點,其他兩個節點進行拷貝,使讀寫壓力在'一定條件'下分布在三臺機器。
      
自動故障轉移
在單點損壞條件下,可以立刻將主服務器轉換到隨機另外一臺從屬服務器的分片上。不過之前未處理的請求將會被全部拋棄。
      
靈活配置分片 
不設置表分片,表就不會進行分片,會完整保存在該庫所在的主Shard中。可以在配置某數據庫信息啟用分片之后,單獨設定某個表的信息在其他分片中分散存儲。并設定盡量有規律的分片條件。

      
動態添加刪除
可以在壓力接近瓶頸的時候動態的進行分片添加,并設置該服務器為某分片寫入點,分散IO壓力,也可以在服務器出現異常時,進行分片數據的遷移和分片卸載。在數據庫集群運作中時,添加分片,數據自動流入此分片。
在數據庫集群運作中時,刪除分片,系統立即設置此分片狀態 "draining" : true ,之后慢慢將此分片數據轉移到其他分片。
      
實時查看狀態
可以在數據庫信息設置和信息的CRUD操作時,實時進行數據庫狀態、數據分片信息、數據狀態的監控。

 

 

mongos 集群安裝部署文檔

 

 

啟動分片數據庫
————————————————————
分別在3臺機器,啟動3個分片。
./mongod --shardsvr --replSet shard1 --port 30001 --dbpath /home/data/mongodata/shard01 --oplogSize 100 --logpath /home/data/mongodata/mongoshard1.log --rest --fork
./mongod --shardsvr --replSet shard2 --port 30002 --dbpath /home/data/mongodata/shard02 --oplogSize 100 --logpath /home/data/mongodata/mongoshard2.log --rest --fork
./mongod --shardsvr --replSet shard3 --port 30003 --dbpath /home/data/mongodata/shard03 --oplogSize 100 --logpath /home/data/mongodata/mongoshard3.log --rest --fork

 

 

配置副本集并加載
————————————————————
任意服務器連入30001
config = {_id: 'shard1', members: [
 {_id: 0, host: '192.168.1.123:30001'},
 {_id: 1, host: '192.168.1.124:30001'},
 {_id: 2, host: '192.168.1.125:30001'}]
}
rs.initiate(config);

任意服務器連入30002
config = {_id: 'shard2', members: [
 {_id: 0, host: '192.168.1.123:30002'},
 {_id: 1, host: '192.168.1.124:30002'},
 {_id: 2, host: '192.168.1.125:30002'}]
}
rs.initiate(config);

任意服務器連入30003
config = {_id: 'shard3', members: [
 {_id: 0, host: '192.168.1.123:30003'},
 {_id: 1, host: '192.168.1.124:30003'},
 {_id: 2, host: '192.168.1.125:30003'}]
}
rs.initiate(config);

查看狀態
rs.status()

啟動配置服務器
————————————————————
分別在三臺機器,都啟動3個配置服務。
./mongod --configsvr --port 20000 --dbpath /home/data/mongodata/config --logpath /home/data/mongodata/configconfig.log --logappend --pidfilepath /home/data/mongodata/config/config.pid --rest --fork

啟動路由
————————————————————
在其中一臺或者多臺機器,啟動mongos路由,作為集群訪問點。
./mongos --configdb 192.168.1.123:20000,192.168.1.124:20000,192.168.1.125:20000 --port 30000 --chunkSize 100 --logpath /data/mongodata/mongos.log --logappend --pidfilepath /data/mongodata/mongos.pid --fork

添加分片
————————————————————
3個分片已經設置好,在mongos控制臺的admin數據庫下,執行下面的代碼,添加分片。
db.runCommand({addshard:"shard1/192.168.1.123:30001,192.168.1.124:30001,192.168.1.125:30001",name:"s1",maxsize:20480});
db.runCommand({addshard:"shard2/192.168.1.123:30002,192.168.1.124:30002,192.168.1.125:30002",name:"s2",maxsize:20480});
db.runCommand({addshard:"shard3/192.168.1.123:30003,192.168.1.124:30003,192.168.1.125:30003",name:"s3",maxsize:20480});

查看列表,如果是3個分片。就OK了。
db.runCommand({listshards:1})

以上mongos部署成功。

 

 

其他命令
————————————————————

允許數據庫中的內容被分片
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/192.168.1.123:30001,192.168.1.124:30001,192.168.1.125:30001"});

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

手動移動碎片
http://www.mongodb.org/display/DOCS/Moving+Chunks

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!