mongodb集群搭建

1.环境

  1. windows或linux服务器
  2. mongodb包文件

mongodb官网链接

我使用的7.x版本

1.1 集群介绍

  • 集群分为两个副本集和一个配置集
  • 每个副本集有一个主节点,一个从节点,一个仲裁节点
  • 配置集里面有一个主两个从节点
  • 两个服务节点(访问入口)

1.2 功能说明

  • 副本集:存储分片数据,每个副本集一主一从一仲裁(投票者)
  • 配置集:存储元数据,路由节点创建数据库,表等元数据存储,一主两从,一般不会挂
  • 服务节点:集群入口,通过路由节点创建分片表和数据,元数据存储到配置集,并把数据按规则分布到副本集里。

2.安装配置

2.1.cluster-01 副本集配置

  1. 解压/安装 mongodb包
  2. 在解压包下新建conf/mongod.conf
  3. 三节点配置相同,注意修改ip,port和存储地址,存储地址需提前创建好文件夹
bash 复制代码
#数据存储路径
storage:
  dbPath: D:\software\mongodb\clusters\node1-1\data\db
systemLog:
  destination: file
  path: D:\software\mongodb\clusters\node1-1\logs\mongo.log
  logAppend: true
#守护进程
#processManagement:
#  fork: true
net:
  bindIp: 127.0.0.1,192.168.10.9
  port: 27018
replication:
  replSetName: cluster-01
sharding:
  #分片角色
  clusterRole: shardsvr  

我这边使用 27018-27020端口

2.2cluster-02 副本集配置

  1. 解压/安装 mongodb包
  2. 在解压包下新建conf/mongod.conf
  3. 三节点配置相同,注意修改ip,port和存储地址,存储地址需提前创建好文件夹
bash 复制代码
storage:
 dbPath: D:\software\mongodb\clusters\node2-1\data\db
systemLog:
 destination: file
 path: D:\software\mongodb\clusters\node2-1\logs\mongo.log
 logAppend: true
#守护进程
#processManagement:
#  fork: true
net:
 bindIp: 127.0.0.1,192.168.10.9
 port: 27021
replication:
 replSetName: cluster-02
sharding:
 #分片角色
 clusterRole: shardsvr  

我这边使用 27021-27023端口

2.3 cluster-03 配置服务

  1. 解压/安装 mongodb包
  2. 在解压包下新建conf/mongod.conf
  3. 三节点配置相同,注意修改ip,port和存储地址,存储地址需提前创建好文件夹
bash 复制代码
storage:
  dbPath: D:\software\mongodb\clusters\nodeConf-1\data\db
systemLog:
  destination: file
  path: D:\software\mongodb\clusters\nodeConf-1\logs\mongo.log
  logAppend: true
#守护进程
#processManagement:
#  fork: true
net:
  bindIp: 127.0.0.1,192.168.10.9
  port: 27024
replication:
  replSetName: cluster-03
sharding:
  #分片角色
  clusterRole: configsvr  

我这边使用 27024-27026端口

2.4 路由服务

  1. 解压/安装 mongodb包
  2. 在解压包下新建conf/mongos.conf
  3. 两节点配置相同,注意修改ip,port和存储地址,存储地址需提前创建好文件夹
bash 复制代码
systemLog:
  destination: file
  path: D:\software\mongodb\clusters\nodes-1\logs\mongo.log
  logAppend: true
#守护进程
#processManagement:
#  fork: true
net:
  bindIp: 127.0.0.1,192.168.10.9
  port: 27027
  
sharding:
  #指定配置节点副本集
  configDB: cluster-03/192.168.10.9:27024,192.168.10.9:27025,192.168.10.9:27026

2.5 所有非路由节点在bin下启动

bash 复制代码
mongod --config ../conf/mongod.conf

2.6 所有路由节点在bin下启动

bash 复制代码
mongos --config ../conf/mongos.conf

3.初始化

使用命令行或者其他连接进入shell,我使用dataGrip连接

3.1 cluster-01主节点执行

