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 
相关推荐
码上一元6 分钟前
掌握 Spring 事务管理:深入理解 @Transactional 注解
数据库·spring
程序猿毕设源码分享网9 分钟前
基于springboot停车场管理系统源码和论文
数据库·spring boot·后端
YiSLWLL15 分钟前
Django+Nginx+uwsgi网站使用Channels+redis+daphne实现简单的多人在线聊天及消息存储功能
服务器·数据库·redis·python·nginx·django
.生产的驴26 分钟前
Docker Seata分布式事务保护搭建 DB数据源版搭建 结合Nacos服务注册
数据库·分布式·后端·spring cloud·docker·容器·负载均衡
盖盖衍上26 分钟前
4.4 MySQL 触发器(Trigger)
数据库·mysql
清心歌29 分钟前
Redis入门(九)
数据库·redis
superman超哥32 分钟前
Oralce数据库巡检SQL脚本
数据库·oracle·性能优化·dba·rdbms·巡检
墨城烟柳ベ旧人殇33 分钟前
MySQL数据库6——SQL优化
数据库·sql·mysql
standxy33 分钟前
集成金蝶云星空数据至MySQL的完整案例解析
android·数据库·mysql
漫天转悠1 小时前
MySQL 数据库命名及SQL语句书写规范详解
数据库·mysql