在配置副本集之前,我们先来了解一些关于副本集的知识.

1,副本集的原理

  副本集的原理与主从很相似,唯一不同的是,在主节点出现故障的时候,主从配置的从服务器不会自动的变为主服务器,而是要通过手动修改配置.但是副表集就不用,它会自动选出一台服务器做为主节点,从而保障系统的稳定性.

2,副本集新的主节点是怎么选举出来的呢

  是通过bully算法来的,也就是一致性协议.具体如下

  1):当主节点挂了后,副本集会获得其他从节点的最后更新时间与主服务做对比

  2):如果所有从节点的最后更新时间都是很旧,那就选举停止

  3):如果副本集中的大部分服务器挂了,包含主节点,那么选举也停止

  4):如果以上情况都没有发生,那就更新时间最新的被选举为主节点

  5):如果更新时间都一样,那么谁最快成为主节点就谁做为主节点

  注意:参数选举的节点必须是副本集中的半数节点以上,如果已经小于一半了所有节点保持只读状态。日志将会出现:can't see a majority of the set, relinquishing primary

  当然还有其他方法可以干预自然选举主节点的:

  设置从节点的优先级:通过priority,优先级高的先成为主节点

  强制下架主节点:db.adminCommand({replSetStepDown:1,force:true});

3.什么情况下会触发选举这个行为呢:

  1):配置副本集环境,做副本集初始化的时候

  2):当主节点挂掉的时候

  3):当主节点与其他节点无法通信的时候,即网络出现问题的时候.

4.副本集中的节点的角色

  primary:主节点

  arbiteronly:仲裁节点,不存储数据,只参与选举

  Secondary-Only:不能成为主节点,只能做为从节点,并可以参与选举

  Hidden:隐藏不被链接的从节点,不被程序访问,但可以参与选举的节点

  Delayed:可以指定一个时间延迟从primary节点同步数据。主要用于备份数据,如果实时同步,误删除数据马上同步到从节点,恢复又恢复不了。

  Non_voting:没有得参与选举,只负责备分数据

  设置方法:在初始化的时候把相关的角色设置为true就行了.

5.副本集的节点总数为什么要为奇数

假设你有一个副本集,这个副本集有四台服务器,分别两两位于不同的机房,这时两个机房之间的通信网络出故障断了,主节点与另一个机房的节点不能通信,这时候就会触发重新选举主节点的行为.但两个机房的服务器都是两台,占用这个副本集的服务器数量都没有达到半数以上,这个时候选举停止,副本集失效.假如是5台分布在两个机房那就有一个机房是三台服务器,超过副本集的一半,产生选举.

6.配置副本集的流程:

创建副本集的目录与副本集日志目录  ----> 以副本集启动mongodb  ---> 初始化副本集

7.开始配置吧

先准备三台服务器,假设IP分别为:192.168.1.1,   192.168.1.2,    192.168.1.3

假设mongodb安装在根目录下

1):分别在三台服务器创建副本集的数据目录:mkdir /mongodb/data/replset

2):分别在三台服务器创建副本集的日志目录:mkdir /mongodb/log

3):分别在三台服务器启动mongodb,需要启动某些参数,我们可以把参数配置在一个配置文件中,然后以--config来加载配置文件,配置内容如下

dbpath=/mongodb/data/replset

logpath=/mongodb/log/replset.log

port=27017

fork=true

oplogSize=2048

开始启动,加上表示副本集的参数,参数后面带上副本集的名字,分别在三台服务器执行以下命令:

mongod --config /mongodb/bin/replset.conf --replset myreplset

4):副本集初始化

  登录其中任意一台服务器,运行以下命令

  进入mongodb操作命令界面:mongo

  配置集本集服务器信息:

  config={"_id":"myreplset","members":[{"_id":0,"host":"192.168.1.1:27017"},{"_id":1,"host":"192.168.1.1:27017"},{"_id":2,"host":"192.168.1.1:27017"}]};

  注意:这里的第一个_id是表示我们启动mongodb时--replset这个参数后面带的名称一致,即副本集的名称,member里的_id是服务器在副本集中的代号,host是主机ip和通信端口

  初始化:rs.initiate(config);

  初始化成功显示如下:

  {
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
  }

  到这一步就是副本集配置完成了

 你可以通过rs.status();这个来查看副本集各节点的状态;

其中的statestr:的值就表示是主节点还是从节点.

5):自己通过一些手动修改数据或停止主节点来测试数据的复制和主节点的选举是否成功.还有默认是主节点进行读取的,从节点是不能进行读取的,所以要在从节点运行以下命令: db.getMongo().setSlaveOk();

6.读取行为的分类:

primary:默认参数,只从主节点上进行读取操作;
primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据。
secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“旧”。
secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据;
nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据。

7.怎么把一个从节点变为一个仲裁节点

1):先停掉从节点的mongod

2):在主节点把这个从节点多mongodb副本集中移除.rs.remove("ip:端口");

2).新建一个数据目录,仲裁节点不需要存放数据,但要配置数据目录,设置的数据目录也不可以有数据.

3):启动从节点的mongod,要以副本集的形式启动.

4):在主节点中用rs.addArb("ip:端口");用rs.conf();查看是否设置成功.

8.副本集架设经验:最好不要把一个副本集的所有服务器在架设在同一个机房,如果这个机房出故障,那就是整个副本集不能用了,所以最好配置在不同机房,这样起吗可以保证有一个机房的服务器在提供服务

