轻松掌握组件启动之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()
在复制集中,可以查看各成员的当前状态,以了解它们是否健康、是否在进行全量同步、心跳信息、增量同步信息、选举信息以及上一次的心跳时间等。通过这些信息,您可以监控和评估复制集的运行状况。

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

创建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复制集的基本使用和配置方法。
轻松掌握组件启动之MongoDB(下):高可用复制集架构环境搭建的更多相关文章
- Redis高可用复制集群实现
redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis 与其他 key - value 缓存产品有以下三个特点: 支持数据的持久化,可以将 ...
- MongoDB高可用复制集分片集群搭建
1 逻辑架构 1.1 逻辑架构图 1.2 组件说明 一.mongos(query routers):查询路由,负责client的连接,并把任务分给shards,然后收集结果.一 ...
- MHA实现mysql高可用复制集群
MHA简述 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在My ...
- (2)虚拟机下hadoop1.1.2集群环境搭建
hadoop集群环境的搭建和单机版的搭建差点儿相同,就是多了一些文件的配置操作. 一.3台主机的hostname改动和IP地址绑定 注意:以下的操作我都是使用root权限进行! (1)3太主机的基本网 ...
- HDFS 高可用(HA)环境搭建
步骤一:修改公共属性配置 core-site.xml 文件 [root@node-01 ~]# cd /root/apps/hadoop-3.2.1/etc/hadoop [root@node-01 ...
- 关于MongoDB分布式高可用集群实现
一.环境准备 1.本例使用3台Linux主机,IP地址如下: 点击(此处)折叠或打开 Server B Server C 2.根据需要,开启相应主机防火墙的相关端口.本次需要用到3台主机,所以开启这3 ...
- 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...
- .net core下简单构建高可用服务集群
一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net ...
- 搭建高可用mongo集群3.4版本
搭建高可用mongo集群3.4版本 说在开始之前:在搭建这个环境之前,已经有了一个师兄搭好的环境,虽然一样很棒,但是没有经过自己的手出来的东西,还是不属于自己,所以摸索着自己搭建一个吧,好巧不巧的是, ...
- 如何安装一个高可用K3s集群?
作者介绍 Janakiram MSV是Janakiram & Associates的首席分析师,也是国际信息技术学院的兼职教师.他也是Google Qualified Developer.亚马 ...
随机推荐
- hashtable分析
1.什么是Hash表? Hash表又被称为散列表,是根据关键码值(key-value)也就是键值对来直接访问的一种数据结构.也就是说,它通过把关键码值映射到表中的一个位置来访问记录,用以加快查找的 ...
- clickhouse使用入门
转载请注明出处(- ̄▽ ̄)-严禁用于商业目的的转载- 导语:同学,你也不想你根本不懂ClickHouse,却赶鸭子上架使用的事情被其他人知道吧? 写在前面:本文旨在让原先有一定SQL基础的人快速简单了 ...
- 2023-07-09:给定N、M两个参数, 一共有N个格子,每个格子可以涂上一种颜色,颜色在M种里选, 当涂满N个格子,并且M种颜色都使用了,叫一种有效方法。 求一共有多少种有效方法。 1 <= N,
2023-07-09:给定N.M两个参数, 一共有N个格子,每个格子可以涂上一种颜色,颜色在M种里选, 当涂满N个格子,并且M种颜色都使用了,叫一种有效方法. 求一共有多少种有效方法. 1 <= ...
- 一张表实现类某音的视频"评论回复"功能
前言 现如今,不管是哪种类型的应用,评论区都少不了.从工具类的到媒体信息流类的,评论留言都是最基本的互动环节.比如抖音短视频下,针对视频每个用户都可以发表自己的观点:而针对用户的评论,其他的用户又可 ...
- 学习LXC(Linux 容器)技术
安装LXC.LXD.zfs 测试机器为ubuntu sudo apt-get install lxc lxd zfsutils-linux -y 创建LXD的zfs存储池 sudo lxd init ...
- Cannot use v-for on stateful component root element because it renders multiple elements.
<template name:trailerStars> <image v-for="yellow in yellowScore" src="../st ...
- 秋叶整合包如何安装Python包
前几天写了一篇<手把手教你在本机安装Stable Diffusion秋叶整合包>的文章,有同学运行时遇到缺少Python Module的问题,帮助他处理了一下,今天把这个经验分享给大家,希 ...
- 简述分布式链路追踪工具——Jaeger
1.简介 1.1 Jaeger是什么 Jaeger 是受到 Dapper 和 OpenZipkin 启发的由 Uber Technologies 作为开源发布的分布 ...
- [nginx]借助nginx实现自动获取本机IP
前言 在用脚本自动化部署应用时,有的应用需要指定本机IP,网上找到的方案大多是过滤ifconfig或者ip命令的结果,这里提供一种通过nginx获取本机ip的方法.大致思路为客户端向nginx发起请求 ...
- Windows查找监听端口对应的进程及其路径
前言 假设扫描到1234端口存在可疑进程,需要找到该监听端口对应的进程及其进程文件的全路径,判断是否为可疑程序. 步骤 启动命令行:按win + r键,然后输入"cmd" 查看端口 ...