shared Server 分片
這是一種將海量的資料水平擴充套件的資料庫叢集系統,資料分表儲存在 sharding 的各個節點
上,使用者透過簡單的配置就可以很方便地構建一個分散式 MongoDB 叢集。
MongoDB 的資料分塊稱為 chunk。每個 chunk 都是 Collection 中一段連續的資料記錄,通
常最大尺寸是 200MB,超出則生成新的資料塊。
要構建一個 MongoDB Sharding Cluster,需要三種角色:
Shard Server
即儲存實際資料的分片,每個 Shard 可以是一個 mongod 例項,也可以是一組 mongod 例項
構成的 Replica Set。為了實現每個 Shard 內部的 auto-failover, MongoDB 官方建議每個 Shard
為一組 Replica Set。
Config Server
為了將一個特定的 collection 儲存在多個 shard 中,需要為該 collection 指定一個 shard key,
例如{age: 1} , shard key 可以決定該條記錄屬於哪個 chunk。 Config Servers 就是用來儲存:
所有 shard 節點的配置資訊、每個 chunk 的 shard key 範圍、 chunk 在各 shard 的分佈情況、
該叢集中所有 DB 和 collection 的 sharding 配置資訊。
Route Process
這是一個前端路由,客戶端由此接入,然後詢問 Config Servers 需要到哪個 Shard 上查詢或
儲存記錄,再連線相應的 Shard 進行操作,最後將結果返回給客戶端。客戶端只需要將原本
發給 mongod 的查詢或更新請求原封不動地發給 Routing Process,而不必關心所操作的記錄
儲存在哪個 Shard 上。
下面我們在同一臺物理機器上構建一個簡單的 Sharding Cluster:
Shard Server 1: 20000
Shard Server 2: 20001
Config Server : 30000
Route Process: 40000
1 建立shared Server
-
mkdir - p /data/shard/s0 - - 建立資料目錄
-
mkdir - p /data/shard/s1
-
mkdir - p /data/shard/log - - 建立日誌目錄
-
/Apps/mongo/bin/mongod - - shardsvr - - port 20000 - - dbpath /data/shard/s0 - - fork - - logpath
-
/data/shard/log/s0 . log - - directoryperdb - - 啟動 Shard Server 例項 1 ---一個分片
-
/Apps/mongo/bin/mongod - - shardsvr - - port 20001 - - dbpath /data/shard/s1 - - fork - - logpath
-
/data/shard/log/s1 . log - - directoryperdb - - 啟動 Shard Server 例項 2 --一個分片
2 啟動 Config Server
-
mkdir - p /data/shard/config - - 建立資料目錄
-
/Apps/mongo/bin/mongod - - configsvr - - port 30000 - - dbpath /data/shard/config - - fork - - logpath
-
/data/shard/log/config . log - - directoryperdb - - 啟動 Config Server 例項
3 啟動 Route Process
點選( 此處 )摺疊或開啟
-
/Apps/mongo/bin/mongos - - port 40000 - - configdb localhost : 30000 - - fork - - logpath
-
/data/shard/log/route . log - - chunkSize 1 - - 啟動 Route Server 例項,和下面一樣 最好寫i p
4配置 Sharding
-
接下來,我們使用 MongoDB Shell 登入到 mongos,新增 Shard 節點
-
[ root@localhost ~ ] # /Apps/mongo/bin/mongo admin - - port 40000 - - 此操作需要連線 admin 庫
-
MongoDB shell version : 1 . 8 . 1
-
connecting to : 127 . . . 1 : 40000/admin
-
> db . runCommand ( { addshard : "localhost:20000" } ) - - 新增 Shard Server,最好寫ip
-
{ "shardAdded" : "shard0000" , "ok" : 1 }
-
-
> db . runCommand ( { addshard : "localhost:20001" } )
-
{ "shardAdded" : "shard0001" , "ok" : 1 }
-
-
> db . runCommand ( { enablesharding : "test" } )
-
[這裡只是標識這個資料庫可以啟用分片,但實際上新建的文件並沒有進行分片]
-
{ "ok" : 1 }
-
-
> db . runCommand ( { shardcollection : "test.users" , key : { _id : 1 }} ) - - 設定分片的集合名稱,且必
-
須指定 Shard Key,系統會自動建立索引
-
{ "collectionsharded" : "test.users" , "ok" : 1 }
-
或者命令:
-
sh.shardCollection("welike_mongo.userRelationMongo",{_id:1})
-
5驗證 Sharding 正常工作
-
我們已經對 test . users 表進行了分片的設定,下面我們們插入一些資料看一下結果
-
> use test
-
switched to db test
-
> for ( var i = 1 ; i < = 500000 ; i + + ) db . users . insert ( { age : i , name : "wangwenlong" , addr : "Beijing" ,
-
country : "China" } )
-
> db . users . stats ( )
-
{
-
"sharded" : true , - - 說明此表已被 shard
-
"ns" : "test.users" ,
-
"count" : 500000 ,
-
"size" : 48000000 ,
-
"avgObjSize" : 96 ,
-
"storageSize" : 66655232 ,
-
"nindexes" : 1 ,
-
"nchunks" : 43 ,
-
"shards" : {
-
"shard0000" : { - - 在此分片例項上約有 24 . 5M 資料
-
"ns" : "test.users" ,
-
"count" : 254889 ,
-
"size" : 24469344 ,
-
"avgObjSize" : 96 ,
-
79 / 91
-
"storageSize" : 33327616 ,
-
"numExtents" : 8 ,
-
"nindexes" : 1 ,
-
"lastExtentSize" : 12079360 ,
-
"paddingFactor" : 1 ,
-
"flags" : 1 ,
-
"totalIndexSize" : 11468800 ,
-
"indexSizes" : {
-
"_id_" : 11468800
-
} ,
-
"ok" : 1
-
} ,
-
"shard0001" : { - - 在此分片例項上約有 23 . 5M 資料
-
"ns" : "test.users" ,
-
"count" : 245111 ,
-
"size" : 23530656 ,
-
"avgObjSize" : 96 ,
-
"storageSize" : 33327616 ,
-
"numExtents" : 8 ,
-
"nindexes" : 1 ,
-
"lastExtentSize" : 12079360 ,
-
"paddingFactor" : 1 ,
-
"flags" : 1 ,
-
"totalIndexSize" : 10649600 ,
-
"indexSizes" : {
-
"_id_" : 10649600
-
} ,
-
"ok" : 1
-
}
-
} ,
-
"ok" : 1
-
}
-
>
7列出所有的 Shard Server
-
> db . runCommand ( { listshards : 1 } ) - - 列出所有的 Shard Server
-
{
-
"shards" : [
-
{
-
"_id" : "shard0000" ,
-
"host" : "localhost:20000"
-
} ,
-
{
-
"_id" : "shard0001" ,
-
"host" : "localhost:20001"
-
}
-
] ,
-
"ok" : 1
-
}
8 檢視 Sharding 資訊
-
> printShardingStatus ( ) 等價 sh.status() - - 檢視 所有表的Sharding 資訊
-
- - - Sharding Status - - -
-
sharding version : { "_id" : 1 , "version" : 3 }
-
shards :
-
{ "_id" : "shard0000" , "host" : "localhost:20000" }
-
{ "_id" : "shard0001" , "host" : "localhost:20001" }
-
databases :
-
{ "_id" : "admin" , "partitioned" : false , "primary" : "config" }
-
{ "_id" : "test" , "partitioned" : true , "primary" : "shard0000" }
-
test . users chunks :
-
shard0000 1 ----test.users在shard0000 上有一個chunks塊
-
{ "_id" : { $minKey : 1 } } - - > > { "_id" : { $maxKey : 1 } } on :
-
shard0000 { "t" : 1000 , "i" : 0 }
-
>
判斷是否是 Sharding
點選( 此處 )摺疊或開啟
-
> db . runCommand ( { isdbgrid : 1 } )
-
{ "isdbgrid" : 1 , "hostname" : "localhost" , "ok" : 1 }
對現有的表進行 Sharding
剛才我們是對錶 test.users 進行分片了,下面我們將對庫中現有的未分片的表 test.users_2 進
行分片處理
表最初狀態如下,可以看出他沒有被分片過:
>
db.users_2.stats() 或者 db.hotFeedMongo.stats().sharded
{
"ns" : "test.users_2",
"sharded" : false,
"primary" : "shard0000",
"ns" : "test.users_2",
"count" : 500000,
"size" : 48000016,
"avgObjSize" : 96.000032,
"storageSize" : 61875968,
"numExtents" : 11,
"nindexes" : 1,
"lastExtentSize" : 15001856,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 20807680,
"indexSizes" : {
"_id_" : 20807680
},
"ok" : 1
}
對其進行分片處理:
>
use admin
switched to db admin
>
db.runCommand({ shardcollection: "test.users_2", key: { _id:1 }})
{ "collectionsharded" : "test.users_2", "ok" : 1 }
再次檢視分片後的表的狀態,可以看到它已經被我們分片了
>
use test
switched to db test
>
db.users_2.stats()
{
"sharded" : true,
"ns" : "test.users_2",
"count" : 505462,
……
"shards" : {
"shard0000" : {
"ns" : "test.users_2",
……
"ok" : 1
},
"shard0001" : {
"ns" : "test.users_2",
……
"ok" : 1
}
},
"ok" : 1
}
>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1800199/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Shared ServerServer
- 配置Shared ServerServer
- Dedicated and Shared Server ProcessesServer
- Oracle dedicated server process and shared server processOracleServer
- configure shared serverServer
- dispatcher & shared server小結Server
- Restricted Operations of the Shared Server (132)RESTServer
- Oracle shared server 配置詳解OracleServer
- Shared Server Architecture (128)Server
- Shared Server Processes (Snnn) (131)Server
- Oracle Shared Server(OSS)筆記 (zt)OracleServer筆記
- oracle實驗記錄 (SHARED server MODE)OracleServer
- 共享伺服器模式(shared server)和專用伺服器模式(dedicated server)伺服器模式Server
- 【實驗】【Shared Server Mode】取消共享伺服器模式Server伺服器模式
- 【Shared Server Mode】測試調整shared_servers引數對資料庫的影響Server資料庫
- 【偵聽】V$session.server = none when using Shared Server/MTS ConfigurationSessionServerNone
- mongodb 分片叢集建立分片集合MongoDB
- MongoDB分片叢集新增分片(自用)MongoDB
- MongoDB分片MongoDB
- Vue 3 中用組合式函式和 Shared Worker 實現後臺分片上傳(帶雜湊計算)Vue函式
- Nginx分片限流Nginx
- MongoDB 分片管理MongoDB
- MongoDB之分片MongoDB
- mongodb分片搭建MongoDB
- mongodb分片balanceMongoDB
- 【實驗】【Shared Server Mode】手工關閉某一個特定排程程式Server
- 【Mongodb】分片複製集環境新增新的分片MongoDB
- Redis分片機制Redis
- elasticsearch(七)---深入分片Elasticsearch
- mongodb之shard分片MongoDB
- mongodb複製+分片MongoDB
- 分片叢集元件元件
- 部署分片叢集
- oracle ocp 19c考題10,科目082考試題 - shared server dispatchersOracleServer
- 【Shared Server Mode】“專有伺服器模式”調整為“共享伺服器模式”Server伺服器模式
- MongoDB 分片叢集搭建MongoDB
- MongoDB叢集之分片MongoDB
- 搭建MongoDB分片叢集MongoDB