mongodb基础系列—副本集具体搭建以及解说
2013-12-23 10:33
441 查看
既然有了主从复制,为啥又出来个副本集?一个东西的出现,肯定存在一种东西被解救。所谓一物降一物O(∩_∩)O
上文中说道主从复制缺点—主服务器出现故障,从服务器是干瞪眼。这篇文章就要解说,主仆之间会有一个怎样的变化?
仍然是一台电脑工作。步骤如下:
以三个节点为例:
启动节点1中:replSet指定副本集名称,后面是可选参数。说明该副本集群中还有10002数据库。
我们看看log日志:
启动节点2:
启动节点2中日志:
启动节点3:
其中启动节点3时,可以只指定副本集中的一个服务,或同时指定。副本集的一个特性为:自动检测,你仅指定单台服务器后,MongoDB会自动搜索并连接到同一副本集的其余的节点。
其中节点3中日志:
"_id":“itcast", 指副本集的名称
"members":[...] 副本集的服务器列表 每个列表有个
"_id": 每个服务器的唯一id,
"host" 指定服务器的主机,
“priority”设置优先级,默认优先级为1,可以是1-1000的数字,数字越大,优先级越高。
查看是否是主服务器:db.$cmd.findOne ( {ismaster: 1 } );
10002节点日志文件:
10003节点日志文件:
通过控制台发现:
集群中因为投票数不大于总数一半,所以10003是不会升级为主服务器的。
另一种测试,我们把10003起来后,目前是10002是主服务器,我们现在宕掉10003副节点,看效果:
local数据中集合中local.system.replset中没有任何配置信息,是记录节点初始化
local.oplog.rs集合记录主节点操作数据库状态日志:
副本集特性:1.没有固定的master主节点。2.故障自动恢复,继续工作。
没有固定的主节点,是因为一个主节点宕掉,集群中会elect投票,从副节点secondary中选举一个,升级为主节点。
总体而言,副本集就是具有故障自动恢复的主从复制。
其实主从复制,目前官网也也不怎么提倡,因为主从复制只能起到备份作用,没有达到自动恢复效果。
ps:主节点其实就是活跃点,副节点、从节点就是备份节点。
上文中说道主从复制缺点—主服务器出现故障,从服务器是干瞪眼。这篇文章就要解说,主仆之间会有一个怎样的变化?
仍然是一台电脑工作。步骤如下:
1.准备条件,模拟三个服务器,一个主primary,两个secondary(可以称副节点)
可以新建目录如下:以三个节点为例:
节点1: HOST:localhost:10001 Log File:e:\mastersavle\logs\node1\logs.txt Data File:E:\mastersavle\dbs\node1 节点2: HOST:localhost:10002 Log File:E:\mastersavle\logs\node2\logs.txt Data File:E:\mastersavle\dbs\node2 节点3: HOST:localhost:10003 Log File:E:\mastersavle\logs\node3\logs.txt Data File:E:\mastersavle\dbs\node3
2.启动三个节点,观察启动后每个节点的日志文件
启动节点1:mongod --dbpath E:\mastersavle\dbs\node1 --logpath E:\mastersavle\logs\node1\logs.txt --logappend --port 10001 --replSet itcast/localhost:10002 --master
启动节点1中:replSet指定副本集名称,后面是可选参数。说明该副本集群中还有10002数据库。
我们看看log日志:
启动节点2:
mongod --dbpath E:\mastersavle\dbs\node2 --logpath E:\mastersavle\logs\node2\logs.txt --logappend --port 10002 --replSet itcast/localhost:10001
启动节点2中日志:
启动节点3:
mongod --dbpath E:\mastersavle\dbs\node3 --logpath E:\mastersavle\logs\node3\logs.txt --logappend --port 10003 --replSet itcast/localhost:10001,localhost:10002
其中启动节点3时,可以只指定副本集中的一个服务,或同时指定。副本集的一个特性为:自动检测,你仅指定单台服务器后,MongoDB会自动搜索并连接到同一副本集的其余的节点。
其中节点3中日志:
3.初始化节点:只初始化一次,随便登陆三个节点任何一个,但是必须进入admin数据库
节点2和节点3日志文件中已经告诉我们,replSet info you may need to run replSetInitiate,需要运行初始化函数。db.runCommand({"replSetInitiate":{"_id":"itcast","members":[{"_id":1,"host":"localhost:10001","priority":3},{"_id":2,"host":"localhost:10002","priority":2},{"_id":3,"host":"localhost:10003","priority":1}]}});
"_id":“itcast", 指副本集的名称
"members":[...] 副本集的服务器列表 每个列表有个
"_id": 每个服务器的唯一id,
"host" 指定服务器的主机,
“priority”设置优先级,默认优先级为1,可以是1-1000的数字,数字越大,优先级越高。
4.开启另一个窗口,测试谁是主服务器
连接10001端口:查看是否是主服务器:db.$cmd.findOne ( {ismaster: 1 } );
5.测试副本集特性,断开主节点,看副节点有何变化?
直接把主节点服务断开,10001日志文件和10002日志,则会打印,连不上10001问题。10002节点日志文件:
10003节点日志文件:
通过控制台发现:
6.测试几种情况,目前剩下10002(主)和10003(副),宕掉主,副会有啥变化
继续宕掉10002,看看10003有啥变化?集群中因为投票数不大于总数一半,所以10003是不会升级为主服务器的。
另一种测试,我们把10003起来后,目前是10002是主服务器,我们现在宕掉10003副节点,看效果:
7.副本集同步原理:如何保持主从节点数据一致性:
上篇博客提到主从复制中,主节点记录在local数据库,来保持同步性。副本集其实也是类似的,主节点操作数据库状态的日志,记录在local.oplog.rs集合中,这样,备份节点通过读取日志,在自己数据库完完全全执行一遍。【不记录查询哈,同上篇】local数据中集合中local.system.replset中没有任何配置信息,是记录节点初始化
local.oplog.rs集合记录主节点操作数据库状态日志:
8.总结
从上文测试可以看出,副本集和主从复制的区别副本集特性:1.没有固定的master主节点。2.故障自动恢复,继续工作。
没有固定的主节点,是因为一个主节点宕掉,集群中会elect投票,从副节点secondary中选举一个,升级为主节点。
总体而言,副本集就是具有故障自动恢复的主从复制。
其实主从复制,目前官网也也不怎么提倡,因为主从复制只能起到备份作用,没有达到自动恢复效果。
ps:主节点其实就是活跃点,副节点、从节点就是备份节点。
相关文章推荐
- mongodb基础系列—主从复制具体搭建以及解说
- Linux中基础笔记(必备知识)包含常用指令以及tomcat搭建 系列2
- Linux中基础笔记(必备知识)包含常用指令以及tomcat搭建 系列3
- mongodb副本集搭建以及增减机器
- Linux中基础笔记(必备知识)包含常用指令以及tomcat搭建 系列1
- MongoDB基础教程系列--第八篇 MongoDB 副本集实现复制功能
- mongodb副本集架构搭建
- C#WinForm开发系列之CheckBox控件全选和取消全选以及checkedListBox的基础使用介绍
- mongodb基础系列——数据库查询数据返回前台JSP(一)
- 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink实战基础0019--IDEA搭建maven管理的集成开发环境001
- mongodb基础系列——数据库查询数据返回前台JSP(一)
- MongoDB副本集配置系列十:MongoDB local库详解和数据同步原理
- SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)
- MongoDB 3.4 高可用集群搭建(二)replica set 副本集
- MongoDB windows基础配置及集群搭建
- J2SE基础夯实系列之使用Arrays.sort()方法,以及涉及到的Comparable和Comparator
- 搭建mongodb集群(副本集+分片)
- 『搭建中小型互联网公司后台服务架构』四、后台服务nosql数据库mongodb:高可用讲解以及安装
- NOSQL学习笔记系列之MongoDB 一 基础
- MongoDB系列[2]:MongoDB导入导出以及数据库备份