MongoDB实战

需求

在这里插入图片描述
功能需求:搭建MongoDB分片集群,模拟简历快照数据进行操作,具体要求如下:
(1) 如图搭建一个分片集群,要求每个分片节点中的复制集含有一个仲裁节点
(2) 使用权限控制,建立要访问的数据库lg_resume,这个账号名字是lagou_gx、密码是abc321。这个账号对数据库有读写权限
(3) 使用SpringBoot 进行访问分片集群,对lg_resume 库中的lg_resume_datas 进行增加和查询操作

实战操作

一、MongoDB在Linux的安装

  1. 下载社区版 MongoDB 4.1.3
    去官网下载对应的MongoDB 然后上传到Linux虚拟机
  2. 将压缩包解压即可
    tar -zxvf MongoDB-linux-x86_64-4.1.3.tgz
  3. 启动
    ./bin/mongod
  4. 指定配置文件方式的启动
    ./bin/mongod -f mongo.conf

配置文件样例:

dbpath=/data/mongo/
port=27017
bind_ip=0.0.0.0
fork=true
logpath = /data/mongo/MongoDB.log
logappend = true
auth=false

直接启动,窗口关闭就会结束
在这里插入图片描述

以配置文件启动后,就不会有太多的日志输出
在这里插入图片描述

MongoDB启动和参数说明

参数 说明

dbpath 数据库目录,默认/data/db
port 监听的端口,默认27017
bind_ip 监听IP地址,默认全部可以访问
fork 是否已后台启动的方式登陆
logpath 日志路径
logappend 是否追加日志
auth 是开启用户密码登陆
config 指定配置文件
mongo shell 的启动
启动mongo shell
./bin/mongo
指定主机和端口的方式启动
./bin/mongo --host=主机IP --port=端口

在这里插入图片描述
GUI工具 nosqlbooster4mongo-5.2.0
在这里插入图片描述

三、搭建复制集

什么是复制集

在这里插入图片描述
复制集是由一组拥有相同数据集的mongod实例做组成的集群。 复制集是一个集群,它是2台及2台以上的服务器组成,以及复制集成员包括Primary主节点,secondary从 节点和投票节点。

复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,保证数据的安全性。

复制集搭建

在这里插入图片描述

在这里插入图片描述

依次复制conf文件,额外添加replSet=lagouCluster的配置

主节点配置 mongo_37017.conf

# 主节点配置
dbpath=/data/mongo/data/server1
bind_ip=0.0.0.0
port=37017
fork=true
logpath=/data/mongo/logs/server1.log
replSet=lagouCluster

从节点1配置 mongo_37018.conf

dbpath=/data/mongo/data/server2
bind_ip=0.0.0.0
port=37018
fork=true
logpath=/data/mongo/logs/server2.log
replSet=lagouCluster

从节点2配置 mongo_37019.conf

dbpath=/data/mongo/data/server3
bind_ip=0.0.0.0
port=37019
fork=true
logpath=/data/mongo/logs/server3.log
replSet=lagouCluster

…仲裁节点同上,不复制了

初始化节点配置
启动四个节点 然后进入任意一个节点 运行如下命令:

var cfg ={"_id":"lagouCluster1", 
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"192.168.192.130:37011","priority":10},
{"_id":2,"host":"192.168.192.130:37013"},
{"_id":3,"host":"192.168.192.130:37015"},
{"_id":4,"host":"192.168.192.130:37017","arbiterOnly":true}
]
}
rs.initiate(cfg)
rs.status()

注意:仲裁节点"arbiterOnly":true
在这里插入图片描述

四、分片集群 Shard Cluster 搭建

为什么要分片
1.存储容量需求超出单机磁盘容量。
2.活跃的数据集超出单机内存容量,导致很多请求都要从磁盘读取数据,影响性能。
3.IOPS超出单个MongoDB节点的服务能力,随着数据的增长,单机实例的瓶颈会越来越明显。
4.副本集具有节点数量限制。

垂直扩展:增加更多的CPU和存储资源来扩展容量。
水平扩展:将数据集分布在多个服务器上。水平扩展即分片。
分片的工作原理

在这里插入图片描述

分片集搭建
1.配置 并启动config 节点集群
# 数据库文件位置
dbpath=config/config1
#日志文件位置
logpath=config/logs/config1.log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
bind_ip=0.0.0.0
port = 17017
# 表示是一个配置服务器
configsvr=true
#配置服务器副本集名称
replSet=configsvr

节点2、3同上,配置完毕后启动配置节点

进入任意节点的mongo shell 并添加 配置节点集群 注意use admin

./bin/mongo --port 17017
use admin
var cfg ={"_id":"configsvr",
"members":[
{"_id":1,"host":"192.168.211.133:17017"},
{"_id":2,"host":"192.168.211.133:17018"},
{"_id":3,"host":"192.168.211.133:17019"}]
};
rs.initiate(cfg)
2.配置shard集群

