MongoDB 4.2.0分片集群搭建


MongoDB 4.2.0分片集群搭建

MongoDB分片集群搭建


一.環境介紹

系統環境

操作系統 主機名 IP地址
CentOS Linux release 7.6.1810 (Core) mongox 10.0.0.4
CentOS Linux release 7.6.1810 (Core) mongoy 10.0.0.5
CentOS Linux release 7.6.1810 (Core) mongoz 10.0.0.6

MongoDB版本

當前使用的MongoDB版本為4.2.0,下載地址.

關閉防火牆

systemctl stop filewalld

集群架構

副本集

副本集

若要查看具體的文檔,可以訪問官方文檔,文章中很多內容都可以參考https://docs.mongodb.com/manual/,地址

分片

分片

二.安裝

創建用戶

創建目錄

#創建日志目錄
mkdir -p /var/log/mongodb/
touch /var/log/mongodb/mongod{0,1,2}.log
touch /var/log/mongodb/csvr.log
#創建存儲目錄
mkdir -p /data/mongodb/{0,1,2,csvr}

配置副本集

在每台機器上都創建下列三個文件

#mongod0.yaml
systemLog:
   destination: file
   path: "/var/log/mongodb/mongod0.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/data/mongodb/0"
processManagement:
   fork: true
net:
   bindIp: 0.0.0.0
   port: 27016
setParameter:
   enableLocalhostAuthBypass: false
replication:
   replSetName: "rs0"
sharding:
   clusterRole: shardsvr
#mongod1.yaml
systemLog:
   destination: file
   path: "/var/log/mongodb/mongod1.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/data/mongodb/1"
processManagement:
   fork: true
net:
   bindIp: 0.0.0.0
   port: 27017
setParameter:
   enableLocalhostAuthBypass: false
replication:
   replSetName: "rs1"
sharding:
   clusterRole: shardsvr
#mongod2.yaml
systemLog:
   destination: file
   path: "/var/log/mongodb/mongod2.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/data/mongodb/2"
processManagement:
   fork: true
net:
   bindIp: 0.0.0.0
   port: 27018
setParameter:
   enableLocalhostAuthBypass: false
replication:
   replSetName: "rs2"
sharding:
   clusterRole: shardsvr

初始化副本集

#在每台機器上都執行
bin/mongod -f mongod0.yaml
bin/mongod -f mongod1.yaml
bin/mongod -f mongod2.yaml
#任意一台機器執行,進去到mongo shell
bin/mongo -port 27016
#在mongo shell中執行
rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "mongox:27016" },
      { _id: 1, host: "mongoy:27016" },
      { _id: 2, host: "mongoz:27016" }
   ]
})
#任意一台機器執行,進去到mongo shell
bin/mongo -port 27017
#在mongo shell中執行
rs.initiate( {
   _id : "rs1",
   members: [
      { _id: 0, host: "mongox:27017" },
      { _id: 1, host: "mongoy:27017" },
      { _id: 2, host: "mongoz:27017" }
   ]
})
#任意一台機器執行,進去到mongo shell
bin/mongo -port 27018
#在mongo shell中執行
rs.initiate( {
   _id : "rs2",
   members: [
      { _id: 0, host: "mongox:27018" },
      { _id: 1, host: "mongoy:27018" },
      { _id: 2, host: "mongoz:27018" }
   ]
})

配置服務器

創建配置文件

#mongox主機上,csvr.yaml
systemLog:
  destination: file
  #日志存儲位置
  path: "/var/log/mongodb/csvr.log"
  logAppend: true
storage:
  journal:
    enabled: true
  #數據文件存儲位置
  dbPath: "/data/mongodb/csvr"
  #是否一個庫一個文件夾
  directoryPerDB: true
  #WT引擎配置
  wiredTiger:
    engineConfig:
      #WT最大使用cache(根據服務器實際情況調節)
      cacheSizeGB: 1
      #是否將索引也按數據庫名單獨存儲
      directoryForIndexes: true
    #表壓縮配置
    collectionConfig:
      blockCompressor: zlib
    #索引配置
    indexConfig:
      prefixCompression: true
#端口配置
net:
  bindIp: mongox
  port: 27019
replication:
  oplogSizeMB: 2048
  replSetName: csvr
sharding:
  clusterRole: configsvr
processManagement:
  fork: true

在mongox主機上執行該文件,bin/mongod -f csvr.yaml

#mongoy主機上,csvr.yaml
systemLog:
  destination: file
  #日志存儲位置
  path: "/var/log/mongodb/csvr.log"
  logAppend: true
storage:
  journal:
    enabled: true
  #數據文件存儲位置
  dbPath: "/data/mongodb/csvr"
  #是否一個庫一個文件夾
  directoryPerDB: true
  #WT引擎配置
  wiredTiger:
    engineConfig:
      #WT最大使用cache(根據服務器實際情況調節)
      cacheSizeGB: 1
      #是否將索引也按數據庫名單獨存儲
      directoryForIndexes: true
    #表壓縮配置
    collectionConfig:
      blockCompressor: zlib
    #索引配置
    indexConfig:
      prefixCompression: true
