mongodb分佈式集羣

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單機部署

啓動下載來的MongoDB包的bin目錄下的mongod.exe便可打開MongoDB服務,能夠添加的基本配置是:

1

./mongod.exe --dbpath ~/db/data --port 127.0.0.1:10000 --logpath ~/db/log

默認的端口是27017。啓動的時候必須有一個data目錄,讓mongod讀寫數據。寫入數據後,data目錄裏的文件如圖:

MongoDB單機, 主從, 分佈式部署

.lock文件若是在下次啓動時候還存在,須要刪除才能成功啓動。"article"和"config"是數據庫名字,能夠特別注意一下每一個文件塊的大小(16M, 32M, 64M, 128M)。

 

MongoDB主從部署

主從配置是MongoDB特點之一,使之具有了容錯,故障恢復等性能。主節點要聲明"master",從節點們要聲明"slave"和"--source"。最簡單的主從配置以下:

1

./mongod.exe --dbpath ~/db/master --port 10000 --master

1

./mongod.exe --dbpath ~/db/slave --port 10001 --slave --source localhost:10001

從 節點直接從主節點同步數據,從節點之間不互相同步。容錯性更強的部署是一個主從集羣,互相都能成爲「主節點」,叫作Replica Set。在Replica Set裏會有一個活躍節點和若干個備份節點。配置的時候,整個Replica Set要取個名字,而後每臺都要指明一個或幾個夥伴:

1

./mongod.exe --dbpath ~/db/node1 --port 10001 --replSet setname/localhost:10002

1

./mongod.exe --dbpath ~/db/node2 --port 10002 --replSet setname/localhost:10001

1

./mongod.exe --dbpath ~/db/node3 --port 10003 --replSet setname/localhost:10001

誰成爲活躍節點取決於優先級,優先級默認是1,也能夠啓動mongod進行設置(不具體介紹了),總之是內部的選舉機制。

 

MongoDB分片部署

介紹完以上,組合起來就能夠搭建一個比較強壯的分佈式MongoDB集羣。分片相似分佈式,MongoDB以新增分片的方式,擴展本身的容量,而且能給讀寫負載均衡。

1. 每個啓動的mongod都是實際存放數據的地方,都能做爲別人的sharding

2. 分片部署須要一個mongos,起路由分發的做用;須要一個配置服務器和若干個分片服務器(都是mongod)

3. 單機的時候,應用鏈接的是mongod;分佈式的時候,應用鏈接的是mongos。

最簡單的分片部署是單個的配置服務器,一個config(即mongod),一個mongos,幾個sharding(即mongod):

1

./mongod.exe --dbpath ~/db/config --port 20000

1

./mongos.exe --configdb 127.0.0.1:20000 --port 30000

1

./mongod.exe --dbpath ~/db/shard1 --port 10001

1

./mongod.exe --dbpath ~/db/shard2 --port 10002

若是有時候啓動不了某個mongod,可能和端口有關。在windows下,這樣一個集羣會打開不少shell窗口。這種狀況下,仍是三個獨立的mongd,要打開上面的mongos,輸入命令加入sharding片:

1

2

3

> use admin

> db.runCommand({addshard : "localhost:10001", allowLocal : true})

> db.runCommand({addshard : "localhost:10002", allowLocal : true})

1

> db.runCommand({"enablesharding" : "dbname"})

還要設置片建,以提供負載均衡的依據:

1

> db.runCommand({"shardcollection" : "dbname.collection", "key" : {"_id":1}})

dbname.collection是本身的數據庫的數據集。設置的"key"須要已經創建索引。 

mongos下還有一些查看分片狀況的命令,方便集羣的管理和監控,能夠本身體驗下:

1

2

3

> db.shards.find()

> db.chunks.find()

> db.printShardingStatus()

也能夠經過runCommand的其餘命令添加新的片,刪除已有的片,並且添加的片能夠是舊的mongod。

測試開發的時候像上面這樣的一組可可以了,真正健壯的集羣可能要具有下面三個條件:

1. 多個配置服務器config1, config2, config3(能夠都通過一個mongos來路由)

2. 每一個sharding都是Replica Set

3. 每一臺物理物理服務器承擔若干個不一樣的進程(mongos, shards, config)

就像下面這種圖呈現的同樣:

MongoDB單機, 主從, 分佈式部署


咱們能夠這樣理解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就能夠分佈式環境了。比較合理的節省物理服務器的配置方法能夠像下圖這樣:

MongoDB單機, 主從, 分佈式部署

不把全部雞蛋扔一個籃子裏。

相關文章
相關標籤/搜索