歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux配置 >> mongos集群安裝文檔

mongos集群安裝文檔

日期:2017/2/27 14:59:23   编辑:Linux配置

介紹信息

官方文檔 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

Copyright © Linux教程網 All Rights Reserved