介绍

replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处:

  1. 数据备份与恢复
  1. 读写分离

MongoDB 复制集的结构以及基本概念


正如上图所示,MongoDB 复制集的架构中,主要分为两部分:主节点(Primary)和从节点(Secondary)。

主节点:在一个复制集中只有并且必须有一个主节点,主节点也是众多实例中唯一可以接收客户端写操作的节点,当然也可以进行读操作;

从节点:从节点会复制主节点的操作,以获取完全一致的数据集。客户端不能够直接对从节点进行写操作,但是可以进行读操作,这个需要通过复制集选项进行设置。

投票节点:投票节点 并不含有 复制集中的数据集副本,且也 无法 升职为主节点。投票节点的存在是为了使复制集中的节点数量为奇数,这样保证在进行投票的时候不会出现票数相同的情况。如果添加了一个节点后,总节点数为偶数,那么就需要相应的增加一个投票节点。

注:MongoDB 3.0 把复制集中的成员数量从原来的12个提升到了50个,但是投票节点的数量仍然保持不变,还是7个。

最基本的复制集架构


一个主节点,两个从节点,自动化故障切换的特性
最基本的复制集架构是有3个节点的形式。这样在主节点不可用以后,从节点会进行投票选出一个节点成为主节点,继续工作。如下图所示:

重新投票选出主节点

三个节点的复制集架构,还有另外一种形式:一个主节点,一个从节点,一个投票节点。如下图所示:

一个主节点,一个从节点,一个投票节点
在这种架构中,当主节点不可用时,只有从节点可以升为主节点,而投票节点是不可以成为主节点的。投票节点仅仅在选举中进行投票。如下图所示:

从节点无法升职为主节点的情况

其他概念
从节点还有集中特殊的设置情况,不同的设置有不同的需求:

优先级为0:设置 priority:0 ,那么该结点将不能成为主节点,但是其数据仍是与主节点保持一致的,而且应用程序也可以进行读操作。这样可以在某些特殊的情况下,保证其他特定节点优先成为主节点。

隐藏节点:隐藏节点与主节点的数据集一致,但是对于应用程序来说是不可见的。隐藏节点可以很好的与 复制集 中的其他节点隔离,并应对特殊的需求,比如进行报表或者数据备份。隐藏节点也应该是一个不能升职为主节点的优先级为0的节点。

延时节点:延时节点也将从 复制集 中主节点复制数据,然而延时节点中的数据集将会比复制集中主节点的数据延后。举个例子,现在是09:52,如果延时节点延后了1小时,那么延时节点的数据集中将不会有08:52之后的操作。

由于延时节点的数据集是延时的,因此它可以帮助我们在人为误操作或是其他意外情况下恢复数据。举个例子,当应用升级失败,或是误操作删除了表和数据库时,我们可以通过延时节点进行数据恢复。

oplog:全拼 oprations log,它保存有数据库的所有的操作的记录。在复制集中,主节点产生 oplog,然后从节点复制主节点的 oplog 进行相应的操作,这样达到保持数据集一致的要求。因此从节点的数据与主节点的数据相比是有延迟的。

配置

