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 
相关推荐
正在绘制中8 分钟前
Java重要面试名词整理(六):MongoDB
java·mongodb·面试
qianmoQ12 分钟前
DataCap MongoDB Driver: 全面解析MongoDB在DataCap中的使用指南
java·数据库·mongodb·datacao
张声录132 分钟前
【ETCD】【实操篇(十四)】etcd 集群备份与还原指南
数据库·etcd
m0_748257181 小时前
visual studio连接sql server数据库
数据库·oracle·visual studio
阿moments1 小时前
SpringBoot3-第六篇(整合NoSQL)
数据库·spring boot·nosql
秋意钟2 小时前
数据设计规范
数据库·oracle
神秘打工猴2 小时前
拉链表,流⽔表以及快照表的含义和特点
数据库
肘击鸣的百k路2 小时前
日志和MVCC的详解
数据库·oracle
小小药2 小时前
011-spring-整合三方框架的命名空间原理(重要)
java·数据库·spring
m0_748250932 小时前
Text2SQL(NL2sql)对话数据库:设计、实现细节与挑战
数据库