shard1集群搭建37017到37019

dbpath=shard/shard1/shard1-37017
bind_ip=0.0.0.0
port=37017
fork=true
logpath=shard/shard1/shard1-37017.log
replSet=shard1
shardsvr=true
dbpath=shard/shard1/shard1-37018
bind_ip=0.0.0.0
port=37018
fork=true
logpath=shard/shard1/logs/shard1-37018.log
replSet=shard1
shardsvr=true
dbpath=shard/shard1/shard1-37019
bind_ip=0.0.0.0
port=37019
fork=true
logpath=shard/shard1/logs/shard1-37019.log
replSet=shard1
shardsvr=true

shard2集群、shard3集群、shard4集群 同上

启动每个mongod 然后进入其中一个进行集群配置
var cfg ={"_id":"shard1",
"protocolVersion" : 1,
"members":[
{"_id":1,"host":"192.168.211.133:37017"},
{"_id":2,"host":"192.168.211.133:37018"},
{"_id":3,"host":"192.168.211.133:37019"}
]
};
rs.initiate(cfg)
rs.status()
3.配置和启动 路由节点

route-27017.conf

port=27017
bind_ip=0.0.0.0
fork=true
logpath=route/logs/route.log
configdb=configsvr/192.168.211.133:17017,192.168.211.133:17018,192.168.211.133:17019

启动路由节点使用 mongos (注意不是mongod)

./bin/mongos -f route/route-27017.conf
4. mongos(路由)中添加分片节点

进入路由mongos添加分片信息

mongo --port 27017
sh.status()
sh.addShard("shard1/192.168.211.133:37017,192.168.211.133:37018,192.168.211.133:37019");
sh.addShard("shard2/192.168.211.133:47017,192.168.211.133:47018,192.168.211.133:47019");
sh.status()

在这里插入图片描述

5. 开启数据库和集合分片(指定片键)

继续使用mongos完成分片开启和分片大小设置

为数据库开启分片功能
sh.enableSharding("lagou_resume")
为指定集合开启分片功能
sh.shardCollection("lagou_resume.lagou_resume_datas",{"片键字段名如 name":索引说明})
6. 验证结果

我们插入一点数据然后查看是否有数据

use lg_resume; 
for(var i=1;i<= 1000;i++){ 
db.lg_resume_datas.insert({"name":"test"+i, salary:(Math.random()*20000).toFixed(2)}); 
}

在这里插入图片描述

五、MongoDB安全认证

切换到admin数据库对用户的添加
use admin;
db.createUser(userDocument):用于创建 MongoDB 登录用户以及分配权限的方法

db.createUser(
{
user: "账号",
pwd: "密码",
roles: [
{ role: "角色", db: "安全认证的数据库" },
{ role: "角色", db: "安全认证的数据库" }
]
}
)
单机认证

要使用安全认证必须添加超级用户,以及针对某个库的用户

  1. 创建管理员
    在这里插入图片描述
  2. 创建普通用户
    在这里插入图片描述
  3. MongoDB 安全认证方式启动
    mongod --dbpath=数据库路径 --port=端口 --auth
    也可以在配置文件中 加入 auth=true
分片集群安全认证

1 开启安全认证之前 进入路由创建管理员和普通用户
2 关闭所有的配置节点 分片节点 和 路由节点

安装psmisc
yum install psmisc
安装完之后可以使用killall 命令 快速关闭多个进程
killall mongod

3 生成密钥文件 并修改权限

openssl rand -base64 756 > data/mongodb/testKeyFile.file
chmod 600 data/mongodb/keyfile/testKeyFile.file

4 配置节点集群和分片节点集群开启安全认证和指定密钥文件

auth=true
keyFile=data/mongodb/testKeyFile.file

5在路由配置文件中 设置密钥文件

keyFile=data/mongodb/testKeyFile.file

6 启动所有的配置节点 分片节点 和 路由节点 使用路由进行权限验证
可以编写一个shell 脚本 批量启动

./bin/mongod -f config/config-17017.conf
./bin/mongod -f config/config-17018.conf
./bin/mongod -f config/config-17019.conf
./bin/mongod -f shard/shard1/shard1-37017.conf
./bin/mongod -f shard/shard1/shard1-37018.conf
./bin/mongod -f shard/shard1/shard1-37019.conf
./bin/mongod -f shard/shard2/shard2-47017.conf
./bin/mongod -f shard/shard2/shard2-47018.conf
./bin/mongod -f shard/shard2/shard2-47019.conf
./bin/mongos -f route/route-27017.conf

7 Spring boot 连接安全认证的分片集群

spring.data.mongodb.username=账号
spring.data.mongodb.password=密码
#spring.data.mongodb.uri=mongodb://账号:密码@IP:端口/数据库名

8 当我们开启认证后,要想单独查询每个分片集群的数据,就必须为其创建账号
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值