1.建立配置數據庫服務node
mongod --dbpath=d://path/mongodb_ds/mongodb_config --port 1234mongodb
2.建立3臺分佈數據庫服務shell
mongod --dbpath=d://path/mongodb_ds/mongodb111 --port 1111數據庫
mongod --dbpath=d://path/mongodb_ds/mongodb222 --port 2222windows
mongod --dbpath=d://path/mongodb_ds/mongodb333 --port 3333服務器
3.開啓路由服務指定mongodb_config數據庫服務爲路由,負責轉發客戶端的數據庫請求,合理分配給3臺數據庫服務負載均衡
mongos --port 4321 --configdb=localhost:1234分佈式
4.開啓一個客戶端鏈接路由服務性能
mongo localhost:4321測試
4.1 切換到admin數據庫,準備配置相關參數 use admin
4.2 爲3臺分佈數據庫服務建立分片
db.runCommand({"addshard":"localhost:1111",allowLocal:true});
db.runCommand({"addshard":"localhost:2222",allowLocal:true});
db.runCommand({"addshard":"localhost:3333",allowLocal:true});
*addshard 表示建立分片,allowLocal 表示是否容許別的客戶端訪問這臺數據庫。
4.3 容許哪一個數據庫使用分片
db.runCommand({"enablesharding":"test"});
4.4 指定哪一個數據庫的哪一個集合使用分片,且分片依據是哪一個字段
db.runCommand({"shardcollection":"test.person","key":{age:1}});
5.切換到test數據庫,準備插入數據 use test
mongos> for(var i=0; i<10000000; i++){
db.person.insert({name:"distributedName",age:i});
}
這裏插入1000w條數據到test數據庫的person集合,路由服務會根據前面的配置,以age的值爲分片依據,決定具體插入到哪一個數據庫服務的test數據庫下的Person集合。
https://blog.csdn.net/qwkxq/article/details/53728244
MongoDB是最易用的NoSQL,比較適合取代MySQL作一些存儲,不過不是強一致性的。本文介紹一下MongoDB各類部署方式,並分享一些感覺。前兩部分「單機部署」和「主從部署」是「分片部署」的基礎。
啓動下載來的MongoDB包的bin目錄下的mongod.exe便可打開MongoDB服務,能夠添加的基本配置是:
1 |
|
默認的端口是27017。啓動的時候必須有一個data目錄,讓mongod讀寫數據。寫入數據後,data目錄裏的文件如圖:
.lock文件若是在下次啓動時候還存在,須要刪除才能成功啓動。"article"和"config"是數據庫名字,能夠特別注意一下每一個文件塊的大小(16M, 32M, 64M, 128M)。
主從配置是MongoDB特點之一,使之具有了容錯,故障恢復等性能。主節點要聲明"master",從節點們要聲明"slave"和"--source"。最簡單的主從配置以下:
1 |
|
1 |
|
從 節點直接從主節點同步數據,從節點之間不互相同步。容錯性更強的部署是一個主從集羣,互相都能成爲「主節點」,叫作Replica Set。在Replica Set裏會有一個活躍節點和若干個備份節點。配置的時候,整個Replica Set要取個名字,而後每臺都要指明一個或幾個夥伴:
1 |
|
1 |
|
1 |
|
誰成爲活躍節點取決於優先級,優先級默認是1,也能夠啓動mongod進行設置(不具體介紹了),總之是內部的選舉機制。
介紹完以上,組合起來就能夠搭建一個比較強壯的分佈式MongoDB集羣。分片相似分佈式,MongoDB以新增分片的方式,擴展本身的容量,而且能給讀寫負載均衡。
1. 每個啓動的mongod都是實際存放數據的地方,都能做爲別人的sharding
2. 分片部署須要一個mongos,起路由分發的做用;須要一個配置服務器和若干個分片服務器(都是mongod)
3. 單機的時候,應用鏈接的是mongod;分佈式的時候,應用鏈接的是mongos。
最簡單的分片部署是單個的配置服務器,一個config(即mongod),一個mongos,幾個sharding(即mongod):
1 |
|
1 |
|
1 |
|
1 |
|
若是有時候啓動不了某個mongod,可能和端口有關。在windows下,這樣一個集羣會打開不少shell窗口。這種狀況下,仍是三個獨立的mongd,要打開上面的mongos,輸入命令加入sharding片:
1 2 3 |
|
1 |
|
還要設置片建,以提供負載均衡的依據:
1 |
|
dbname.collection是本身的數據庫的數據集。設置的"key"須要已經創建索引。
mongos下還有一些查看分片狀況的命令,方便集羣的管理和監控,能夠本身體驗下:
1 2 3 |
|
也能夠經過runCommand的其餘命令添加新的片,刪除已有的片,並且添加的片能夠是舊的mongod。
測試開發的時候像上面這樣的一組可可以了,真正健壯的集羣可能要具有下面三個條件:
1. 多個配置服務器config1, config2, config3(能夠都通過一個mongos來路由)
2. 每一個sharding都是Replica Set
3. 每一臺物理物理服務器承擔若干個不一樣的進程(mongos, shards, config)
就像下面這種圖呈現的同樣:
咱們能夠這樣理解mongos, shards, config三樣東西:
1. shards是一些實際存數據的能夠單獨使用的db,他們能分配給任何config server,並且添加刪除都很方便。
2. 每一個shard裏有若干個地位平等的mongods,因此每一個是一個Replica Set(副本集)
3. 一個config手下帶領好幾個shards,目的是負載和擴容,他們之間須要mongos來路由
4. mongos是一個路由,能夠路由一個或多個config servers,不須要很大的分配空間
5. 每個客戶端的應用,每一張數據庫表,最好對應一個config server和一個mongos
以上內容裏的"--port" 部分改成IP:port就能夠分佈式環境了。比較合理的節省物理服務器的配置方法能夠像下圖這樣:
不把全部雞蛋扔一個籃子裏。