引言
上一章节中,我们详细介绍了在典型的三节点复制集环境中搭建MongoDB的步骤和注意事项。从准备配置文件到启动MongoDB进程,我们一步步指导读者完成了环境的设置。在本章节中,我们将进一步深入,重点讲解如何进行复制集的配置和安全验证,以及连接方式的选择。通过学习这些内容,读者将能够更好地理解和应用MongoDB的复制集功能,确保数据的可靠性和安全性。
配置复制集
在复制集中,可以通过使用replSetInitiate命令或mongo shell的rs.initiate()方法来进行初始化。一旦初始化完成,各个成员之间会开始发送心跳消息,并进行Primary选举操作。在此过程中,节点需要获得足够多成员的投票支持,才能成为Primary节点,而其他节点则会成为Secondary节点。
方法1:- #mongo ‐‐port 28017
- # 初始化复制集
- > rs.initiate()
- # 将其余成员添加到复制集
- > rs.add("192.168.65.174:28018")
- > rs.add("192.168.65.174:28019")
复制代码 方法2:- # mongo ‐‐port 28017
- # 初始化复制集
- > rs.initiate({
- _id: "rs0",
- members: [{
- _id: 0,host: "192.168.65.174:28017"
- },{
- _id: 1,host: "192.168.65.174:28018"
- },{
- _id: 2,host: "192.168.65.174:28019"
- }]
- })
复制代码 验证
MongoDB 主节点进行写入- # mongo ‐‐port 28017
- rs0:PRIMARY> db.user.insert([{name:"xiaoyu"},{name:"monkey"}])
复制代码 MongoDB 从节点进行读- # mongo ‐‐port 28018
- # 指定从节点可读
- rs0:SECONDARY> rs.secondaryOk()
- rs0:SECONDARY> db.user.find()
复制代码 复制集状态查询
查看最新复制集整体状态:
rs.status()
在复制集中,可以查看各成员的当前状态,以了解它们是否健康、是否在进行全量同步、心跳信息、增量同步信息、选举信息以及上一次的心跳时间等。通过这些信息,您可以监控和评估复制集的运行状况。

在复制集中,通过查看"members"字段,可以获得关于所有成员的状态信息。这些信息可以帮助我们判断成员的健康状况,了解它们是否在进行全量同步,以及其他相关信息。下面是一些主要的状态字段的解释:
- health:表示成员是否健康,这是通过心跳检测来确定的。
- state/stateStr:表示成员的状态。如果成员是主节点,则状态为PRIMARY;如果成员是备用节点,则状态为SECONDARY。当节点发生故障时,可能会出现一些其他的状态,例如RECOVERY。
- uptime:表示成员的启动时间,即成员运行的时间。
- optime/optimeDate:表示成员最后一次同步oplog的时间。oplog是MongoDB中的操作日志,用于在复制集中同步数据变更。
- optimeDurable/optimeDurableDate:表示成员最后一次同步oplog的时间,这个时间是持久的,即该时间点之前的所有数据变更已经被持久化到磁盘上。
- pingMs:表示成员与当前节点之间的ping时延,即网络延迟。
- syncingTo:表示成员正在从哪个节点进行同步操作,即同步来源。
查看当前节点角色:
db.isMaster()
除了当前节点的角色信息,你可以通过发送一个特定的命令来获取更详细的信息,包括整个复制集的成员列表、真正的主节点(Primary)是谁以及与复制集相关的协议配置信息等。Driver 在首次连接复制集时会发送该命令。
Mongo Shell复制集命令
命令描述rs.add()为复制集新增节点rs.addArb()为复制集新增一个 arbiterrs.conf()返回复制集配置信息rs.freeze()防止当前节点在一段时间内选举成为主节点rs.help()返回 replica set 的命令帮助rs.initiate()初始化一个新的复制集rs.printReplicationInfo()以主节点的视角返回复制的状态报告rs.printSecondaryReplicationInfo()以从节点的视角返回复制状态报告rs.reconfig()通过重新应用复制集配置来为复制集更新配置rs.remove()从复制集中移除一个节点rs.secondaryOk()为当前的连接设置 从节点可读rs.status()返回复制集状态信息。rs.stepDown()让当前的 primary 变为从节点并触发 electionrs.syncFrom()设置复制集节点从哪个节点处同步数据,将会覆盖默认选取逻辑安全认证
创建用户
在主节点服务器上,启动mongo- use admin
- #创建用户
- db.createUser( {
- user: "xiaoyu",
- pwd: "xiaoyu",
- roles: [ { role: "clusterAdmin", db: "admin" } ,
- { role: "userAdminAnyDatabase", db: "admin"},
- { role: "userAdminAnyDatabase", db: "admin"},
- { role: "readWriteAnyDatabase", db: "admin"}]
- })
复制代码
创建keyFile文件
KeyFile文件在MongoDB集群中的作用是提供安全认证机制。它用于在集群节点之间进行身份验证,以增加集群的安全性。(开启keyfile认证就默认开启了auth认证了)。- #mongo.key采用随机算法生成,用作节点内部通信的密钥文件。
- openssl rand ‐base64 756 > /data/mongo.key
- #权限必须是600
- chmod 600 /data/mongo.key
复制代码 在进行复制集的初始化之前,请确保先停止所有主从节点上的mongod服务。然后,创建一个名为keyFile的文件,并将其拷贝到复制集的其他从节点服务器上。在复制集的每个从节点上,将keyFile文件的路径地址配置到mongo.conf配置文件中的keyFile字段,并设置keyFile文件的权限为600。最后,启动mongod服务。这样做的目的是为了确保keyFile文件能够被所有节点正确访问,并提供必要的安全认证机制。- # 启动mongod
- mongod ‐f /data/db1/mongod.conf ‐‐keyFile /data/mongo.key
- mongod ‐f /data/db2/mongod.conf ‐‐keyFile /data/mongo.key
- mongod ‐f /data/db3/mongod.conf ‐‐keyFile /data/mongo.key
复制代码 测试
- 1 #进入主节点
- 2 mongo ‐‐port 28017
复制代码 - 1 #进入主节点
- 2 mongo ‐‐port 28017 ‐uxiaoyu ‐pxiaoyu ‐‐authenticationDatabase=admin
复制代码 复制集连接方式
方式一:在连接复制集时直接连接到主节点(Primary),并且在正常情况下可以进行读写操作,但一旦主节点发生故障切换,你无法正常访问数据库,

方式二(强烈推荐):通过使用高可用URI连接到MongoDB,当主节点发生故障切换时,MongoDB驱动程序可以自动感知并将流量路由到新的主节点。这种方式可以提供更高的可用性和自动故障转移。

springboot操作复制集配置- spring:
- data:
- mongodb:
- uri:
- mongodb://xiaoyu:xiaoyu@192.168.65.174:28017,192.168.65.174:28018,192.168.65.174:28019/test?authSource=admin&replicaSet=rs0
复制代码 总结
本章介绍了MongoDB复制集的配置和使用方法。首先,我们学习了如何初始化和添加节点到复制集,并验证了主节点的写入和从节点的读取功能。然后,我们了解了如何查询复制集的状态,包括成员的健康状况、同步信息和角色等。最后,我们介绍了如何配置复制集的安全认证,包括创建用户和生成keyFile文件,并演示了使用认证信息连接复制集的方式。通过本章的学习,你将掌握MongoDB复制集的基本使用和配置方法。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |