小白到运维工程师自学之路 第四十六集 (mongodb复制集)

这篇具有很好参考价值的文章主要介绍了小白到运维工程师自学之路 第四十六集 (mongodb复制集)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

       1、 MongoDB复制集(MongoDB Replica Set)是MongoDB提供的一种高可用性和数据冗余的解决方案。它由多个MongoDB实例组成,其中一个作为主节点(Primary),其他节点则扮演从节点(Secondary)的角色。主节点处理所有的写操作和客户端请求,而从节点负责复制主节点的数据并提供读操作的能力。

       2、 复制集的主要目标是提供数据的冗余和故障恢复的能力。当主节点发生故障或不可用时,复制集会自动选举出一个新的主节点来接管主节点的职责,保证系统的可用性。一旦原先的主节点恢复,它会以从节点的身份重新加入复制集,同步最新的数据。

        3、在复制集中,数据同步是通过Oplog(操作日志)来实现的。主节点会记录所有的写操作,并将其顺序保存在Oplog中。从节点通过读取Oplog中的操作来进行数据的复制和同步。

       4、 复制集还提供了其他一些功能,如自动故障检测和恢复、自动故障转移、读写分离等。通过配置合适的副本集成员和选举优先级,可以实现不同的数据治理策略和故障容错能力。

        5、要配置一个MongoDB复制集,需要在MongoDB配置文件中指定每个节点的相关配置,包括主节点和从节点的IP地址、端口号、复制集名称等。在启动MongoDB实例时,指定配置文件即可。一旦复制集的节点都启动成功,系统会自动进行选举并形成一个复制集。

        6、MongoDB复制集提供了高可用性、数据冗余和故障恢复的能力,是在生产环境中常用的部署架构之一。通过使用复制集,可以保证MongoDB数据库在单节点故障或部分故障的情况下仍然可用,并提供更好的读写性能和数据冗余。

二、工作原理

        1. 节点角色:一个MongoDB复制集由多个节点组成,其中一个节点被选举为主节点(Primary),其他节点则扮演从节点(Secondary)的角色。主节点负责处理所有的写操作和客户端请求,从节点负责复制主节点的数据并提供读操作。

        2. 选举过程:复制集的选举过程在初始启动或主节点故障时发生。当一个节点检测到主节点不可用时,它会发起一次选举。选举过程包括以下步骤:
   - 节点发出选举请求,向其他节点发送投票请求。
   - 其他节点接收到投票请求后,检查自己的选举条件,如节点状态、投票状态等。
   - 如果节点满足选举条件,它会将投票回复给发起选举的节点。
   - 发起选举的节点会等待一定数量的投票回复,如果它获得了足够多的投票(超过半数),则成为新的主节点。

        3. 数据复制和同步:主节点负责记录所有的写操作并将其顺序保存在Oplog(操作日志)中。从节点通过读取Oplog中的操作来进行数据的复制和同步。复制包括两个阶段:
   - 初始同步(Initial Sync):当一个从节点加入复制集时,它会从主节点复制所有的数据。主节点会将数据以数据文件(Data File)的形式发送给从节点,从节点按照顺序写入到本地磁盘中。初始同步完成后,从节点与主节点的数据将保持同步。
   - 增量同步(Incremental Sync):一旦从节点完成初始同步,它会通过读取Oplog中的写操作来实现与主节点的增量同步。主节点将新的写操作追加到Oplog中,从节点定期读取Oplog并将相应的操作应用到本地数据中,使得它与主节点的数据保持一致。

        4. 自动故障检测和恢复:复制集支持自动故障检测和恢复功能。当主节点故障或不可用时,复制集会自动进行主节点选举,从而选择一个新的主节点来接管主节点的职责。一旦原先的主节点恢复,它会以从节点的身份重新加入复制集,同步最新的数据。

三、安装部署

下载连接
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.6.tgz

创建mongodb文件夹
mkdir  /usr/local/mongodb

指定解压路径
tar xf mongodb-linux-x86_64-rhel70-4.0.6.tgz  -C /usr/local/mongodb

