目录
概述-MongoDB Replication(副本集,可参考官方英文)
参考文献#t4)
概述-MongoDB Replication(副本集,可参考官方英文)
MongoDB中的副本集可以理解为同一组维护相同数据集的mongod进程。副本集作为所有生产部署的基础,它提供了冗余性、高可用性。下面主要介绍MongoDB中的副本以及副本集的组件及其架构。
-
冗余&&数据可用性
副本集相当于在多个数据库服务端(或者说多个节点)进行了数据备份,这种方式有效提高了单节点数据库服务段的容错能力。也就是说当某个节点发生异常后,仍然可以从其他节点获取数据。副本集允许客户端从不同的服务端读取数据,因此该部署方式提供了更强大的数据读取的能力。在不同节点上维护副本集可以提高数据局部性以及数据可用性。
-
MongoDB副本集
一个副本集由多个mongod实例组成,这些mongod实例维护着相同的数据集。副本集的组成包括多个数据负载节点和1个可选的仲裁节点。其中,多个数据负载节点中=1个主节点+多个从节点。
主从节点及其关系:如图1所示,主节点能够接受所有的读写操作;对于某个副本集来讲,通常只允许1个主节点存在。如图2所示,从节点相当于继承了主节点的操作,复制了主节点的数据集以保证各个节点的数据统一。
图1 图2
如图3所示,当存在主、从节点时,可以添加仲裁节点。其作用面对异常情况(比如说主节点出现连接超时的情况时候,其他从节点就会被选举为主节点,这种情况可以粗浅对应下图4所示的状态)通过选举机制推选主节点。仲裁节点不存储数据集,并且其本身不会参与选举,也就是说不管总、从节点如何变化,仲裁节点都不会变化。
图3 图4
此外,客户端进行数据查询等操作时默认是请求主节点的,不过MongoDB副本集允许客户端优先从指定的从节点进行数据库的读取操作。
单机多节点docker部署流程
- 镜像拉取:
sudo docker pull mongo
- 创建MongoDB容器(主节点、从节点、仲裁节点)
配置MongoDB容器挂载文件
# 创建本地文件夹作为各docker容器的挂载目录
sudo mkdir -p /data/application/mongo1/db
sudo mkdir -p /data/application/mongo2/db
sudo mkdir -p /data/application/mongo3/db
sudo mkdir -p /data/application/mongo1/configdb
sudo mkdir -p /data/application/mongo2/configdb
sudo mkdir -p /data/application/mongo3/configdb
# 在对应文件夹内创建配置文件
sudo vim /data/application/mongo1/configdb/mongod.conf
sudo cp /data/application/mongo1/configdb/mongod.conf /data/application/mongo2/configdb/
sudo cp /data/application/mongo1/configdb/mongod.conf /data/application/mongo3/configdb/
# 粘贴下面的配置文件后保存
# net:
# port: 27017
# bindIp: 0.0.0.0
# systemLog:
# logAppend: true
# security:
# keyFile: "/data/configdb/mongodbKeyfile.key" # 注意该路径为稍后创建容器内的路径,非本地宿主机
# clusterAuthMode: "keyFile"
# #authorization: "enabled"
# replication:
# replSetName: "mongoRs"
# 生成Key文件,这里需要切换至root
openssl rand -base64 756 > /data/application/mongo1/configdb/mongodbKeyfile.key
# 复制Key文件至各节点配置
sudo cp /data/application/mongo1/configdb/mongodbKeyfile.key /data/application/mongo2/configdb
sudo cp /data/application/mongo1/configdb/mongodbKeyfile.key /data/application/mongo3/configdb
# Key文件可读权限
sudo chmod 400 /data/application/mongo1/configdb/mongodbKeyfile.key
sudo chmod 400 /data/application/mongo2/configdb/mongodbKeyfile.key
sudo chmod 400 /data/application/mongo3/configdb/mongodbKeyfile.key
启动容器(3个节点):
# 实例化docker容器
sudo docker run -di --name=mongo_server1 -p 37017:27017 -v /data/application/mongo1/configdb:/data/configdb/ -v /data/application/mongo1/db:/data/db/ mongo --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf
sudo docker run -di --name=mongo_server2 -p 47017:27017 -v /data/application/mongo2/configdb:/data/configdb/ -v /data/application/mongo2/db:/data/db/ mongo --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf
sudo docker run -di --name=mongo_server3 -p 57017:27017 -v /data/application/mongo3/configdb:/data/configdb/ -v /data/application/mongo3/db:/data/db/ mongo --replSet "mongoRs" --bind_ip_all -f /data/configdb/mongod.conf
查看当前容器运行状态:
- 配置主、从、仲裁节点
分别配置容器1、配置容器2、配置容器3为主节点、从节点、仲裁节点
# 进入容器
sudo docker exec -it mongo_server1 mongosh admin
# 配置节点
rs.initiate({_id:"mongoRs", members:[{_id:0, host:"你的IP:37017"}, {_id:1, host:"你的IP:47017"}, {_id:2, host:"你的IP:57017", arbiterOnly:true}]})
创建用户用mongodb-compass连接验证下数据集的同步
Ubuntu如何安装mongodb-compass的方法可以参考下面:
wget https://downloads.mongodb.com/compass/mongodb-compass_1.32.3_amd64.deb
sudo dpkg -i mongodb-compass_1.32.3_amd64.deb
mongodb-compass # 执行compass
从下图可以看出,在主节点创建记录,从节点同步产生记录!
上述已完成!!!
参考文献
- 官方文档:What is MongoDB? — MongoDB Manual
- http://blog.csdn.net/wobilini/article/details/124618488
- 【MongoDB】docker部署mongdb多机集群(跨主机副本集)
MongoDB 设置账号密码
1、安装
安装可以看我这篇文章:https://blog.csdn.net/u014641168/article/details/123937775
2、说明
由于默认安装的MongoDB是没有设置用户密码的,极其危险,所以需要设置一下用户密码
3、创建用户
用Navicat15连接MongoDB,正常连接没有问题。
执行命令
use admin
使用admin数据库
输入创建用户命令,返回1说明成功
db.createUser({user:"admin",pwd:"123456",roles:["root"]})
这就创建了一个用户名为database_admin,密码为123456的管理员账户。实际上这个用户名可以随便取,例如root、LiHua都行,因为这个用户是属于admin数据库的超级用户。
注:超级用户一定是属于admin数据库的
#默认好像是当前数据库的权限,但是可以通过这个来指定数据库(没试过)
db.createUser({user:"admin",pwd:"123456",roles:[role:"root",db:"admin"]})
4、查看用户
use admin;
db.system.users.find()
5、关闭免密登录
找到E:\MongoDB\Server\5.0\bin下的 mongod.cfg 文件,在 #security: 下添加下面代码
security:
authorization: enabled
完整配置
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: E:\MongoDB\Server\5.0\data
journal:
enabled: true
# engine:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: E:\MongoDB\Server\5.0\log\mongod.log
# network interfaces
net:
port: 27017
#配置可以远程登录
bindIp: 127.0.0.1,0.0.0.0
#processManagement:
#security:
security:
authorization: enabled
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
5、连接测试
无密码登录,双击Navicat中的连接,出现需要认证,没问题。
使用Navicat15连接,认证方式选为password,数据库是admin,用户名admin,密码123456
连接mongodb时show dbs 提示“command listDatabases requires authentication“验证
今天想重新创建一个带有密码的数据库,之前用的时候创建过,所以这次直接进powershell操作时,发现需要验证: command listDatabases requires authentication
那么验证就可以啦,不过要有之前创建时候的用户名和密码,我当时admin啥都是root, 所以直接切换到admin验证就行了
use admin
db.auth(“root”, “root”)
1
返回1就验证成功了
有关参考:https://www.jianshu.com/p/79caa1cc49a5
首次给数据库添加用户名和密码可以参考这个,这个时黑马教程教的步骤,我之前也是按这个步骤来的
https://blog.csdn.net/weixin_44679078/article/details/105543895
现在我直接给需要数据库加用户名密码就行了,不需要再创建admin那些了。
MongoDB 查看当前节点状态
连接成功后,我们可以使用rs.status()命令来查看当前节点的状态信息。以下是相关代码:
rs.status()
运行上述代码后,将返回一个包含节点状态信息的JSON对象。可以通过打印对象的属性来查看节点的状态和详细信息。
代码解释
- rs.status():是MongoDB的一个内置命令,用于查看副本集状态。执行该命令后,MongoDB会返回一个包含节点状态信息的JSON对象。该对象包含了节点的详细信息,如节点角色、健康状况、心跳延迟等。
- JSON对象:是一种轻量级的数据交换格式,用于存储和传输数据。我们可以通过打印JSON对象的属性来查看节点状态和详细信息。