MongoDB分布式集群部署-cnblog

MongoDB分布式集群部署

1 部署副本集

1.1 单机多实例

在单节点上创建3个实例的相关目录

#切换到mongodb目录下
cd /usr/local/mongodb/
#创建三个实例(27017、27018、27019)的相关目录
mkdir 27017 27018 27019

在目录27017中执行以下操作,创建数据目录,配置文件目录、日志文件目录等

cd 27017
#创建数据目录、配置文件目录、日志文件目录和pid文件目录
mkdir data etc log pid
#切换到配置文件目录下
cd etc
#使用touch命令创建配置文件mongod.conf
touch mongod.conf
#编辑配置文件mongod.conf
vim mongod.conf

在mongod.conf中输入以下配置信息

systemLog:
  path: /usr/local/mongodb/27017/log/mongod.log
storage:
  dbPath: /usr/local/mongodb/27017/data
processManagement:
  fork: true
  pidFilePath: /usr/local/mongodb/27017/pid/mongod.pid
net:
  port: 27017
  bindIp: 0.0.0.0

在目录27018中执行同样的操作,将27017改成27018

在目录27019中执行同样的操作,将27017改成27019

执行以下命令启动端口号27017实例

mongod --dbpath /usr/local/mongodb/27017/data --config /usr/local/mongodb/27017/etc/mongod.conf --logpath /usr/local/mongodb/27017/log/mongod.log --port 27017
mongod --dbpath /usr/local/mongodb/27018/data --config /usr/local/mongodb/27018/etc/mongod.conf --logpath /usr/local/mongodb/27018/log/mongod.log --port 27018
mongod --dbpath /usr/local/mongodb/27019/data --config /usr/local/mongodb/27019/etc/mongod.conf --logpath /usr/local/mongodb/27019/log/mongod.log --port 27019

image-20251119142323791

image-20251119143122590

image-20251119143205501

查看三个实例是否启动成功

ps -ef|grep mongod

image-20251119143337428

1.2 部署副本集

启动mongod进程为副本集模式(27017、27018、27019)都要开启

mongod --dbpath /usr/local/mongodb/27017/data --config /usr/local/mongodb/27017/etc/mongod.conf --logpath /usr/local/mongodb/27017/log/mongod.log --port 27017 --replSet replica_set --shardsvr
mongod --dbpath /usr/local/mongodb/27018/data --config /usr/local/mongodb/27018/etc/mongod.conf --logpath /usr/local/mongodb/27018/log/mongod.log --port 27018 --replSet replica_set --shardsvr
mongod --dbpath /usr/local/mongodb/27019/data --config /usr/local/mongodb/27019/etc/mongod.conf --logpath /usr/local/mongodb/27019/log/mongod.log --port 27019 --replSet replica_set --shardsvr

在任意一个实例上连接mongod服务

mongo --host localhost --port 27017

初始化副本集

rs.initiate({
    _id: "replica_set",
    members: [
        { _id: 0, host: "localhost:27017" },
        { _id: 1, host: "localhost:27018" },
        { _id: 2, host: "localhost:27019" }
    ]
})

image-20251119180455015

执行以下语句,查看副本集和各节点的状态信息

rs.status()

image-20251119180524808

image-20251119181052418

image-20251119181130822

image-20251119181155392

1.3 添加节点和删除节点

如果需要为副本集添加新的节点,则一次执行以下命令即可,以27020端口为例

#将端口号为27020的实例以副本集方式启动 
mongod --dbpath /usr/local/mongodb/27020/data --config /usr/local/mongodb/27020/etc/mongod.conf --logpath /usr/local/mongodb/27020/log/mongod.log --port 27020 --replSet replica_set --shardsvr
#连接到副本集主节点(端口号为27017)
mongo --host localhost --port 27017
#添加新节点
rs.add("localhost:27020")
#查看新节点是否添加成功
rs.status()

image-20251119182757962

如果需要删除节点可以执行以下语句

rs.remove("localhost:27020")

image-20251119182934907

1.4 测试副本集

连接副本集主节点端口号为27017,然后在主节点上创建replicadb数据库,在该数据库中创建test集合并插入三个文档

use replicadb
db.createCollection("test")
db.test.insert([{name:"aaa",sex:"male",age:20},{name:"bbb",sex:"female",age:18},{name:"ccc",sex:"male",age:23}])
#查看test集合中的全部文档
db.test.find()

image-20251119184436468

在副本集的从节点(端口号为27018)上查看副本数据

mongo --host localhost --port 27018
rs.slaveOk()
use replicadb
db.test.find()

image-20251119185550513

2 部署分片集群

2.1 部署分片集群

  1. 分别创建27024``27025``27026实例的相关目录和数据目录、配置文件目录、日志文件目录。参照单机多实例!!!
  2. 启动config服务器
mongod --dbpath /usr/local/mongodb/27024/data --config /usr/local/mongodb/27024/etc/mongod.conf --logpath /usr/local/mongodb/27024/log/mongod.log --port 27024 --configsvr --replSet config
mongod --dbpath /usr/local/mongodb/27025/data --config /usr/local/mongodb/27025/etc/mongod.conf --logpath /usr/local/mongodb/27025/log/mongod.log --port 27025 --configsvr --replSet config
mongod --dbpath /usr/local/mongodb/27026/data --config /usr/local/mongodb/27026/etc/mongod.conf --logpath /usr/local/mongodb/27026/log/mongod.log --port 27026 --configsvr --replSet config
  1. 连接到config服务器,并初始化副本集
mongo --host localhost --port 27024
rs.initiate({_id:"config",members:[{_id:0,host:"localhost:27024"},{_id:1,host:"localhost:27025"},{_id:2,host:"localhost:27026"}]})
  1. 启动router服务器供应用程序连接
mongos --configdb config/localhost:27024,localhost:27025,localhost:27026 --port 27023

2.2 测试分片集群

  1. 打开一个新的终端,使用 mongo shell 连接到你刚刚启动的 mongos 实例(端口 27023)
mongo --host localhost --port 27023
  1. 在shell环境下执行以下命令,将副本集replica_set和replica_set1都加入集群中
use admin
db.runCommand({addShard:"replica_set/localhost:27017,localhost:27018,localhost:27019",name:"rep1",maxsize:5120})
db.runCommand({addShard:"replica_set1/localhost:27027,localhost:27028,localhost:27029",name:"rep2",maxsize:5120})
  1. 对shardtest数据库中的test集合按照_id键分片

首先执行以下语句对shardtest数据库启用分片

sh.enableSharding("shardtest")

数据库启用分片后,执行以下语句对集合进行分片

sh.shardCollection("shardtest.test",{"_id":1})

使用addShard实现,需要移除某个分片节点,可以执行以下语句

db.runCommand({removeShard:"localhost:27033"})
posted @ 2025-12-18 16:23  酱焖热带鱼  阅读(26)  评论(0)    收藏  举报