MongoDB--副本集基本信息
副本集的概念
副本集是一组服务器,其中有一个是主服务器(primary),用于处理客户端请求;还有多个备份服务器(secondary),用于保存主服务器的数据副本。如果主服务器崩溃了,备份服务器会自动将其中一个成员升级为新的主服务器。
副本集特征:
· N 个节点的集群
· 任何节点可作为主节点
· 所有写入操作都在主节点上
· 自动故障转移
· 自动恢复
副本集还有以下几个需要注意的地方:
1. 最小构成是:primary,secondary,arbiter,一般部署是:primary,2 secondary。
2. 成员数应该为奇数,如果为偶数的情况下添加arbiter,arbiter不保存数据,只投票。
3. 最大50 members,但是只能有 7 voting members,其他是non-voting members。
1、数据同步
Mongo的复制功能是通过oplog实现的,oplog包含了主节点的每一次写操作,是主节点的local数据库中的一个固定集合,备份节点通过查询这个集合就可以知道需要进行复制的操作。每个备份节点有自己的oplog,这样每个成员就可以当作同步源提供给其他成员使用。备份节点从当前同步源中获取需要执行的操作,然后在自己的数据集上执行这些操作,最后将这些操作写入自己的oplog。
如果备份节点挂了,当它重启后,会自动从oplog中最后一个操作开始同步,由于复制操作的过程是先复制数据再写入oplog,所以备份节点有可能在已经同步过的数据上再次执行复制操作。Mongo是这么处理的:将oplog中的同一操作执行多次与只执行一次的效果是一样。
由于oplog大小是固定的,通常它的使用空间的增长速度与系统处理写请求的速率近乎相同。但是有些例外情况:如果单次处理能够影响到多个文档,那么每个受影响的文档都会对应oplog的一条日志。比如执行db.coll.remove()删除了1000000个文档,那么oplog中就会有1000000条操作日志,这样oplog很快就会被填满。
2、仲裁节点
仲裁者唯一的作用就是选举,不保存数据,也不会为客户端提供服务,它只是为了满足“大部分”的要求
添加仲裁者的两种方式
>rs.addArb(“server-5:27017”)
>rs.add({“_id”:4,”host”:” server-5:27017”,”arbiterOnly”:true})
仲裁的缺点
比如有三个成员的副本集,其中一个是仲裁节点。当一个数据节点挂了,那么另一个数据节点成为主节点,为了保证数据安全,就需要添加一个新的备份节点,但由于仲裁节点无数据,那么新节点的数据传输只能靠当前的主节点完成。那么它不仅要处理应用程序请求,还要数据复制到备份节点,会造成服务器压力巨大
所以尽量配置成奇数个数据成员,而不使用仲裁者
3、优先级
优先级表示一个成员渴望成为主节点的程度,取值范围0-100,默认1,0代表永远不能成为主节点(passive member)
优先级别高的会优先选举为主节点(只要他能得到大部分的支持,并且数据是最新的)
4、心跳
每个成员每隔两秒都会向其他成员发送一个心跳请求,用于检查每个成员的状态,知道自己是否符合大多数的条件。
5、回滚
如果主节点执行了一次写请求后挂了,但是备份节点还没来得及复制这次操作,那么新选举出来的主节点就会漏掉这次写操作。这时就会执行回滚过程。
6、内存管理mmap
MongoDB应该分配的内存大小最好满足内存大小>索引+热数据+连接占用内存,通过db.stats()命令可查看到当前数据库的索引大小情况
db.stats()
下面是公司的MongoDB存储了14亿数据,占1.4T存储空间

shard1:SECONDARY> db.stats()
{
"db" : "database", // 当前使用的数据库
"collections" : 662, // 多少张表
"objects" : 1405948982, // 所有表的多少条数据 -- 14.05亿
"avgObjSize" : 1134.649427176014, // 平均每条数据大小
"dataSize" : 1595259207065, // 总数据大小 -- 1.485TB
"storageSize" : 768647647232, // 所有数据占磁盘的大小 -- 715.85G
"numExtents" : 0,
"indexes" : 1098, // 索引数量
"indexSize" : 173431967744, // 索引大小 -- 160G
"ok" : 1
}
MongoDB--副本集基本信息的更多相关文章
- MongoDB副本集的实现与维护实战
1.建立MongoDB副本集 现利用一台机器完成MongoDB副本集的建立 机器1:127.0.0.1:27017 机器2:127.0.0.1:27018 机器3:127.0.0.1:27019 在D ...
- MongoDB副本集学习(三):性能和优化相关
Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...
- MongoDB 副本集的原理、搭建、应用
概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...
- MongoDB副本集学习(一):概述和环境搭建
MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...
- MongoDB副本集学习(二):基本测试与应用
简单副本集测试 这一节主要对上一节搭建的副本集做一些简单的测试. 我们首先进入primary节点(37017),并向test.test集合里插入10W条数据: . rs0:PRIMARY> ;i ...
- MongoDB副本集搭建及备份恢复
一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...
- java程序连接MongoDB副本集测试
三个节点有一个节点挂掉也不会影响应用程序客户端对整个副本集的读写! public class TestMongoDBReplSet { public static void main(String[] ...
- MongoDB副本集的常用操作及原理
本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...
- MongoDB副本集的搭建
副本集是mongodb提供的一种高可用解决方案.相对于原来的主从复制,副本集能自动感知primary节点的下线,并提升其中一个Secondary作为Primary. 整个过程对业务透明,同时也大大降低 ...
- 创建mongodb副本集操作实例
一:概念 相关概念及图片引用自这里 mongodb副本集: 副本集是一组服务器,其中一个是主服务器,用于处理客户请求:还有多个备份服务器,用于保存主服务器的数据副本.如果主服务器崩溃了,备份服务器自动 ...
随机推荐
- Sass-数字运算
在 Sass 运算中数字运算是较为常见的,数字运算包括前面介绍的:加法.减法.乘法和除法等运算.而且还可以通过括号来修改他们的运算先后顺序.和我们数学运算是一样的,一起来看个示例. .box { wi ...
- Sass--扩展继承
在 Sass 中也具有继承一说,也是继承类中的样式代码块.在 Sass 中是通过关键词 “@extend”来继承已存在的类样式块,从而实现代码的继承.如下所示: //SCSS .btn { borde ...
- hdu 4235 容斥原理模板题
题目大意: 输入样例个数T,每个样例输入三个数a,b,n,求[a,b]之间与n互素的个数 基本思路: 互斥,想想这个:AUBUC=A+B+C-A∩B-A∩C-B∩C+A∩B∩C fac存的是n的素因数 ...
- JAVA 利用 jmc或jvisualvm 监控 本地或者远程JVM
本地检测之间到$JAVA_HOME/bin 下的目录点击jmc 或者jvisualvm,然后选择你要监控的app 可是一般我们生产环境项目都是部署在远程,这个时候想要监控怎么办 1.监控tomcat ...
- Go(三)面向对象
封装数据和行为 数据封装 结构定义 type Employee struct { Id string Name string Age int } field后面没有逗号 实例创建及初始化 e := E ...
- 前端-个人网页开发最常用的插件Superslide 与 swiper
给初入前端的同学,安利2个轮播图插件 SuperSlide 与 Swiper ! SuperSlide PC端与移动端 的轮播图特效都是分开写2个js插件,而Swiper 基本一个插件可以写PC端与移 ...
- Angular JS - 9 - SeaJS加载js模块
seajs加载模块的三种方式 1.seajs.use() 加载入口模块,类似于Java的main函数 2.require: 当在一个模块中需要用到其它模块时一般用require加载 1) ...
- mybatis模糊查询(转载)
原文地址:http://blog.csdn.net/luqin1988/article/details/7865643 模糊查询: 1. sql中字符串拼接 SELECT * FROM tableNa ...
- Java Web学习总结(12)Filter过滤器
一,Filter简介 Filter也称之为过滤器,Filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理. 二,Filter开发步骤 1)编写一个 ...
- POJ - 1655 (点分治-树的重心)
题目:https://vjudge.net/contest/307753#problem/D 题意:给你一棵树,让你求出一个点,让他的最大子树的节点数尽量小 思路:最大子树节点数尽量小,一看就是树的重 ...