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 -prot 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 -prot 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 -prot 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().

发布了55 篇原创文章 · 获赞 6 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/liver_life/article/details/100562949