# 创建数据存储目录
mkdir -p /data/r0 /data/r1 /data/r2# 创建日志文件
touch /var/log/mongo17.log /var/log/mongo18.log /var/log/mongo19.log#启动3个实例,且声明实例属于某复制集 rsa
./bin/mongod --port 27017 --dbpath /data/r0 --smallfiles --replSet rsa --fork --logpath /var/log/mongo17.log
./bin/mongod --port 27018 --dbpath /data/r1 --smallfiles --replSet rsa --fork --logpath /var/log/mongo18.log
./bin/mongod --port 27019 --dbpath /data/r2 --smallfiles --replSet rsa --fork --logpath /var/log/mongo19.log# 进入27017进行配置初始化
./bin/mongo --port 27017
rsconf = {_id:'rsa',members:[{_id:0,host:'192.168.42.168:27017'}]
}
rs.initiate(rsconf); # 如果以后需要再重载一下config的话,用rs.reconfig(rsconf);# 添加节点
rs.add('192.168.42.168:27018');
rs.add('192.168.42.168:27019');# 查看状态
rs.status();# 删除节点
rs.remove('192.168.1.201:27019');# 主节点插入数据
>use test
>db.user.insert({uid:1,name:'lily'});#连接secondary查询同步情况
./bin/mongo --port 27019
>show dbsrsa:SECONDARY> show dbs;
2015-08-27T11:39:00.638+0800 E QUERY    Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }# 还可以通过isMaster()命令来查看信息;
rsa:PRIMARY> db.isMaster();
{"setName" : "rsa","setVersion" : 5,"ismaster" : true,"secondary" : false,"hosts" : ["192.168.42.168:27018","192.168.42.168:27019","192.168.42.168:27017"],"primary" : "192.168.42.168:27018","me" : "192.168.42.168:27018","electionId" : ObjectId("55dea0cffa0c638625a82486"),"maxBsonObjectSize" : 16777216,"maxMessageSizeBytes" : 48000000,"maxWriteBatchSize" : 1000,"localTime" : ISODate("2015-08-27T05:49:13.740Z"),"maxWireVersion" : 3,"minWireVersion" : 0,"ok" : 1
}# 出现上述错误,是因为slave默认不许读写
>rs.slaveOk();
>show dbs; # 执行上面一个语句就可以看到和primary一致的数据,并且可以把读和写分离开来;

以上便是一个最简单的复制集架构,其中如果27017的主节点崩溃,那27018的节点就由从节点变为主节点;注意,如果再添加原来的27017节点进来,那主节点还是27018;

自动化配置脚本

#!/bin/bash
IP='192.168.1.202'
NA='rsb'if [ "$1" = "reset" ]
thenpkill -9 mongorm -rf /home/m*exit
fiif [ "$1" = "install" ]
thenmkdir -p /home/m0 /home/m1 /home/m2 /home/mlog/usr/local/mongodb/bin/mongod --dbpath /home/m0 --logpath /home/mlog/m17.log --logappend --port 27017 --fork
--replSet ${NA}
/usr/local/mongodb/bin/mongod --dbpath /home/m1 --logpath /home/mlog/m18.log --logappend --port 27018 --fork
--replSet ${NA}
/usr/local/mongodb/bin/mongod --dbpath /home/m2 --logpath /home/mlog/m19.log --logappend --port 27019 --fork
--replSet ${NA}exit
fiif [ "$1" = "repl" ]
then
/usr/local/mongodb/bin/mongo <<EOFuse admin
rsconf = {_id:'${NA}',members:[{_id:0,host:'${IP}:27017'},{_id:1,host:'${IP}:27018'},{_id:2,host:'${IP}:27019'},]
}
rs.initiate(rsconf)
EOF
fi

转载于:https://www.cnblogs.com/nixi8/p/4854197.html

