当前位置: 首页 > news >正文

MongoDB分布式集群搭建----副本集----PSS/PSA

MongoDB分布式集群

Replication 复制、Replica Set 复制集/副本集 概念

一、 副本集的相关概念

1.概念

“ A replica set is a group of mongod instances that maintain the same data set. ”

  • 一组MongoDB服务器(多个mongod实例)(有不同的IP或端口)(具有相同的副本集名称)
  • 具有相同副本集,相同的数据 (为了保证数据的相同,需要各mongod实例间保持数据的复制)

2.副本集的组成

  • Primary Node 主节点 (一个) 默认的可写节点
  • Secondary Nodes 从节点 (多个)
    在这里插入图片描述

3.复制原理

  • 复制的初始化:当一个复制集被建立之初,我们需要首先初始化一个Primary主节点。
  • Replication(复制)发生在Primary(主节点)和Secondaries(从节点)之间。由主节点将操作记录(oplog)同步到从节点上,从节点根据oplog进行数据更新以获得与主节点相同的数据。【读比较多,写较少,主节点可读可写,从节点只可读】
  • 分担负载均衡,至少三台机器,选举需要超半数,一般是三台机器。一个T->3个T

4. 选举制度

  • 当主节点不可用时,一个复制集中的其他从节点将选举出一个新的主节点
  • 选举采用分级投票制:在最高优先级的节点中得票最高(超过总成员半数)的节点成为新的主节点
    • 影响选举的主要副本集配置:
      • members.priority
      • members.votes

二、从零开始搭建PSS副本集

在这里插入图片描述

一个主节点,两个从节点;在一台机器上模拟三台机器,一个目录代表一个机器,创建三个目录。首先做好规划表:

  • 如果不加副本集名称,那么这三台服务器之间没有关联。为了让三台服务器之间建立联系,引入相同的副本集(rs0)
  • 根据规划表,创建三个配置文件xxx.ini,都需要有副本集
//server1.ini
bind_ip=127.0.0.1
port=27001
dbpath=.\server1
logpath=.\server1\mongod.log
logappend=true
replSet = rs0//server2.ini
bind_ip=127.0.0.1
port=27002
dbpath=.\server2
logpath=.\server2\mongod.log
logappend=true
replSet = rs0//server3.ini
bind_ip=127.0.0.1
port=27003
dbpath=.\server3
logpath=.\server3\mongod.log
logappend=true
replSet = rs0

在这里插入图片描述

  • 写一个启动脚本文件
//创建目录,一个目录相当于一个服务器
mkdir .\server1
mkdir .\server2
mkdir .\server3
//启动3个服务器
start "MongoDB Server1" mongod --config=.\server1.ini
start "MongoDB Server2" mongod --config=.\server2.ini
start "MongoDB Server3" mongod --config=.\server3.ini
//启动3个客户端分别去连接3个服务器
start "Connect to Server1" mongo --port=27001
start "Connect to Server2" mongo --port=27002
start "Connect to Server3" mongo --port=27003
  • 启动后,三个服务器之间并未建立联系

在这里插入图片描述

  • 需要进行初始化,构造成员名单,通过initiate()函数传递名单,可以在终端执行以下语句,亦可以写在rs0conf.js中,客户端连接服务端时附带rs0conf.js配置文件
var rsconf={_id:"rs0","members":[{_id:0,host:"127.0.0.1:27001"},{_id:1,host:"127.0.0.1:27002"},{_id:2,host:"127.0.0.1:27003"},]};
rs.initiate(rsconf)

在这里插入图片描述

  • server1默认为primary,当server1挂掉之后,其它接任,即使重启server1,它当前也不能作为primary。

  • 主节点上可以创建、插入数据,但从节点没有读的功能。在secondary中运行命令会报错,报错"codeName" : "NotPrimaryNoSecondaryOk",需要先在secondary运行以下命令:

rs.secondaryOk()
  • primary具有读写功能,但是secondary只具有读功能。在primary中插入数据,其它两个secondary也能读到对应信息。
use zr;
db.students.insert({"name":"zhangsan"});
show dbs;
show collections;
db.students.find();

在这里插入图片描述

  • 在primary中插入GenerateStudents.js(需要放到与PSS副本集相同的目录中)相关学生数据后,在其它两个secondary中也能看到。
load("GenerateStudents.js")

在这里插入图片描述

  • 可以使用命令让当前的primary降级为secondary,其它服务器当选为primary
rs.stepDown();
  • 查看当前配置
rs.conf();
  • 默认10s中之内进行选举

在这里插入图片描述

复制方法

有关特定方法(包括事务语法和示例)的详细信息,请单击该方法的参考页面链接。

