標籤:os io strong 資料 for ar cti div
分區叢集
Mongodb中資料分區叫做chunk,它是一個Collection中的一個連續的資料記錄,但是它有一個大小限制,不可以超過200M,如果超出產生新的分區。 下面是一個簡單的分區叢集執行個體
分區叢集的構成:
- Shard server:mongod執行個體,用於儲存實際的資料區塊
- Config server:mongod執行個體,用於儲存整個Cluster Metadata,其中包括chunk資訊。
- Route server:mongos執行個體,做為整個叢集的前端路由,整個叢集由此接入。從而讓整個叢集看著像單一進程資料庫。
- 備忘:route做為路由會將請求轉寄到實際的目標服務進程,並將多個結果合并並回傳用戶端。在route並不儲存任何的資料和狀態,所有的資訊都是啟動的時候從Config server上擷取,當Config server上有資訊更新,也會同步到route server上。
構建一個簡單的叢集 叢集目錄:總共有四個mongodb,目錄分別為/home/scotte.ye/mongo1,mongo2,mongo3,mongo4其中mongo1,mongo2做為shard servermongo3做為config servermongo4做為route server
1、啟動Shard server // 啟動shard server 1 $ cd /home/scotte.ye/mongo1$ ./mongo -shardsvr -port 10000 -dbpath=/home/data/10000/ -fork -logpath=/home/log/10000/null$ all output going to: /home/log/10000/null$ fork process: 10657 //啟動shard server 2 $ cd /home/scotte.ye/mongo2$ ./mongo -shardsvr -port 10011 -dbpath=/home/data/10011/ -fork -logpath=/home/log/10011/null$ all output going to: /home/log/10011/null$ fork process: 10661 //啟動Config server $ cd /home/scotte.ye/mongo3$ ./mongo -configsvr -port 20000 -dbpath=/home/data/20000/ -fork -logpath=/home/log/20000/null$ all output going to: /home/log/20000/null$ fork process: 10857 //啟動Route server $ cd /home/scotte.ye/mongo4$ ./mongos -configdb 192.168.35.106:20000 -fork -logpath=/home/log/20000/null$ all output going to: /home/log/20000/null$ fork process: 10900 //注在啟動Route server的時候,還可以通過-chunksize參數來進行配置分塊的大小
2、配置相關 配置相關命令說明:
- addshard:添加shard server到叢集。相類似的命令還有,listshards和removeshard
- enablesharding:用於設定那些資料庫可以被分布儲存
- shardcollection:用於設定具體被分區的集合的名稱,且必須指定 share key,系統會自動建立索引
- 註:shardcollection的集合必須只有一個unique index且必須是shard key
開始配置: $ cd /home/scotte.ye/mongo3/bin$ ./mongo$ >use admin$#只有在admin資料庫才可以操作$ switched to db admin$ >db.runCommand({addshard:‘192.168.35.106:10000‘})$ {"shardAdded":"shard0000","OK":1}$ >db.runCommand({addshard:‘192.168.35.106:10011‘})$ {"shardAdded":"shard0001","OK":1}$#添加相應到shard server到shard cluster$ >db.runCommand({enablesharding:‘test‘})$#使相應的資料庫表test可以分布儲存,test可以更換成相應的其它資料庫名字$ >db.runCommand({sahrdcollection:‘test.user‘,key:{_id:1}})$ {"OK":1}$#指明相應的集合和shard key$ {"collectionsharded":"test.user","OK":1} 3、常用的狀態查詢命令
- printShardingStatus():查看Sharding資訊
- db.<collection_name>.stats():查看具體shard儲存資訊
- isdbgrid:用於確認當前是否是sharding cluster
- ismaster:判斷是不是master