【mongoDB运维篇③】replication set复制集相关推荐

  1. mongodb 集群shard_【mongoDB运维篇④】Shard 分片集群

    简述 为何要分片 减少单机请求数,降低单机负载,提高总负载 减少单机的存储空间,提高总存空间. 常见的mongodb sharding 服务器架构 要构建一个 MongoDB Sharding Clu ...

  2. mongodb 集群shard_【mongoDB运维篇④】Shard分片集群

    ## 简述 ### 为何要分片 1. 减少单机请求数,降低单机负载,提高总负载 2. 减少单机的存储空间,提高总存空间. ![此处输入图片的描述][1] ### **常见的mongodb shardi ...

  3. 蚂蚁金服 Service Mesh 大规模落地系列 - 运维篇

    <蚂蚁金服 Service Mesh 大规模落地系列>将会从核心.RPC.消息.无线网关.控制面.安全.运维.测试等模块对 Service Mesh 双十一大规模落地实践进行详细解析,文末 ...

  4. 数据库应用----Mongodb 4.0 版本 基础操作---复制集,选举方法、部署认证 (二)

    Mongodb 4.0 版本 基础操作-复制集,选举方法.部署认证 (二) 文章目录 Mongodb 4.0 版本 基础操作---复制集,选举方法.部署认证 (二) 一.MongoDB 复制集 二.部 ...

  5. Mysql8 group replication组复制集群单主多主模式切换

    Mysql8 MGR集群操作图解 声明与简介 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理.本文主要介绍mysql的MGR集群的操作. My ...

  6. centos7 如何安装部署k8s_架构运维篇(五):Centos7/Linux中安装部署RocketMQ

    上一篇 架构运维篇(四):Centos7/Linux中Tomcat安装SSL证书实践 这一篇讲一下在Centos7/Linux安装RocketMQ,MQ的具体应用场景和使用就不再啰嗦了.我在没有使用过 ...

  7. 视频教程-Prometheus+Grafana企业级监控实战(运维篇)2020年视频教程-Linux

    Prometheus+Grafana企业级监控实战(运维篇)2020年视频教程 资深DevOps工程师,曾经在华为,乐逗游戏工作,目前就职于知名物流公司工作 希望结合工作实践 给大家带来很多干货 周龙 ...

  8. java安装不上有关故障排除,Java有关问题排查(运维篇)

    Java问题排查(运维篇) 每一位开发想必都会遇到线上服务告警,而导致这样原因的肯能有流量增加或是代码中bug异常没有抓住导致,而此刻我们就需要去排查问题. 1:业务增加,导致FGC频繁发送,如果不知 ...

  9. spring Boot 2 运维篇(spring boot程序的打包与部署,多环境开发配置文件的配置,spring boot集成日志框架)

    目录 1.SpringBoot程序的打包与运行 程序打包 程序运行 SpringBoot程序打包失败处理 命令行启动常见问题及解决方案 SpringBoot项目快速启动(Linux版) 2.配置高级 ...

最新文章

  1. 边结点结构体的定义及使用
  2. Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[2]
  3. Spring配置中context:annotation-config VS context:component-scan
  4. Qt修炼手册12_线程同步与线程等待条件
  5. 关于将struts2框架下,使自定义过滤器对部分的action(一个action或多个action)请求忽略的方法
  6. python第五次作业——陈灵院
  7. python Django之Web框架本质 (2)
  8. CentOS中zip压缩和unzip解压缩命令详解
  9. TensorFlow安装中碰到的问题汇总
  10. mysql 前10条 平均数_mysql – 每组最新N条记录的平均值
  11. Redhat 7 进入救援模式
  12. 360安全卫士加速球误关闭某个应用软件
  13. b区计算机复试国家线,2017考研A区B区及各学科国家线预测解析
  14. EPON联通网关超级管理员密码获取办法
  15. uniapp 复制 粘贴功能
  16. python span 抓取_python – Beautifulsoup获取span内容
  17. 居家也可以减肥?懒人瘦身也能行-987减肥网
  18. Imagination领先IP助力国产处理器 从芯片走向解决方案
  19. java使用drawtext重叠_DrawText的使用
  20. 神经网络分类器的原理图,神经网络分类器是什么

热门文章

  1. docker实现宿主机和容器之间数据共享
  2. 操作系统:Win10的沙盒是什么,如何使用,看完你就懂了!
  3. 数据库:MySQL、HBase、ElasticSearch三者对比
  4. 让步的人,最值得深交
  5. linux查看 idt日志,实现RCP的日志管理
  6. apk私钥_获取APK证书MD5、SHA1、SHA256等秘钥
  7. python fsolve说明_Python fsolve()抱怨形状.为什么?
  8. python绘制繁花曲线代码_使用python和pygame绘制繁花曲线的方法
  9. charles乱码_基于iOS的Charles抓包实践
  10. 宽量程电压电流 stm32_万用表你只会量电压电流?史上最全万用表手册,这么做你不会烧表...