名称说明
rs.add()将节点添加到副本集。
rs.addArb()将仲裁节点添加到副本集。
rs.conf()返回副本集配置文档。
rs.freeze()阻止当前节点在一段时间内寻求选举为主节点。
rs.help()返回副本集函数的基本帮助文本。
rs.initiate()****初始化新的副本集。
rs.printReplicationInfo()从主节点的角度打印副本集状态的格式化报告。
rs.printSecondaryReplicationInfo()从从节点的角度打印副本集状态的格式化报告。
rs.reconfig()通过应用新的副本集配置对象来重新配置副本集。
rs.reconfigForPSASet()在主从仲裁 (PSA) 副本集或正在更改为 PSA 架构的副本集上安全地执行某些重新配置更改。
rs.remove()从副本集中删除节点。
rs.status()返回包含副本集状态信息的文档。
rs.stepDown()导致当前的主节点变为强制选举的从节点。
rs.syncFrom()设置该副本集节点与哪个节点进行同步,复写默认的同步目标选择逻辑。

修改三台服务器的优先级

rs0:PRIMARY>rs.conf()//查看副本集内容,包括三台服务器的id、priority...
rs0:PRIMARY> var rsconf=rs.conf()//拿到配置信息保存到变量rsconf中
rs0:PRIMARY> rsconf.members[0].priority=9//将server1优先级改为9,默认是1
rs0:PRIMARY> rsconf.members[1].priority=0//将server2优先级改为0
rs0:PRIMARY> rs.reconfig(rsconf)//重新配置信息生效
//等待10秒,primary变为server1
  • 退出primary
rs0:PRIMARY> rs.stepDown()

三、搭建PSA副本集

  1. 配置server4、server5、server6三台服务器,并设置仲裁节点(PSA副本集),规划表如图
    在这里插入图片描述

  2. 配置文件xxx.ini

//server4.ini
bind_ip=127.0.0.1
port=27004
dbpath=.\server4
logpath=.\server4\mongod.log
logappend=true
replSet = rs1//server5.ini
bind_ip=127.0.0.1
port=27005
dbpath=.\server5
logpath=.\server5\mongod.log
logappend=true
replSet = rs1//server6.ini
bind_ip=127.0.0.1
port=27006
dbpath=.\server6
logpath=.\server6\mongod.log
logappend=true
replSet = rs1

在这里插入图片描述

  1. rs1.conf文件
var rsconf={_id:"rs1","members":[{_id:0,host:"127.0.0.1:27004"},{_id:1,host:"127.0.0.1:27005"},{_id:2,host:"127.0.0.1:27006",priority:0,arbiterOnly:true},]};
rs.initiate(rsconf)
  • priority: 0: 这个字段指定了成员在选举过程中的优先级。优先级为0意味着这个成员不会被选举为主节点(primary node)。
  • arbiterOnly: true: 这个字段表示该成员是一个仲裁者(arbiter)。仲裁者不存储数据,只参与选举过程,以帮助在副本集中保持奇数个成员来避免脑裂(split-brain)问题。
  1. 启动脚本
mkdir .\server4
mkdir .\server5
mkdir .\server6start "MongoDB Server4" mongod --config=.\server4.ini 
start "MongoDB Server5" mongod --config=.\server5.ini
start "MongoDB Server6" mongod --config=.\server6.inistart "Connect to Server4" mongo --port=27004 --shell rs1conf.js
start "Connect to Server5" mongo --port=27005
start "Connect to Server6" mongo --port=27006

在这里插入图片描述

只能有一个仲裁节点,文件大小固定而且最小,都是300MB

在这里插入图片描述

  • rs0和rs1两个副本集之间没有任何关联。副本集是分布式集群中的一个基本单元。

相关文章:

MongoDB分布式集群搭建----副本集----PSS/PSA