bash 复制代码
rs.initiate();
#添加从节点
rs.add("192.168.10.9:27019");
# 普通主从使用,集群跳过 这里的 { w: 2 } 表示至少需要两个节点确认写入。你可以根据实际情况调整 w 的值。
#使用 setDefaultRWConcern 命令设置集群范围的默认写关注。例如,可以设置一个较宽松的写关注,以确保大多数节点确认写入
# db.adminCommand({
#   setDefaultRWConcern: 1,
#   defaultWriteConcern: { w: 2 }
# });
#添加仲裁者
rs.addArb("192.168.10.9:27020");

!在这里插入图片描述(https://i-blog.csdnimg.cn/direct/957fe83d3c9041179a9bd7dd555cde1c.png

3.2 cluster-02主节点执行

bash 复制代码
rs.initiate();
rs.add("192.168.10.9:27022");
# 普通主从使用,集群跳过 这里的 { w: 2 } 表示至少需要两个节点确认写入。你可以根据实际情况调整 w 的值。
#使用 setDefaultRWConcern 命令设置集群范围的默认写关注。例如,可以设置一个较宽松的写关注,以确保大多数节点确认写入
# db.adminCommand({
#   setDefaultRWConcern: 1,
#   defaultWriteConcern: { w: 2 }
# });
#添加仲裁者
rs.addArb("192.168.10.9:27023");

3.3 cluster-03配置服务主节点执行

bash 复制代码
rs.initiate();
rs.add("192.168.10.9:27025");
rs.add("192.168.10.9:27026");

3.4 路由服务节点

单节点执行即可,配置信息已保存至conf

bash 复制代码
#这里的 { w: 2 } 表示至少需要两个节点确认写入。你可以根据实际情况调整 w 的值。
#使用 setDefaultRWConcern 命令设置集群范围的默认写关注。例如,可以设置一个较宽松的写关注,以确保大多数节点确认写入
db.adminCommand({
  setDefaultRWConcern: 1,
  defaultWriteConcern: { w: 2 }
});
sh.addShard("cluster-01/192.168.10.9:27018,192.168.10.9:27019,192.168.10.9:27020");
sh.addShard("cluster-02/192.168.10.9:27021,192.168.10.9:27022,192.168.10.9:27023");
//开启数据库分片(自动创建数据库)
sh.enableSharding("myDb")

//开启表分片,hash策略(自动创建表)
sh.shardCollection("myDb.books",{"userId":"hashed"})
//开启表分片,hash策略(自动创建表)
sh.shardCollection("myDb.books2",{"userId":1})

测试插入,够64m才会hash

bash 复制代码
db.myDb.insertOne({"article":"红楼梦","author":"曹雪芹","userId":1});
db.myDb.insertMany([{"article":"三国演义","author":"罗贯中","userId":2},{"article":"水浒传","author":"施耐庵","userId":3} ,{"article":"西游记","author":"吴承恩","userId":4} ]);

查看节点状态配置

bash 复制代码
rs.config();
rs.status();

项目连接只需连路由节点即可

bash 复制代码
uri: mongodb://localhost:27018,localhost:27027,localhost:27058/myDb

3.5 集群配置鉴权

配置用户鉴权登录后,需要在配置文件上添加配置,并将所有节点使用生成的同一keyFile文件(可用openssl生成)

bash 复制代码
#开启认证  
security:
  keyFile: ../mongo.keyfile
  authorization: enabled 
相关推荐
这个DBA有点耶7 小时前
信创场景下数据同步软件怎么选?对比开源CDC与原生闭环工具的结构性差异
数据库·mysql·架构
多客:duokelijie7 小时前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
PingCAP7 小时前
平凯星辰上榜!2026 年胡润全球独角兽企业
数据库
PingCAP7 小时前
轨道交通 AFC 系统升级,平凯 Loop 把跨部门协同变成可追溯闭环
数据库
java_logo9 小时前
Docker 部署 CloudBeaver:轻松搭建网页数据库管理平台
数据库·docker·容器·数据库管理·dbeaver·轩辕镜像·cloudbeaver
李白客10 小时前
AI 数据库落地 NL2SQL:准确率卡在四成,问题在表注释不在模型
数据库
FluxDB10 小时前
FluxDB vs DBX vs DBeaver:GPUI、Tauri、Eclipse 三种技术栈实测
数据库·mysql
杨航 AI10 小时前
JEV的用法
java·前端·数据库
数据库小学妹11 小时前
MySQL分页结果不稳定:唯一键兜底与游标分页
数据库·mysql·dba