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

2023-11-30 09:36:43 浏览数 (1)

引言

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

配置复制集

在复制集中,可以通过使用replSetInitiate命令或mongo shell的rs.initiate()方法来进行初始化。一旦初始化完成,各个成员之间会开始发送心跳消息,并进行Primary选举操作。在此过程中,节点需要获得足够多成员的投票支持,才能成为Primary节点,而其他节点则会成为Secondary节点。

方法1:

代码语言:txt复制
 #mongo ‐‐port 28017
 # 初始化复制集
 > rs.initiate()
 # 将其余成员添加到复制集
 > rs.add("192.168.65.174:28018")
 > rs.add("192.168.65.174:28019")

方法2:

代码语言:txt复制
 # 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 主节点进行写入

代码语言:txt复制
 # mongo ‐‐port 28017
 rs0:PRIMARY> db.user.insert([{name:"xiaoyu"},{name:"monkey"}])

MongoDB 从节点进行读

代码语言:txt复制
 # mongo ‐‐port 28018
 # 指定从节点可读
 rs0:SECONDARY> rs.secondaryOk()
 rs0:SECONDARY> db.user.find()

复制集状态查询

查看最新复制集整体状态:

rs.status()

在复制集中,可以查看各成员的当前状态,以了解它们是否健康、是否在进行全量同步、心跳信息、增量同步信息、选举信息以及上一次的心跳时间等。通过这些信息,您可以监控和评估复制集的运行状况。

imageimage

在复制集中,通过查看"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()

为复制集新增一个 arbiter

rs.conf()

返回复制集配置信息

rs.freeze()

防止当前节点在一段时间内选举成为主节点

rs.help()

返回 replica set 的命令帮助

rs.initiate()

初始化一个新的复制集

rs.printReplicationInfo()

以主节点的视角返回复制的状态报告

rs.printSecondaryReplicationInfo()

以从节点的视角返回复制状态报告

rs.reconfig()

通过重新应用复制集配置来为复制集更新配置

rs.remove()

从复制集中移除一个节点

rs.secondaryOk()

为当前的连接设置 从节点可读

rs.status()

返回复制集状态信息。

rs.stepDown()

让当前的 primary 变为从节点并触发 election

rs.syncFrom()

设置复制集节点从哪个节点处同步数据,将会覆盖默认选取逻辑

安全认证

创建用户

在主节点服务器上,启动mongo

代码语言:txt复制
 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"}]
 })
imageimage

创建keyFile文件

KeyFile文件在MongoDB集群中的作用是提供安全认证机制。它用于在集群节点之间进行身份验证,以增加集群的安全性。(开启keyfile认证就默认开启了auth认证了)。

代码语言:txt复制
 #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文件能够被所有节点正确访问,并提供必要的安全认证机制。

代码语言:txt复制
 # 启动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

测试

代码语言:txt复制
1 #进入主节点
2 mongo ‐‐port 28017
imageimage
代码语言:txt复制
1 #进入主节点
2 mongo ‐‐port 28017 ‐uxiaoyu ‐pxiaoyu ‐‐authenticationDatabase=admin

复制集连接方式

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

imageimage

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

imageimage

springboot操作复制集配置

代码语言:txt复制
 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复制集的基本使用和配置方法。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