MongoDB分布式集群 Replication 复制、Replica Set 复制集/副本集 概念 一、 副本集的相关概念 1.概念 “ A replica set is a group of mongod instances that maintain the same data set. ” 一组MongoDB服务器(多个mongod实例)(有不…...

PDF编辑的好东西

1.Eage浏览器 直接拖到浏览器中就ok了,这样读书的话是非常爽的,然后的话最近,也不知道学啥,vue开发网站,一开始的配置,也是给我难到了,所以没有办法,就随便找点书看看吧&#xff0c…...

块设备的两种访问方法的区别

概述 1.当我们运行类似于“dd if/dev/sdb1ofsdb1.img”的命令把整个/dev/sdb1裸分区复制到sdb1.img的时候,内核走的是def_blk_fops这个file_operations 2.另外一种方法是通过文件系统来访问块设备,file_operations的实现则位于文件系统内,文…...

java 泛型中的 ?

在 Java 泛型中,? 被称为通配符(wildcard),它代表了未知的类型。使用通配符可以增加代码的灵活性,允许在不知道具体类型的情况下操作泛型类或接口。通配符主要有以下几种形式: 无界通配符(Unbo…...

如何在jupyter notebook切换python环境

目录 参考链接 首先确保conda已经正常安装 conda --version 或者conda -V 以下请将“myenv”替换成自己的命名!!! 1-查看虚拟环境目录 conda env list 2-创建虚拟环境命令 conda create -n myenv 或者 conda create --name myenv 3-激活虚拟环…...

用Python将Word文档转换为Markdown格式

Markdown作为一种轻量级标记语言,以其简洁的语法和广泛的兼容性,特别适合用于博客、技术文档和版本控制系统中的内容管理。而Word文档则因其强大的排版功能,常常成为文档制作的首选。然而,直接使用Word格式在某些平台上可能显得过…...

CSV 文件

CSV,全称为 Comma-Separated Values)(逗号分隔值),是一种常用的文本文件格式,用于存储表格数据,如电子表格或数据库。它采用纯文本形式,以逗号作为字段之间的分隔符,每行…...

SpringCloud核心组件(五)

文章目录 Gateway一. 概述简介1. Gateway 是什么2. 什么是网关?3.Gateway 和 Nginx 两个网关的区别什么是流量入口? 4.Gateway 能干嘛5.gateway 三大核心概念6.运行方式 二. 入门案例a.创建gateway模块,在pom.xml中引入依赖b.创建启动类GatewayApplicat…...

TCP为什么需要三次握手和四次挥手,有哪些需要注意的地方?

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。为了确保数据能够准确无误地从一端发送到另一端,TCP设计了一系列机制来保证通信的可靠性,其中包括连接建立和断开的过程。 三次握手(Three-…...

机器学习(基础2)

特征工程 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 特征工程API 实例化…...

Cpolar 内网穿透使用

Cpolar登录地址:cpolar - secure introspectable tunnels to localhost 使用固定公网TCP连接ssh ssh -p端口号 用户名公网地址...

ThreadLocal 提供线程局部变量

ThreadLocal作用 相当于建立一个独立的空间,可以把使用频率高的任何类型的数据放到里面,方便调用用来存取数据:set()/get()使用ThreadLocal存储的数据,线程安全 ThreadLocal工具类 /*** ThreadLocal 工具类*/ SuppressWarnings(…...

MongoDB聚合管道数组操作

数组表达式运算符判断数组中是否包含元素( i n ) 并获取元素索引 ( in)并获取元素索引( in)并获取元素索引(indexOfArray) 一、初始化成员数据 db.persons.insertMany([{ "_id" : "1001", "name" : "张三", "fruits" : [ …...

大数据如何助力干部选拔的公正性

随着社会的发展和进步,干部选拔成为组织管理中至关重要的一环。传统的选拔方式可能存在主观性、不公平性以及效率低下等问题。大数据技术的应用,为干部选拔提供了更加全面、精准、客观的信息支持,显著提升选拔工作的科学性和公正性。以下是大…...

Python_爬虫2_爬虫引发的问题

目录 爬虫引发的问题 网络爬虫的尺寸 网络爬虫引发的问题 网络爬虫的限制 Robots协议 Robots协议的遵守方式 Robots的使用 对Robots协议的理解 爬虫引发的问题 网络爬虫的尺寸 爬取网页,玩转网页: 小规模,数据量小,爬取…...

shell编程之编程基础

目录 为什么学习和使用Shell编程Shell是什么shell起源查看当前系统支持的shell查看当前系统默认shellShell 概念 Shell 程序设计语言Shell 也是一种脚本语言用途 如何学好shell熟练掌握shell编程基础知识建议 Shell脚本的基本元素基本元素构成:Shell脚本中的注释和风…...

24.11.15 Vue3

let newJson new Proxy(myJson,{get(target,prop){console.log(在读取${prop}属性);return target[prop];},set(target,prop,val){console.log(在设置${prop}属性值为${val});if(prop"name"){document.getElementById("myTitle").innerHTML val;}if(prop…...

图形几何之美系列:法向量计算之轮廓有向面积辅助法

“ 垂直于平面的直线所表示的向量为该平面的法向量,可以通过法向量识别平面正反面。法向量是轮廓或面的重要特征,求轮廓法向是一种基础的几何工具算法,在图形几何、图像处理等领域具有广泛的应用。” 图形几何之美系列:三维实体结…...

CPU的性能指标总结(学习笔记)

CPU 性能指标 我们先来回顾下,描述 CPU 的性能指标都有哪些。 首先,最容易想到的应该是 CPU 使用率,这也是实际环境中最常见的一个性能指标。 用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用…...

Cadence安装

记录一下安装过程,方便以后安装使用Cadence。 去吴川斌的博客下载安装包,吴川斌博客: https://www.mr-wu.cn/cadence-orcad-allegro-resource-downloads/ 下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...