本篇文章為大家展示了MongoDB中怎么搭建分片集群,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)主營競秀網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,競秀h5微信小程序定制開發(fā)搭建,競秀網(wǎng)站營銷推廣歡迎競秀等地區(qū)企業(yè)咨詢
mongos:數(shù)據(jù)庫集群請求的入口,所有請求需要經(jīng)過mongos進行協(xié)調(diào),無需在應用層面利用程序來進行路由選擇,mongos其自身是一個請求分發(fā)中心,負責將外部的請求分發(fā)到對應的shard服務器上,mongos作為統(tǒng)一的請求入口,為防止mongos單節(jié)點故障,一般需要對其做HA。
config server:配置服務器,存儲所有數(shù)據(jù)庫元數(shù)據(jù)(分片,路由)的配置。mongos本身沒有物理存儲分片服務器和數(shù)據(jù)路由信息,只是存緩存在內(nèi)存中來讀取數(shù)據(jù),mongos在第一次啟動或后期重啟時候,就會從config server中加載配置信息,如果配置服務器信息發(fā)生更新會通知所有的mongos來更新自己的狀態(tài),從而保證準確的請求路由,生產(chǎn)環(huán)境中通常也需要多個config server,防止配置文件存在單節(jié)點丟失問題。
shard:在傳統(tǒng)意義上來講,如果存在海量數(shù)據(jù),單臺服務器存儲1T壓力非常大,無論考慮數(shù)據(jù)庫的硬盤,網(wǎng)絡(luò)IO,又有CPU,內(nèi)存的瓶頸,如果多臺進行分攤1T的數(shù)據(jù),到每臺上就是可估量的較小數(shù)據(jù),在mongodb集群只要設(shè)置好分片規(guī)則,通過mongos操作數(shù)據(jù)庫,就可以自動把對應的操作請求轉(zhuǎn)發(fā)到對應的后端分片服務器上。
replica set:在總體mongodb集群架構(gòu)中,對應的分片節(jié)點,如果單臺機器下線,對應整個集群的數(shù)據(jù)就會出現(xiàn)部分缺失,這是不能發(fā)生的,因此對于shard節(jié)點需要replica set來保證數(shù)據(jù)的可靠性,生產(chǎn)環(huán)境通常為2個副本+1個仲裁。
架構(gòu):我們這次搭建的是三分片,每個分片三個副本集的分片集群
端口分布:mongos:20000 config:21000 shard1:22001 shard2:22002 shard3:22003
1. 各個機器上分別安裝MongoDb
安裝過程省略。只需要將安裝包COPY到各個服務器解壓即可
2.分別在每臺機器建立conf、mongos、config、shard1、shard2、shard3六個目錄,因為mongos不存儲數(shù)據(jù),只需要建立日志文件目錄即可
mkdir -p /data/mongodb/mongos/{log,conf} mkdir -p /data/mongodb/mongoconf/{data,log,conf} mkdir -p /data/mongodb/shard1/{data,log,conf} mkdir -p /data/mongodb/shard2/{data,log,conf} mkdir -p /data/mongodb/shard3/{data,log,conf} touch /data/mongodb/mongos/log/mongos.log touch /data/mongodb/mongoconf/log/mongoconf.log touch /data/mongodb/mongoconf/conf/mongoconf.conf touch /data/mongodb/shard1/log/shard1.log touch /data/mongodb/shard2/log/shard2.log touch /data/mongodb/shard3/log/shard3.log
3. 關(guān)閉防火墻
systemctl stop firewalld.service
4.Config server搭建副本集,添加如下內(nèi)容
cat>/data/mongodb/mongoconf/conf/mongoconf.conf<5.分別啟動三臺服務器的config server
mongod -f /data/mongodb/mongoconf/conf/mongoconf.conf6.登錄任意一臺配置服務器,初始化配置副本集
mongo --port 21000 use admin config = { _id : "replconf", members : [ {_id : 0, host : "111.111.111.93:21000" }, {_id : 1, host : "111.111.111.54:21000" }, {_id : 2, host : "111.111.111.252:21000" } ] }7.初始化config服務器的副本集
rs.initiate(config)這一步非常重要,必須初始化成功。不成功的話,路由服務器與配置服務器連接不上。
其中,”_id” : “configs”應與配置文件中配置的 replicaction.replSetName 一致,”members” 中的 “host” 為三個節(jié)點的 ip 和 port。
8.三臺分片服務器搭建副本集,配置分片副本集(三臺機器)。
cat >/data/mongodb/shard1/conf/shard.conf <9.啟動三臺服務器的shard1 server
mongod -f /data/mongodb/shard1/conf/shard.conf登陸任意一臺服務器,初始化副本集
mongo --port 22001 use admin10.定義副本集配置,第三個節(jié)點的 “arbiterOnly”:true 代表其為仲裁節(jié)點。
config = {_id:"shard1",members:[ {_id:0,host:"111.111.111.93:22001"}, {_id:1,host:"111.111.111.54:22001",arbiterOnly:true}, {_id:2,host:"111.111.111.252:22001"},] }初始化副本集配置
rs.initiate(config);此時shard1 副本集已經(jīng)配置完成,mongodb-1為primary,mongodb-2為arbiter,mongodb-3為secondary。
同樣的操作進行shard2配置和shard3配置
注意:進行shard2的副本集初始化,在mongodb-2,初始化shard3副本集在mongodb-3上進行操作。
同理,我們設(shè)置第二個分片
cat >/data/mongodb/shard2/conf/shard.conf <并依次啟動三臺服務器的shard2 server
## 啟動shard2副本集 mongod -f /data/mongodb/shard2/conf/shard.conf初始化副本集配置
## 進入到shard2副本集 mongo --port 22002 use admin config = {_id:"shard2",members:[ {_id:0,host:"111.111.111.93:22002"}, {_id:1,host:"111.111.111.54:22002"}, {_id:2,host:"111.111.111.252:22002",arbiterOnly:true},] } rs.initiate(config);最后設(shè)置第三個分片副本集 ,配置文件配置項
cat >/data/mongodb/shard3/conf/shard.conf <啟動三臺服務器的shard3 server
mongod -f /data/mongodb/shard3/conf/shard.conf## 進入到shard3副本集 use admin config = {_id:"shard3",members:[ {_id:0,host:"111.111.111.93:22003",arbiterOnly:true}, {_id:1,host:"111.111.111.54:22003"}, {_id:2,host:"111.111.111.252:22003"},] } rs.initiate(config);11. 配置路由服務器mongos
目前三臺服務器的config服務器和shard服務器均已啟動,現(xiàn)在開始配置mongos服務的三副本集
由于mongos服務器的配置是從內(nèi)存中加載,所以自己沒有存在數(shù)據(jù)目錄configdb連接為config服務器集群
先啟動config服務器和shard服務器,然后啟動路由實例:(三臺機器)
mongs服務器配置文件
cat >/data/mongodb/mongos/conf/mongos.conf<啟動三臺服務器的mongos server
mongos -f /data/mongodb/mongos/conf/mongos.conf目前搭建了mongodb config服務器、mongos服務器,各個shard服務器,不過應用程序連接到mongos路由服務器并不能使用分片機制,還需要在程序里設(shè)置分片配置,讓分片生效,意即將mongos,shard,config三類服務器串起來即為分片服務器了
登陸任意一臺mongos
mongo --port 20000使用admin數(shù)據(jù)庫
use admin串聯(lián)路由服務器與分配副本集
use admin db.runCommand({addshard:"shard1/111.111.111.93:22001,111.111.111.54:22001,111.111.111.252:22001"}) db.runCommand({addshard:"shard2/111.111.111.93:22002,111.111.111.54:22002,111.111.111.252:22002"}) db.runCommand({addshard:"shard3/111.111.111.93:22003,111.111.111.54:22003,111.111.111.252:22003"})查看集群狀態(tài)
sh.status()12.配置分片
目前配置服務、路由服務、分片服務、副本集服務都已經(jīng)串聯(lián)起來了,但我們的目的是希望插入數(shù)據(jù),數(shù)據(jù)能夠自動分片。連接在mongos上,準備讓指定的數(shù)據(jù)庫、指定的集合分片生效。
指定prod_sharding分片生效
db.runCommand( { enablesharding :"prod_sharding"});指定數(shù)據(jù)庫里需要分片的集合和片鍵
db.runCommand( { shardcollection : "prod_sharding.sharding_tbl",key : {"albumId":1,"itemId":1} } ) db.runCommand( { shardcollection : "prod_sharding.sharding_tbl_2",key : {"albumId":"hashed"} } ) db.runCommand( { shardcollection : "prod_sharding.sharding_tbl_3",key : {"albumId":1,"itemId":1} } ) db.runCommand( { shardcollection : "prod_sharding.sharding_tbl_5",key : {"albumId":"hashed"} } )查看分配狀態(tài)
db.sharding_tbl.stats();創(chuàng)建用戶
use prod_sharding db.createUser( { user: "prod_sharding", pwd: "prod_sharding_123", roles: [ "dbAdmin", "dbOwner" ] } )連接DB
mongo 111.111.111.93:20000/prod_test -uprod_test -pprod_test123上述內(nèi)容就是MongoDB中怎么搭建分片集群,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:MongoDB中怎么搭建分片集群
本文URL:http://weahome.cn/article/pgsdci.html