溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB中怎么搭建分片集群

發布時間:2021-07-16 16:15:41 來源:億速云 閱讀:248 作者:Leah 欄目:關系型數據庫

本篇文章為大家展示了MongoDB中怎么搭建分片集群,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

MongoDB分片集群基本組件介紹

mongos:數據庫集群請求的入口,所有請求需要經過mongos進行協調,無需在應用層面利用程序來進行路由選擇,mongos其自身是一個請求分發中心,負責將外部的請求分發到對應的shard服務器上,mongos作為統一的請求入口,為防止mongos單節點故障,一般需要對其做HA。

config server:配置服務器,存儲所有數據庫元數據(分片,路由)的配置。mongos本身沒有物理存儲分片服務器和數據路由信息,只是存緩存在內存中來讀取數據,mongos在第一次啟動或后期重啟時候,就會從config server中加載配置信息,如果配置服務器信息發生更新會通知所有的mongos來更新自己的狀態,從而保證準確的請求路由,生產環境中通常也需要多個config server,防止配置文件存在單節點丟失問題。

shard:在傳統意義上來講,如果存在海量數據,單臺服務器存儲1T壓力非常大,無論考慮數據庫的硬盤,網絡IO,又有CPU,內存的瓶頸,如果多臺進行分攤1T的數據,到每臺上就是可估量的較小數據,在mongodb集群只要設置好分片規則,通過mongos操作數據庫,就可以自動把對應的操作請求轉發到對應的后端分片服務器上。

replica set:在總體mongodb集群架構中,對應的分片節點,如果單臺機器下線,對應整個集群的數據就會出現部分缺失,這是不能發生的,因此對于shard節點需要replica set來保證數據的可靠性,生產環境通常為2個副本+1個仲裁。

MongoDB分片集群搭建架構

架構:我們這次搭建的是三分片,每個分片三個副本集的分片集群

端口分布:mongos:20000 config:21000 shard1:22001 shard2:22002 shard3:22003

MongoDB分片集群搭建集群步驟

1.  各個機器上分別安裝MongoDb

安裝過程省略。只需要將安裝包COPY到各個服務器解壓即可

2. 分別在每臺機器建立conf、mongos、config、shard1、shard2、shard3六個目錄,因為mongos不存儲數據,只需要建立日志文件目錄即可

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. 關閉防火墻

systemctl stop firewalld.service

4. Config server搭建副本集,添加如下內容

cat>/data/mongodb/mongoconf/conf/mongoconf.conf<<EOF
dbpath=/data/mongodb/mongoconf/data
logpath=/data/mongodb/mongoconf/log/mongoconf.log    
logappend=true
bind_ip = 0.0.0.0
port = 21000
maxConns = 1000    #鏈接數       
journal = true        #日志開啟    
journalCommitInterval = 200
fork = true     #后臺執行       
syncdelay = 60
oplogSize = 1000
configsvr = true   #配置服務器     
replSet=replconf     #config server配置集replconf   
EOF

5. 分別啟動三臺服務器的config server

mongod -f /data/mongodb/mongoconf/conf/mongoconf.conf

6. 登錄任意一臺配置服務器,初始化配置副本集

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” 為三個節點的 ip 和 port。

8. 三臺分片服務器搭建副本集,配置分片副本集(三臺機器)。

cat >/data/mongodb/shard1/conf/shard.conf <<EOF
dbpath=/data/mongodb/shard1/data
logpath = /data/mongodb/shard1/log/shard1.log
port = 22001
bind_ip = 0.0.0.0
logappend = true
nohttpinterface = true
fork = true
oplogSize = 51200
journal = true
smallfiles=true
shardsvr=true #shard服務器        
replSet=shard1   #副本集名稱shard1      
EOF

9. 啟動三臺服務器的shard1 server

mongod -f /data/mongodb/shard1/conf/shard.conf

登陸任意一臺服務器,初始化副本集

mongo --port 22001
use admin

10. 定義副本集配置,第三個節點的 “arbiterOnly”:true 代表其為仲裁節點。

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 副本集已經配置完成,mongodb-1為primary,mongodb-2為arbiter,mongodb-3為secondary。

同樣的操作進行shard2配置和shard3配置

注意:進行shard2的副本集初始化,在mongodb-2,初始化shard3副本集在mongodb-3上進行操作。

同理,我們設置第二個分片

cat >/data/mongodb/shard2/conf/shard.conf <<EOF
dbpath=/data/mongodb/shard2/data
logpath = /data/mongodb/shard2/log/shard2.log
port = 22002
bind_ip = 0.0.0.0
logappend = true
nohttpinterface = true
fork = true
oplogSize = 51200
journal = true
smallfiles=true
shardsvr=true
replSet=shard2
EOF

并依次啟動三臺服務器的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);

最后設置第三個分片副本集 ,配置文件配置項

cat >/data/mongodb/shard3/conf/shard.conf <<EOF
dbpath=/data/mongodb/shard3/data
logpath = /data/mongodb/shard3/log/shard3.log
port = 22003
logappend = true
nohttpinterface = true
fork = true
oplogSize = 51200
journal = true
smallfiles=true
shardsvr=true
replSet=shard3
EOF

啟動三臺服務器的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服務器均已啟動,現在開始配置mongos服務的三副本集

由于mongos服務器的配置是從內存中加載,所以自己沒有存在數據目錄configdb連接為config服務器集群

先啟動config服務器和shard服務器,然后啟動路由實例:(三臺機器)

mongs服務器配置文件

cat >/data/mongodb/mongos/conf/mongos.conf<<EOF
logpath=/data/mongodb/mongos/log/mongos.log
logappend=true
port = 20000
maxConns = 1000
configdb=replconf/111.111.111.93:21000,111.111.111.54:21000,111.111.111.252:21000 #指定config server集群
fork = true
EOF

啟動三臺服務器的mongos server

mongos -f /data/mongodb/mongos/conf/mongos.conf

目前搭建了mongodb config服務器、mongos服務器,各個shard服務器,不過應用程序連接到mongos路由服務器并不能使用分片機制,還需要在程序里設置分片配置,讓分片生效,意即將mongos,shard,config三類服務器串起來即為分片服務器了

登陸任意一臺mongos

mongo --port 20000

使用admin數據庫

use admin

串聯路由服務器與分配副本集

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"})

查看集群狀態

sh.status()

12. 配置分片

目前配置服務、路由服務、分片服務、副本集服務都已經串聯起來了,但我們的目的是希望插入數據,數據能夠自動分片。連接在mongos上,準備讓指定的數據庫、指定的集合分片生效。 

指定prod_sharding分片生效

db.runCommand( { enablesharding :"prod_sharding"});

指定數據庫里需要分片的集合和片鍵

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"} } )

查看分配狀態

db.sharding_tbl.stats();

創建用戶

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

上述內容就是MongoDB中怎么搭建分片集群,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女