replication set复制集
replication set复制集
replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处:
- 数据备份与恢复
- 读写分离
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 dbs
rsa: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" ]
then
pkill -9 mongo
rm -rf /home/m*
exit
fi
if [ "$1" = "install" ]
then
mkdir -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
fi
if [ "$1" = "repl" ]
then
/usr/local/mongodb/bin/mongo <<EOF
use 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
绝大多数博文都是从自己笔记里面整理出来的,尽可能多发专题类的系列博文,也尽可能做到排版整洁,便于查阅。秉持着互联网的开放分享,平等协作的精神,本人会一直不断的更新下去。另外,感谢您指出博文的不足之处,或者对其中有疑问之处可以在评论中留言,也可以加个QQ进一步交流:822010893(请注明博客园)
replication set复制集的更多相关文章
- 【mongoDB运维篇③】replication set复制集
介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集的结构以及基本概念 正如上图所示,Mon ...
- MongoDB基础之九 replication复制集
准备工作:创建目录 mkdir -p /home/m17 //home/m18 /home/m19 /home/mlog 1:启动3个实例,且声明实例属于某复制集 # ./bin/mongod --d ...
- [Mongodb] Relica Set复制集集群简单搭建--持续更新
这里我们搭建一个没有访问控制,奇数个Set没有仲裁者的集群 1.三个配置文件添加 replication.replSetName:"Replica_test" 并启动三个实例2.连 ...
- mongodb3.2.3 复制集安装步骤
mongodb 复制集 测试 node1: 172.18.20.161 47000 (主)node2: 172.18.20.162 47000 (副)node3: 172.18.20.163 4700 ...
- MongDB主从复制、复制集
主从复制比较简单,指定master.slave即可,其中master可写可读.slave只能读不能写.向master插入数据时,mongodb会自动将数据复制到slave节点.这样做的好处是读写分离, ...
- 快速搭建MySQL复制集
快速搭建MySQL复制集 1 环境说明 MySQL版本 5.6 basedir :/u01/my3306 #MySQL软件目录 数据目录 :/u01/mysql/[实例名]/data 日志目录 :/u ...
- Raft与MongoDB复制集协议比较
在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...
- MongoDB复制集技术
复制集搭建 没毛病: https://www.cnblogs.com/nicolegxt/p/6841442.html?utm_source=itdadao&utm_medium=referr ...
- mongodb复制集Replica Set使用简介
MongoDB高可用 对于MongoDB,可以支持使用单机模式提供服务,但是在实际的生产环境中,单机模式将面临很大的风险,一旦这个数据库服务出现问题,就会导致线上的服务出现错误甚至崩溃.因此,在实际生 ...
随机推荐
- native app
Apache Cordova是PhoneGap贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,是驱动PhoneGap的核心引擎.你可以把他想象成类似于Webkit和Google ...
- Linux配置SSH公钥认证与Jenkins远程登录进行自动发布
公钥认证,是使用一对加密字符串,一个称为公钥(public key), 任何人都可以看到其内容,用于加密:另一个称为密钥(private key),只有拥有者才能看到,用于解密. 在使用jenkins ...
- 【Python】【解决】UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 1: ordinal not in range(128)
1.问题描述 今天在升级Ubuntu到14.04,使用命令行启动软件更新器,进行版本升级,结果开始升级就异常退出了,具体打印如下: $update-manager -d 正在检查新版 Ubuntu 使 ...
- SqlHelper类的使用
SqlHelper.cs public static class SqlHelper { private static readonly string conStr = ConfigurationMa ...
- HDU 3695 / POJ 3987 Computer Virus on Planet Pandora(AC自动机)(2010 Asia Fuzhou Regional Contest)
Description Aliens on planet Pandora also write computer programs like us. Their programs only consi ...
- 面向服务的体系结构(SOA)——(4)对于服务的理解
在接触SOA之前对"服务"这个词没有太多的感触,无非就是为别人做事情么.当然在SOA中这个词也脱离不了这层基本的涵义,但是具体到实际的架构中对这个词的理解就更加深刻了.本文就以&q ...
- CF 149D Coloring Brackets 区间dp ****
给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内 ...
- 在visual studio 2010中调用ffmpeg
转自:http://blog.sina.com.cn/s/blog_4178f4bf01018wqh.html 最近几天一直在折腾ffmpeg,在网上也查了许多资料,费了不少劲,现在在这里和大家分享一 ...
- 网站构建学习笔记(0)——基本概念了解及资源学习(copy自w3school)
一.学习方面 1.WWW - 万维网 什么是 WWW? WWW 指万维网(World Wide Web) 万维网常被称为Web Web 是由遍布全球的计算机所组成的网络 所有 Web 中的计算机都可以 ...
- BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍
BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍 你进入BeagleBone世界的第一步就是将它连接以得到命令提示,然后你就可以处理文件以及执行命令了.在这里,你就可以定制你 ...