MongoDB笔记整理5 - 主从复制+集群

一、主从复制

1、读写分离的概念

1、读写分离的概念
    读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERTUPDATEDELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
    读写分离的目的是为了实现高并发场景下的请求分流,避免对数据库的访问过于集中,导致性能下降甚至是宕机。

2、主从复制介绍

2、主从复制介绍
    在MongoDB的集群中,会有指定为master的主节点存在,该节点用于被客户端进行数据的增删改操作。同时集群中还会有被指定为slave的节点存在,即从节点,该节点主要接收来自于客户端的读,检索操作,并不具备增删改操作的功能。
    在master节点处理完增删改操作后,会实时同步数据到与其绑定的从节点上,实现主从复制至少要有两个数据库实例,并且每个从节点需要知道主节点的地址,如果是在linux中记得开通主从端口的防火墙。
    主从复制的优势在于比较灵活,适用于数据备份,故障后人工进行数据恢复,以及对读数据的扩展等。

在这里插入图片描述

3、主从复制局限

3、主从复制局限
    (1)MongoDB目前建议使用副本集实现集群管理,不建议使用简单的主从复制
    (2)主从复制在master宕机后,没有自动选举master机制,导致主节点服务一挂,便不能对外提供增删改操作。
    (3)所有增删改操作都是针对主节点进行操作,可能导致主节点性能下降。
    (4)从节点对主节点的数据都是全量拷贝,对主从节点的压力都是不小的。

4、主从复制简单配置及实现

4、主从复制简单配置及实现
    设备有限,为方便简单的实现,可在一台机器上模拟主节点和从节点。在C盘创建master目录,在E盘创建slave目录,master目录作为主节点数据存放的目录,slave目录作为从节点数据存放的目录。
    注意:主节点和从节点要指定不同的端口。
    启动主节点:mongod --dbpath C:\master --port 666 --master
    启动从节点:mongod --dbpath E:\slave --port 888 --slave --source localhost:666
    启动成功后就可以连接主节点进行操作了,而对主节点的操作会同步到从节点,而对从节点进行插入操作时,会报not master的提示并拒绝写入数据。
    配置实现解释
    master:默认为false,若要设置当前节点为主节点,需要在服务端启动添加--master
    slave:默认为false,若要设置当前节点为从节点,需要在服务端启动添加--slave
    source:默认为空,用于从节点,指定从节点的复制来源,即主节点所在的地址,格式为:<host><:port>
    only:默认为空,用于从节点,主动复制默认复制主节点上所有的数据库,通过设置此项指定需要复制的数据库名称
    slavedelay:设置从节点同步主节点的延迟时间,用于从节点设置,默认为0,单位秒。
    autoresync:默认为false,用于从节点设置。是否自动重新同步。设置为true,如果落后主节点超过10秒,会强制从节点自动重新同步。如果oplogSize太小,此设置可能有问题。如果oplog大小不足以存储主节点的变化状态和从节点的状态变化之间的差异,这种情况下强制重新同步是不必要的。当设置autoresync选项设置为false10分钟内从节点不会进行大于1次的自动重新同步。
    什么是oplog?
    主节点的操作会被记录为oplog,存储在系统数据库local的集合oplog.$main中,这个集合中的每个文档都代表主节点的一个操作(不包括查询),从节点定期从主服务器获取oplog数据,并在本机进行执行,oplog使用的是固定集合,随着操作的逐渐增加,新的文档会逐渐覆盖旧的文档。

二、副本集

1、副本集概念


                
### MongoDB 主从复制与副本集配置教程及实现方法 #### 配置环境准备 为了确保MongoDB能够在银河麒麟V10系统上稳定运行并构建高可用性的集群,需先准备好三台安装有相同版本MongoDB的服务节点。这些节点用于组成一个具备冗余能力的副本集[^1]。 #### 副本集成员启动 针对每一个参与构成副本集的实例,在各自的服务器中定位至MongoDB二进制文件所在路径,并依据预先设定好的配置文件来启动`mongod`进程。例如,在每台机器上的指定目录下执行如下命令: ```bash ./mongod -f /root/mongoDB/myrs_27017/mongod.conf ``` 此操作会按照给定参数初始化各个数据存储单元,使其能够参与到后续的同步过程中去[^3]。 #### 初始化副本集 当所有预期加入副本集的数据节点均已成功上线之后,则可通过客户端工具连接任意一台作为协调者的主节点来进行初始化工作。具体做法是在shell环境中输入以下指令完成集合创建以及初始成员列表定义: ```javascript rs.initiate() // 添加其他两个成员到副本集中 rs.add("secondary-node-ip:port") rs.add("another-secondary-node-ip:port") ``` 以上过程将正式建立起由多个互备伙伴组成的逻辑组群结构,从而实现了读写分离机制下的自动故障转移功能[^2]。 #### 数据一致性维护 不同于早期版本所提供的简单主从关系模型,现代版MongoDB更倾向于采用更为复杂的算法保障整个系统的健壮性和容错性能。每当发生更新动作时,变更日志会被记录下来并通过内部网络传递给其余参与者;一旦检测到原领导者失效情况,则剩余健康成员之间将会协商选举新的领导角色继续提供对外服务。 #### 查询当前状态 要确认某特定实例是否担任着主要职责或者查看整体运作状况的话,可以在交互式提示符处键入`db.isMaster()`获取返回结果中的字段信息加以判断。如果结果显示为true则表明该结点正处于主导地位负责处理所有的写请求活动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值