创建软连接
ln -s /usr/local/mongodb/bin/* /bin/

创建数据目录
mkdir -p /data/mongodb1

创建日志目录
mkdir -p /data/logs/mongodb

创建日志文件
touch /data/logs/mongodb/mongodb1.log
编写启停脚本
vim /etc/init.d/mongodb
#!/bin/bash
INSTANCE=$1
ACTION=$2
case "$ACTION" in
'start')
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf;;
'stop')
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf --shutdown;;
'restart')
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf --shutdown
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf;;
esac

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 文章来源地址https://www.toymoban.com/news/detail-537398.html

给脚本赋予执行权限
chmod +x /etc/init.d/mongodb
编写配置文件
cd /usr/local/mongodb/
mkdir conf                                  创建配置文件目录
vim conf/mongodb1.conf                      创建配置文件
port=27017		                            监听端口
dbpath=/data/mongodb1	                    指定数据目录
logpath=/data/logs/mongodb/mongodb1.log	    指定日志文件路径
logappend=true	                            允许写入日志
fork=true			                        允许创建子进程
maxConns=5000	                            最大连接数
storageEngine=mmapv1		                存储引擎

 小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

启动命令 
/etc/init.d/mongodb mongodb1 start

停止命令
/etc/init.d/mongodb mongodb1 stop

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

四、创建复制集

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

vim /usr/local/mongodb/conf/mongodb1.conf 
port=27017
dbpath=/data/mongodb1
logpath=/data/logs/mongodb/mongodb1.log
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
slowms=1                 开启慢查询阈值
profile=1                开启查询分析
replSet=722207           集群名字 随意取

在复制四份配置文件只修改配置文件中的端口号,数据文件目录,日志文件路径

 小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库 

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

mkdir /data/mongodb{1..4} -p                     创建四个数据文件目录
mkdir /data/logs/mongodb -p                      创建日志文件目录
touch /data/logs/mongodb/mongodb{1..4}.log       创建四个日志文件
chmod 777 /data/logs/mongodb/mongodb*            赋予日志所有权限

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

启动四个mongodb
/etc/init.d/mongodb mongodb1 start
/etc/init.d/mongodb mongodb2 start
/etc/init.d/mongodb mongodb3 start
/etc/init.d/mongodb mongodb4 start

netstat -anputl | grep mongodb  查看端口

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 五、测试

进入mongodb查看

查看节点信息 rs.status()

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 配置复制集

cfg={"_id":"722207","members":[{"_id":0,"host":"127.0.0.1:27017"},{"_id":1,"host":"127.0.0.1:27018"},{"_id":2,"host":"127.0.0.1:27019"}]}

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

查看复制集状态 rs.status()

在这里需要注意两条

"health" : 1, //1为健康,0为宕机

"state" : 1, //1为主,2为从

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 添加27020节点  rs.add("127.0.0.1:27020")

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

关闭主节点27017主节点 模拟故障

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

进入27018查看信息

可以看到27020节点变成了主节点

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 

六、复制集选举原理

1、复制的原理

MongoDB复制是基于操作日志oplog实现,oplog相当于mysql中的二进制日志,只记录数据发生的改变操作。

2、选举的原理

(1)节点类型:标准节点,被动节点,仲裁节点

        ①、只有标准节点可能被选举为活跃(主)节点,有选举权

        ②、被动节点有完整副本,不可能成为活跃节点,有选举权

        ③、仲裁节点不复制数据,不可能成为活跃节点,只有选举权

(2)标准节点与被动节点的区别

        priority值高者是标准节点,低者则为被动节点

(3)选举规则

票数高者获胜,priority是优先权0-1000值,相当于额外增加0-1000的票数。

选举结果:票数高者获胜;若票数相同,数据新者获胜。

3、修改选举优先权(设置两个主节点、一个从节点、一个仲裁节点)

重新停启mongodb

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

mongo进入mongodb

设置27017、27018为主节点、27019为从节点、27020为仲裁节点

cfg={"_id":"722207","protocolVersion":1,"members":[{"_id":0,"host":"127.0.0.1:27017","priority":100},        {"_id":1,"host":"127.0.0.1:27018","priority":100}, {"_id":2,"host":"127.0.0.1:27019","priority":0}, {"_id":3,"host":"127.0.0.1:27020","arbiterOnly":true}]}

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

创建完成后查看集群状态如果出现了报错下面的错误需要删除27020这个节点

再重新添加

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 rs.remove('127.0.0.1:27020')删除这个节点小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

rs.add('127.0.0.1:27020')再次添加这个节点

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

再次进行节点设置

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 再次查看集群状态

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 查看主节点是谁小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 现在再来把27017给停掉

可以看到27018变成了主服务器

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 再次把27018停掉查看情况

可以看到27017成为了主服务器

角色设置生效后只有主节点才会成为主服务器、从服务器和仲裁服务不会参与主节点的竞选

小白到运维工程师自学之路 第四十六集 (mongodb复制集),运维,mongodb,数据库

 

以上就是mongodb复制集的配置

如有错误欢迎各位大佬批评指正,我们共同进步

到了这里,关于小白到运维工程师自学之路 第四十六集 (mongodb复制集)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小白到运维工程师自学之路 第三十九集 (HAproxy 负载均衡) 一、概述

            HAProxy是一款高性能的负载均衡软件,可以将来自客户端的请求分发到多个服务器上,以提高系统的可用性和性能。HAProxy支持多种负载均衡算法,包括轮询、加权轮询、最少连接数等。同时,HAProxy还支持会话保持、健康检查、SSL终止等功能,可以满足不同场景下的

    2024年02月09日
    浏览(35)
  • 小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

    Ansible是一种开源的自动化工具,用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法,可以通过SSH协议远程管理和配置多台计算机。 Ansible的主要特点包括: 1、简单易用:设计简单,语法清晰,无需特殊培训即可上手使用。 2、基于模块

    2024年02月16日
    浏览(26)
  • 小白到运维工程师自学之路 第六十二集 (docker持久化与数据卷容器)

    一、概述 Docker持久化是指将容器中的数据持久保存在主机上,以便在容器重新启动或迁移时不丢失数据。由于Docker容器是临时和可变的,它们的文件系统默认是易失的,这意味着容器中的任何更改或创建的文件都只存在于此容器的生命周期内。但是,在许多场景中,我们希望

    2024年02月14日
    浏览(29)
  • 小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)2

      拉到最后选择构建后操作 拉到最后点击保存   访问192.168.77.19:8080/probe 账户密码都是tomcat  

    2023年08月27日
    浏览(43)
  • 猿创征文|弃文从工,从小白到蚂蚁工程师,我的 Java 成长之路

    最近 CSDN 开展了猿创征文,希望博主写文章讲述自己在某个领域的技术成长历程。 之前也曾想找个机会写篇文章,记录下自己的成长历程。 因此,借着这个机会写下这篇文章。 在回顾自己的成长历程的同时,希望对一些同学的学习和工作也会有一些启发和帮助。 阅读本文,

    2024年02月16日
    浏览(35)
  • 后端工程师晋升之路

    入门 0.5 年 第 1 计:不要过于纠结方向选择问题。 开始入门的时候,我们可能都会纠结于选择前端还是后端,选择了后端还犹豫到底选 Java、Go 还是 Python。 其实,我觉得不用过于纠结。如果说你对偏前端的内容感兴趣,那就从前端入手;对数据库方面的内容感兴趣,那就从

    2024年02月10日
    浏览(33)
  • 零基础如何自学成为网络安全工程师

    一份网络攻防渗透测试的学习路线,不藏私了! 👉 【一帮助安全学习一】👈这里自取256G网络安全自学资料 1、学习编程语言(php+mysql+js+html) php+mysql可以帮助你快速的理解B/S架构是怎样运行的,只有理解了他的运行原理才能够真正的找到问题/漏洞所在。所以对于国内那些上来

    2024年02月16日
    浏览(41)
  • 【良品】运维实施工程师面试题

    答:netstat –anpt | grep 8089 答:kill -9 4728/ 答:find . -name \\\"en* \\\" 答:chmod +x filename.sh 答:tar -xf .gz -C /usr/local unzip .zip 答:rpm -q smile ; rpm -e smile 答:vi /etc/profile  添加内容 JAVA_HOME=/usr/local/java/jdk1.8.0_221 PATH=JAVAHOME/bin:PATH CLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar export JAVA_HOME expo

    2024年02月09日
    浏览(34)
  • 初级运维工程师面试题

    1、apache有几种工作模式,分别简述两种工作模式及其优缺点? apache主要有两种工作模式:prefork(apache的默认安装模式)和worker(可以在编译的时候添加–with-mpm=worker选项) prefork的特点是:(预派生) 1.这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销 2.可以防

    2024年02月08日
    浏览(40)
  • 【运维工程师学习】Debian安装

    选择镜像文件 进入安装选择界面 graphical install 图形安装 Install 安装系统 advanced options 高级选项 Help 帮助 accessible dark contrast installer menu 无障碍暗色对比度安装程序菜单 (旨在为视力有障碍的用户提供更好的可访问性,提供了: 高对比度主题、大字体选项、屏幕阅读器支持) In

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包