mongodb集群搭建
1.环境
- windows或linux服务器
- mongodb包文件
mongodb官网链接
我使用的7.x版本
1.1 集群介绍
- 集群分为两个副本集和一个配置集
- 每个副本集有一个主节点,一个从节点,一个仲裁节点
- 配置集里面有一个主两个从节点
- 两个服务节点(访问入口)
1.2 功能说明
- 副本集:存储分片数据,每个副本集一主一从一仲裁(投票者)
- 配置集:存储元数据,路由节点创建数据库,表等元数据存储,一主两从,一般不会挂
- 服务节点:集群入口,通过路由节点创建分片表和数据,元数据存储到配置集,并把数据按规则分布到副本集里。
2.安装配置
2.1.cluster-01 副本集配置
- 解压/安装 mongodb包
- 在解压包下新建conf/mongod.conf
- 三节点配置相同,注意修改ip,port和存储地址,存储地址需提前创建好文件夹
#数据存储路径
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 副本集配置
- 解压/安装 mongodb包
- 在解压包下新建conf/mongod.conf
- 三节点配置相同,注意修改ip,port和存储地址,存储地址需提前创建好文件夹
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 配置服务
- 解压/安装 mongodb包
- 在解压包下新建conf/mongod.conf
- 三节点配置相同,注意修改ip,port和存储地址,存储地址需提前创建好文件夹
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 路由服务
- 解压/安装 mongodb包
- 在解压包下新建conf/mongos.conf
- 两节点配置相同,注意修改ip,port和存储地址,存储地址需提前创建好文件夹
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下启动
mongod --config ../conf/mongod.conf
2.6 所有路由节点在bin下启动
mongos --config ../conf/mongos.conf
3.初始化
使用命令行或者其他连接进入shell,我使用dataGrip连接
3.1 cluster-01主节点执行
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主节点执行
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配置服务主节点执行
rs.initiate();
rs.add("192.168.10.9:27025");
rs.add("192.168.10.9:27026");
3.4 路由服务节点
单节点执行即可,配置信息已保存至conf
#这里的 { 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
db.myDb.insertOne({"article":"红楼梦","author":"曹雪芹","userId":1});
db.myDb.insertMany([{"article":"三国演义","author":"罗贯中","userId":2},{"article":"水浒传","author":"施耐庵","userId":3} ,{"article":"西游记","author":"吴承恩","userId":4} ]);
查看节点状态配置
rs.config();
rs.status();
项目连接只需连路由节点即可
uri: mongodb://localhost:27018,localhost:27027,localhost:27058/myDb
3.5 集群配置鉴权
配置用户鉴权登录后,需要在配置文件上添加配置,并将所有节点使用生成的同一keyFile文件(可用openssl生成)
#开启认证
security:
keyFile: ../mongo.keyfile
authorization: enabled