#端口配置
net:
  bindIp: mongoy
  port: 27019
replication:
  oplogSizeMB: 2048
  replSetName: csvr
sharding:
  clusterRole: configsvr
processManagement:
  fork: true

在mongoy主機上執行該文件,`bin/mongod -f csvr.yaml

#mongoz主機上,csvr-mongoz.yaml
systemLog:
  destination: file
  #日志存儲位置
  path: "/var/log/mongodb/csvr.log"
  logAppend: true
storage:
  journal:
    enabled: true
  #數據文件存儲位置
  dbPath: "/data/mongodb/csvr"
  #是否一個庫一個文件夾
  directoryPerDB: true
  #WT引擎配置
  wiredTiger:
    engineConfig:
      #WT最大使用cache(根據服務器實際情況調節)
      cacheSizeGB: 1
      #是否將索引也按數據庫名單獨存儲
      directoryForIndexes: true
    #表壓縮配置
    collectionConfig:
      blockCompressor: zlib
    #索引配置
    indexConfig:
      prefixCompression: true
#端口配置
net:
  bindIp: mongoz
  port: 27019
replication:
  oplogSizeMB: 2048
  replSetName: csvr
sharding:
  clusterRole: configsvr
processManagement:
  fork: true

在mongoz主機上執行該文件,`bin/mongod -f csvr.yaml

初始化配置服務器

#切換到mongo shell 
bin/mongo  --host mongox --port 27019
#在mongo shell中執行
rs.initiate( {
   _id : "csvr",
   configsvr: true,
   members: [
      { _id: 0, host: "mongox:27019" },
      { _id: 1, host: "mongoy:27019" },
      { _id: 2, host: "mongoz:27019" }
   ]
   
})

mongos的配置

創建配置文件

#mongox主機上創建mongos0.yaml
systemLog:
  destination: file
  path: "/var/log/mongodb/mongos.log"
  logAppend: true
net:
  bindIp: mongox
  port: 27020
# 將confige server 添加到路由
sharding:
  configDB: csvr/mongox:27019,mongoy:27019,mongoz:27019
processManagement:
  fork: true
#在mongox上執行
bin/mongos -f mongos0.yaml

#mongoy主機上創建mongos1.yaml
systemLog:
  destination: file
  path: "/var/log/mongodb/mongos.log"
  logAppend: true
net:
  bindIp: mongoy
  port: 27020
# 將confige server 添加到路由
sharding:
  configDB: csvr/mongox:27019,mongoy:27019,mongoz:27019
processManagement:
  fork: true
#在mongoy上執行
bin/mongos -f mongos1.yaml
#mongoz主機上創建mongos2.yaml
systemLog:
  destination: file
  path: "/var/log/mongodb/mongos.log"
  logAppend: true
net:
  bindIp: mongoz
  port: 27020
# 將confige server 添加到路由
sharding:
  configDB: csvr/mongox:27019,mongoy:27019,mongoz:27019
processManagement:
  fork: true
#在mongoz上執行
bin/mongos -f mongos2.yaml

登錄到mongos

#任意一台主機執行都可以,當前在mongox上執行
bin/mongos mongox:27020

添加分片

use admin
db.runCommand( { addshard : "rs0/mongox:27016,mongoy:27016,mongoz:27016",name:"shard1"} )
db.runCommand( { addshard : "rs1/mongox:27017,mongoy:27017,mongoz:27017",name:"shard2"} )
db.runCommand( { addshard : "rs2/mongox:27018,mongoy:27018,mongoz:27018",name:"shard3"} )

激活分片

需要注意的是,分片功能是需要手動開啟的.

在mongo shell中,這里設置一個測試數據庫,用來測試分片的功能.

db.runCommand( { enablesharding : "testdb" } )
db.runCommand( { shardcollection : "testdb.users",key : {id: 1} } )

創建測試數據,用來測試分片功能,下面的代碼向數據庫中插入了200w條數據,由於數據量比較大,所以批量插入的時候,時間會稍微有點久.

var arr=[];
for(var i=0;i<2000000;i++){
var uid = i;
var name = "mongodb"+i;
arr.push({"id":uid,"name":name});
}
db.users.insertMany(arr);

查詢狀態

通過sh.status()函數查看當前分片的狀態,查看副本集的狀態通過rs.status().

庫,用來測試分片的功能.

db.runCommand( { enablesharding : "testdb" } )
db.runCommand( { shardcollection : "testdb.users",key : {id: 1} } )

創建測試數據,用來測試分片功能,下面的代碼向數據庫中插入了200w條數據,由於數據量比較大,所以批量插入的時候,時間會稍微有點久.

var arr=[];
for(var i=0;i<2000000;i++){
var uid = i;
var name = "mongodb"+i;
arr.push({"id":uid,"name":name});
}
db.users.insertMany(arr);

查詢狀態

通過sh.status()函數查看當前分片的狀態,查看副本集的狀態通過rs.status().


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM