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 
相关推荐
广州灵眸科技有限公司2 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手4 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学4 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh6 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789867 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD7 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo8 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward8 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记9 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发9 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序