9:解决的问题与产生的问题

对于上一篇文章:mongodb系列之--mongodb 主从配置与说明

我们在文章的后面提出了三个问题的解决方案:

1).可以做读写分离,写在主节点,读取在从节点

2).副本集就是解决主从中的当主节点挂掉后,系统的继续运行问题.

3).用副本集代替主从,在副本集中设置一个仲裁节点,减少主节点的复制压力

副本集产生的新问题:

1):主节点的写的压力是否会过大

2):数据压力大到机器支撑不了的时候能否做到自动扩展

mongodb系列之---副本集配置与说明的更多相关文章

  1. 10.MongoDB系列之副本集组成

    1. 同步 复制是指多台服务器保持相同的数据副本.MongoDB通过保存操作日志(oplog)实现复制功能. oplog存在于主节点local数据库中的一个固定集合,包含了主节点执行的每一次写操作. ...

  2. 12.MongoDB系列之副本集管理

    1. 控制成员状态 1.1 把主节点变为从节点 rs.stepDown() 1.2 阻止选举 如果需要对主节点维护,不想期间其他从节点选举为主节点,则可以 rs.freeze(10000) 维护完成后 ...

  3. MongoDB副本集配置系列三:副本集的认证方式

    1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这 ...

  4. mongodb生产环境(副本集模式)集群搭建配置

    mongodb副本集模式由如下几部分组成: 1.路由实例mongos 2.配置实例configsvr 3.副本集集群replset(一主多从) tips: 1.以上实例都是mongod守护进程 2.以 ...

  5. [Database] MongoDB 副本集配置

    MongoDB 副本集配置 MongoDB复制是将数据同步在多个服务器的过程. 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. 复制还允许您从硬 ...

  6. 分布式文档存储数据库(MongoDB)副本集配置

    副本集特征: N 个节点的集群 任何节点可作为主节点 所有写入操作都在主节点上 自动故障转移 自动恢复 相关文章: http://www.cnblogs.com/huangxincheng/archi ...

  7. MongoDB 副本集配置,开启账号认证

    MongoDB 自带功能强大的主从,配置也很简单,从零开始花了30分钟搞定 3台以上机器IP: 192.168.1.24, 192.168.1.25, 192.168.1.26, 192.168.1. ...

  8. Mongodb 笔记06 副本集的组成、从应用程序连接副本集、管理

    副本集的组成 1. 同步:MongoDB的复制功能是使用操作日志oplog实现的,操作日志包含了主节点的每一次写操作.oplog是主节点的local数据库中的一个固定集合.备份节点通过查询整个集合就可 ...

  9. Mongodb 笔记06 副本集的组成、从应用程序连接副本集、管理

    副本集的组成 1. 同步:MongoDB的复制功能是使用操作日志oplog实现的,操作日志包含了主节点的每一次写操作.oplog是主节点的local数据库中的一个固定集合.备份节点通过查询整个集合就可 ...

随机推荐

  1. Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/52088039 最近在移植一个 JNI 项目, 比较纠结, A ...

  2. 2016年年终CSDN博客总结

    2015年12月1日,结束了4个月的尚观嵌入式培训生涯,经过了几轮重重面试,最终来到了伟易达集团.经过了长达3个月的试用期,正式成为了伟易达集团的助理工程师. 回顾一年来的学习,工作,生活.各种酸甜苦 ...

  3. 基于BaseAdapter的Listview小Demo

    ListView是android开发中比较常用的控件, 其中适配器模式可以选择: ArrayAdapter:简单易用,通常用于将数组或者List集合的读个包值封装成多个列表项 SimpleAdapte ...

  4. [lua]写个简单的Lua拓展-sleep函数

    这几天在做一个小项目,其中用到了一些基本的API, 例如sleep,获取当前目录等等,lua标准库中没有提供这些接口,虽然所第三方库中也都有实现,但是要用的就那么几个函数,在一个嵌入式系统中安装那么多 ...

  5. [安全]Back_Track_5 vm 版安装和使用

    下载安装 下载使用国内的镜像  http://mirrors.ustc.edu.cn/kali-images/kali-1.0.9/ 我这里是vm9.0 下载之后解压,然后打开vm,然后 文件--&g ...

  6. ORACLE数据库学习之备份与恢复

     oracle数据库的备份与恢复 第一部分:数据库的备份 备份的必要性 因为各种人为或外界的因素可能会造成数据库中灾难性的数据丢失,为了保证数据库中数据的安全,必须采取备份措施保证RDBMS中包含 ...

  7. J2EE进阶(十三)Spring MVC常用的那些注解

    Spring MVC常用的那些注解 前言 Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam,@ModelAttribute等等这样 ...

  8. Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法

    正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用于一些特定的符号来表示一些代码操作,这样就简化书写,主要是学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作. 弊端:符号定义 ...

  9. ROS_Kinetic_22 使用ROS的qt插件即ros_qtc_plugin实现Hi ROS!!!!

    官网已经更新了教程说明,在此特别说明: https://github.com/ros-industrial/ros_qtc_plugin/wiki This wiki explains the pro ...

  10. (一〇一)集成静态库RHAddressBook实现OC访问通讯录

    使用官方的AddressBook框架仅能使用C语言访问通讯录,十分不便,这里介绍集成第三方框架RHAddressBook的方法,该框架可以通过OC访问和操作通讯录. 该框架是一个静态库,集成比较复杂. ...