MongoDB-集群搭建
前言
????? 搭建一個(gè)MongoDB的集群,這個(gè)環(huán)境只是內(nèi)網(wǎng)的一個(gè)測(cè)試環(huán)境,分片沒有使用副本集,配置并分配好端口后,開啟集群的身份驗(yàn)證功能,在開啟集群權(quán)限時(shí),有些注意事項(xiàng),在搭建過程中會(huì)著重標(biāo)出。
一、集群規(guī)劃
????? 首先有三臺(tái)服務(wù)器分別為192.168.0.230,192.168.0.232,192.168.0.234。集群規(guī)劃如下:3個(gè) 用來分片,3個(gè) mongos路由服務(wù),3個(gè) config配置服務(wù)器。
? ? ?注意:保證三臺(tái)服務(wù)器的端口是通的。
1.1端口分配
????? 端口號(hào)分配情況,所有的分片都使用27017端口,所有的配置都使用20000端口,所有的mongos路由服務(wù)都使用30000端口,每個(gè)服務(wù)器具體信息如下:
表1-1 端口號(hào)分配表
| ? | 192.168.0.230 | 192.168.0.232 | 192.168.0.234 |
| mongos | 30000 | 30000 | 30000 |
| config | 20000 | 20000 | 20000 |
| sharing | 27017 | 27017 | 27017 |
1.2集群整體規(guī)劃圖
?
二、集群?jiǎn)?dòng)和配置
2.1 啟動(dòng)集群服務(wù)器
2.1.1 創(chuàng)建數(shù)據(jù)文件目錄
230服務(wù)器分片1 # mkdir –p /data/mongodb/config /data/mongodb/shard1_1 232服務(wù)器分片2 # mkdir –p /data/mongodb/config /data/mongodb/shard1_2 234服務(wù)器分片3 # mkdir –p /data/mongodb/config /data/mongodb/shard1_3然后按照順序啟動(dòng),分片服務(wù)器,配置服務(wù)器和路由服務(wù)器:
2.1.2 啟動(dòng)分片服務(wù)
230服務(wù)器: mongod --shardsvr --port 27017 --dbpath /data/mongodb/shard1_1 --logpath /data/mongodb/shard1_1/rs0.log --logappend --directoryperdb --fork 232服務(wù)器: mongod --shardsvr --port 27017 --dbpath /data/mongodb/shard1_2 --logpath /data/mongodb/shard1_2/rs0.log --logappend --directoryperdb --fork 234服務(wù)器: mongod --shardsvr --port 27017 --dbpath /data/mongodb/shard1_3 --logpath /data/mongodb/shard1_3/rs0.log --logappend --directoryperdb --fork然后在三臺(tái)服務(wù)器上各自啟動(dòng)配置服務(wù)器和路由服務(wù)器:
2.1.3 啟動(dòng)配置服務(wù)器
三臺(tái)服務(wù)器分別執(zhí)行:
mongod --configsvr --port 20000 --dbpath /data/mongodb/config --logpath /data/mongodb/config.log --logappend --directoryperdb –fork2.1.4 啟動(dòng)路由服務(wù)
三臺(tái)服務(wù)器分別執(zhí)行:
mongos --configdb 192.168.0.230:20000, 192.168.0.232:20000, 192.168.0.234:20000 --port=30000 --chunkSize=1--logpath=/data/mongogdb/mongos.log --logappend --fork
注意:這里指定了—chunkSize分片塊大小為1M,默認(rèn)為64M,是為了能夠更快的實(shí)現(xiàn)分片。
2.2 配置集群服務(wù)器
2.2.1 配置分片
????? 連接到任意服務(wù)器的路由服務(wù)30000端口,把三個(gè)分片服務(wù)器添加到集群配置中去:
?添加分片服務(wù)器
# mongo –port 30000 mongos> use admin switched to db admin mongos> db.runCommand({"addshard":"192.168.0.230:27017"}) mongos> db.runCommand({"addshard":"192.168.0.232:27017"}) mongos> db.runCommand({"addshard":"192.168.0.234:27017"})現(xiàn)在執(zhí)行sh.status()就能看到集群的分片情況。分片環(huán)境已經(jīng)配置完成,但還沒開啟集合的分片,接下來測(cè)試一個(gè)集合的分片功能。
2.2.2 激活并驗(yàn)證分片功能
? ? ?集合開啟分片之前,需要選擇一個(gè)片鍵來指定分片規(guī)則,片鍵的選擇直接影響數(shù)據(jù)分發(fā)的效果,關(guān)于片鍵的選擇策略,具體問題具體分析,后續(xù)會(huì)簡(jiǎn)單整理一下。
注意:分片片鍵必須是索引
激活數(shù)據(jù)庫foo的分片功能,并把其中的bar集合按照timestamp升序片鍵開啟分片,操作如下:
# mongo –port 30000 mongos> sh.enableSharding("foo") { "ok" : 1 } mongos> sh.shardCollection("foo.bar",{"timestamp":1}) { "collectionsharded" : "foo.bar", "ok" : 1 }這時(shí)使用sh.status()命令,就可以看到相應(yīng)的集合已經(jīng)開啟了分片
mongos> for(var i=1; i<=500000; i++){ db.bar.insert({"inc":i, "timestamp":new Date()}) }
往數(shù)據(jù)庫中插入50萬數(shù)據(jù),使用sh.status()查看數(shù)據(jù)已經(jīng)均勻分布在各個(gè)分片上。
三、開啟集群身份驗(yàn)證
? ? ? 默認(rèn)情況下,MongoDB是不啟動(dòng)訪問控制的,對(duì)于單機(jī)模式下,只需在啟動(dòng)mongod服務(wù)時(shí)添加--auth參數(shù)即可。但是在分片集群下只能使用keyfile的方式啟動(dòng)訪問控制。
首先,生成一個(gè)keyfile文件,并把這個(gè)文件復(fù)制到其他服務(wù)器上。
# openssl rand -base64 741 > /data/mongodb/mongodb-keyfile # chmod 600 mongodb-keyfile 重要注意:在啟用訪問控制之前,要保證路由服務(wù)和每個(gè)分片服務(wù)器已經(jīng)存在一個(gè)管理員用戶,用于添加用戶和關(guān)閉集群使用。
添加用戶也很簡(jiǎn)單,分別連到3000和27017端口在admin數(shù)據(jù)庫執(zhí)行以下命令:
mongos> use admin switched to db admin mongos> db.createUser({user:"admin", pwd:"111111", roles:[{role: "root", db: "admin" }]}) Successfully added user: {"user" : "admin","roles" : [{"role" : "root","db" : "admin"}] }? ? ? 接下來開啟集群的訪問控制,這里我講keyfile文件拷貝到了/data/mongodb/keyfile目錄下,在啟動(dòng)每個(gè)服務(wù)時(shí)(分片服務(wù),配置服務(wù),路由服務(wù))添加--keyFile /data/mongodb/keyfile參數(shù)即可。
如啟動(dòng)路由服務(wù)時(shí)mongos --configdb 192.168.0.230:20000, 192.168.0.232:20000, 192.168.0.234:20000 --port=30000 --chunkSize=1 --logpath=/data/mongogdb/mongos.log
--logappend –fork --keyFile /data/mongodb/keyfile
之后在連接到集群時(shí),操作之前就需要驗(yàn)證用戶身份了,其中驗(yàn)證有兩種方式:
一是在連接時(shí)進(jìn)行驗(yàn)證:
mongo --port 30000 -u "admin" -p "111111" --authenticationDatabase "admin"二是在連接后進(jìn)行驗(yàn)證:
# mongo --port 30000 mongos> use admin switched to db admin mongos> db.auth("admin", "111111")驗(yàn)證成功后就可以進(jìn)行相應(yīng)的操作了。
四、集群中一些問題
1 關(guān)閉集群服務(wù)器
? ? ?關(guān)閉順序按照路由服務(wù),配置服務(wù),分片服務(wù),分別連接到對(duì)應(yīng)端口的admin數(shù)據(jù)庫,使用db.shutdownServer()關(guān)閉服務(wù)。如果開啟了身份驗(yàn)證,這里就用到了預(yù)先建好的admin用戶
2 集群某個(gè)服務(wù)起不來
????? 比如配置服務(wù)或分片服務(wù)啟動(dòng)錯(cuò)誤,可能是上次退出不正常,這是可以選擇修復(fù)數(shù)據(jù),也可直接把數(shù)據(jù)文件中的mongod.lock文件刪除。
3 數(shù)據(jù)沒分片
? ? ? 首先保證集合開啟了分片,然后查看一下config配置數(shù)據(jù)庫中配置的chunkSize是多少,是不是數(shù)據(jù)不夠大,最后查看一下服務(wù)器的時(shí)間,如果服務(wù)器的時(shí)間相差比較大,也會(huì)導(dǎo)致分片失敗,服務(wù)器時(shí)間差最好保持在30秒以內(nèi)。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/cwane/p/5428436.html
總結(jié)
以上是生活随笔為你收集整理的MongoDB-集群搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu安装PHP时候出错--xml
- 下一篇: 设计原则--开放-封闭原则(OCP)