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

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 本章介绍了MongoDB复制集的配置和使用方法,如何初始化和添加节点到复制集,验证主节点的写入和从节点的读取功能。了解如何查询复制集的状态,包括成员的健康状况、同步信息和角色等。最后,我们介绍了如何配置复制集的安全认证,包括创建用户和生成keyFile文件,并演示了使用认证信息连接复制集的方式。通过本章的学习,你将掌握MongoDB复制集的基本使用和配置方法。

引言

上一章节中,我们详细介绍了在典型的三节点复制集环境中搭建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()

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

image

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

 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"}]
 })

image

创建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

image

1 #进入主节点
2 mongo ‐‐port 28017 ‐uxiaoyu ‐pxiaoyu ‐‐authenticationDatabase=admin

复制集连接方式

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

image

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

image

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复制集的基本使用和配置方法。

相关实践学习
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
7天前
|
负载均衡 监控 UED
高可用电商返利APP架构设计与实现分享
高可用电商返利APP架构设计与实现分享
|
9天前
|
SQL 存储 关系型数据库
深入OceanBase内部机制:系统架构与组件精讲
深入OceanBase内部机制:系统架构与组件精讲
深入OceanBase内部机制:系统架构与组件精讲
|
1月前
|
存储 负载均衡 NoSQL
MongoDB架构设计
【6月更文挑战第6天】MongoDB架构设计
21 2
|
1月前
|
存储 负载均衡 NoSQL
MongoDB的架构设计基于三种集群模式
【6月更文挑战第5天】MongoDB的架构设计基于三种集群模式
30 3
|
9天前
|
弹性计算 负载均衡 Java
如何设计一个高可用的Java应用架构
如何设计一个高可用的Java应用架构
|
9天前
|
负载均衡 监控 Java
构建高可用Java微服务架构的秘籍
构建高可用Java微服务架构的秘籍
|
11天前
|
存储 NoSQL MongoDB
|
3天前
|
NoSQL JavaScript 前端开发
JavaScript与数据库MongoDB的联动
JavaScript和MongoDB结合,构建Web应用的关键技术。MongoDB,作为NoSQL数据库,以其灵活性和高性能深受开发者喜爱。本文探讨两者的基本概念,如JavaScript在前端交互和后端数据处理的作用,MongoDB的文档存储和查询特性。通过Node.js和mongoose库,展示了连接数据库、定义数据模型及增删改查操作的代码示例。强调了性能优化(如索引、批量操作)和安全措施(如权限控制、数据加密)的重要性。最后,提供了一个简单的CRUD应用示例,涵盖Express和前端API调用。
|
24天前
|
存储 JSON NoSQL
【文档数据库】ES和MongoDB的对比
【文档数据库】ES和MongoDB的对比
149 1
|
5天前
|
NoSQL MongoDB 数据库
MongoDB的GUI工具——Robo 3T连接远程数据库MongoDB
MongoDB的GUI工具——Robo 3T连接远程数据库MongoDB
4 0