轻松掌握组件启动之MongoDB(下):高可用复制集架构环境搭建 ...

打印 上一主题 下一主题

主题 574|帖子 574|积分 1722

引言

上一章节中,我们详细介绍了在典型的三节点复制集环境中搭建MongoDB的步骤和注意事项。从准备配置文件到启动MongoDB进程,我们一步步指导读者完成了环境的设置。在本章节中,我们将进一步深入,重点讲解如何进行复制集的配置和安全验证,以及连接方式的选择。通过学习这些内容,读者将能够更好地理解和应用MongoDB的复制集功能,确保数据的可靠性和安全性。
配置复制集

在复制集中,可以通过使用replSetInitiate命令或mongo shell的rs.initiate()方法来进行初始化。一旦初始化完成,各个成员之间会开始发送心跳消息,并进行Primary选举操作。在此过程中,节点需要获得足够多成员的投票支持,才能成为Primary节点,而其他节点则会成为Secondary节点。
方法1:
  1. #mongo ‐‐port 28017
  2. # 初始化复制集
  3. > rs.initiate()
  4. # 将其余成员添加到复制集
  5. > rs.add("192.168.65.174:28018")
  6. > rs.add("192.168.65.174:28019")
复制代码
方法2:
  1. # mongo ‐‐port 28017
  2. # 初始化复制集
  3. > rs.initiate({
  4. _id: "rs0",
  5. members: [{
  6. _id: 0,host: "192.168.65.174:28017"
  7. },{
  8. _id: 1,host: "192.168.65.174:28018"
  9. },{
  10. _id: 2,host: "192.168.65.174:28019"
  11. }]
  12. })
复制代码
验证

MongoDB 主节点进行写入
  1. # mongo ‐‐port 28017
  2. rs0:PRIMARY> db.user.insert([{name:"xiaoyu"},{name:"monkey"}])
复制代码
MongoDB 从节点进行读
  1. # mongo ‐‐port 28018
  2. # 指定从节点可读
  3. rs0:SECONDARY> rs.secondaryOk()
  4. 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
  1. use admin
  2. #创建用户
  3. db.createUser( {
  4. user: "xiaoyu",
  5. pwd: "xiaoyu",
  6. roles: [ { role: "clusterAdmin", db: "admin" } ,
  7. { role: "userAdminAnyDatabase", db: "admin"},
  8. { role: "userAdminAnyDatabase", db: "admin"},
  9. { role: "readWriteAnyDatabase", db: "admin"}]
  10. })
复制代码

创建keyFile文件

KeyFile文件在MongoDB集群中的作用是提供安全认证机制。它用于在集群节点之间进行身份验证,以增加集群的安全性。(开启keyfile认证就默认开启了auth认证了)。
  1. #mongo.key采用随机算法生成,用作节点内部通信的密钥文件。
  2. openssl rand ‐base64 756 > /data/mongo.key
  3. #权限必须是600
  4. chmod 600 /data/mongo.key
复制代码
在进行复制集的初始化之前,请确保先停止所有主从节点上的mongod服务。然后,创建一个名为keyFile的文件,并将其拷贝到复制集的其他从节点服务器上。在复制集的每个从节点上,将keyFile文件的路径地址配置到mongo.conf配置文件中的keyFile字段,并设置keyFile文件的权限为600。最后,启动mongod服务。这样做的目的是为了确保keyFile文件能够被所有节点正确访问,并提供必要的安全认证机制。
  1. # 启动mongod
  2. mongod ‐f /data/db1/mongod.conf ‐‐keyFile /data/mongo.key
  3. mongod ‐f /data/db2/mongod.conf ‐‐keyFile /data/mongo.key
  4. mongod ‐f /data/db3/mongod.conf ‐‐keyFile /data/mongo.key
复制代码
测试
  1. 1 #进入主节点
  2. 2 mongo ‐‐port 28017
复制代码
  1. 1 #进入主节点
  2. 2 mongo ‐‐port 28017 ‐uxiaoyu ‐pxiaoyu ‐‐authenticationDatabase=admin
复制代码
复制集连接方式

方式一:在连接复制集时直接连接到主节点(Primary),并且在正常情况下可以进行读写操作,但一旦主节点发生故障切换,你无法正常访问数据库,

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

springboot操作复制集配置
  1. spring:
  2.    data:
  3.    mongodb:
  4.    uri:
  5.     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复制集的基本使用和配置方法。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表