1、官方网址:https://docs.mongodb.org/manual/tutorial/deploy-replica-set-for-testing/

2、Replica Set介绍: https://docs.mongodb.org/manual/core/replica-set-members/

3、简单叙述一下什么是Replica Set:

  如果我们使用单一的Mongodb数据库,那么它会存在单点故障等问题,Mongodb允许我们将多个单一的Mongodb数据库组成一个(“集群Replica Set” )对外提供统一的服务。

  (“集群Replica Set” )存在如下特性:

  1:节点间数据自动同步(主从复制模式,与MYSQL的主从复制原理类似),保证节点间数据是一致的。

  2:节点间健康状态检查,故障自动切换,对客户端无影响。

  (“集群Replica Set” )当中的角色:

  1:主节点(primary)负责接收客户端的读写请求。

  2:副节点(secondary)自动从主节点复制数据,可以处理客户端的读请求(决不能处理客户端的写请求)。

  3:仲裁节点(arbiter)这里先不做解释,后面说明。

  (“集群Replica Set” )运行的过程:

  1:主节点(primary)将所有的操作记录到自己的日志当中去,副节点(secondary)会自动去主节点拷贝日志,然后将数据变化同步到自己的数据库中,从而保证数据的一致性。

  2:如果集群当中的主节点(primary)发生故障,那么余下可用的副节点(secondary)会自动选举出一个新的主节点,如下图。

  

  3:如果原来出现故障的主节点恢复可用,那么它会再次加入到集群当中,这时他会变成副节点(secondary),然后立即去当前的主节点同步数据,这样就又形成了一个新的集群,是不是很强大。

  

  仲裁节点 (arbiter)说明:

  1:仲裁节点(arbiter) 不会存储数据,它的作用是当集群中主节点出现故障时,由它来重新选举一个主节点,由于仲裁节点不存储数据,也不对外提供服务,所以可以运行在配置相对较低的服务器上。

  

  集群当中的成员限制:

  1:一个集群中最多有50个成员,也就是50个Mongodb数据库组成的集群。

  2:在这50个成员当中,只能有一个【主节点(primary)】,一个【仲裁节点(arbiter)】,七个【参与选举的副节点(secondary)】,余下的数量可以配置任意个【不参与投票的副节点】

  3:那些不参与选举的副节点,依然会保数据,对外提供相同的服务,只是不参与选举而已。

  

4、如何配置集群,此配置在一台机器上模拟集群,降低了一些参数的阀值,有条件的可以在多个机器上配置。

  1:创建3个文件夹,用来存放3个数据的数据文件。

  mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2

  2:分别启动3个数据库,端口分别为 27017 27018 27019

  mongod --port 27017 --dbpath /srv/mongodb/rs0-0 --replSet rs0 --smallfiles --oplogSize 128

  mongod --port 27018 --dbpath /srv/mongodb/rs0-1 --replSet rs0 --smallfiles --oplogSize 128

  mongod --port 27019 --dbpath /srv/mongodb/rs0-2 --replSet rs0 --smallfiles --oplogSize 128

  --dbpath 为数据库文件存放的目录, --replSet 指定集群的名字,节点间名字需要相同, --smallfiles 最低的资源要求(仅供测试)  --oplogSize 用来记录操作的日志的大小M

  3:进入到其中一个mongodb中。

  mongo --port 27017

  4:在mongo shell中定义一个变量,配置成员信息。

rsconf = {
_id: "rs0",
members: [
{
_id: 0,
host: "xxx.xxx.xxx.xxx:27017"
}
]
}

  rs.initiate( rsconf ) 初始化集群。

  5:加入其它节点,将IP替换为你的服务器外网IP。

  rs.add("IP:27018")

  rs.add("IP:27019")

  6:这时集群一个配置完了,你可以通过rs.status()来查看集群当中每个节点的状态了。

6、集群的配置已经完成,这时你可以在主节点上插入数据,然后在连接到副节点查看,看数据是不是立即同步过来了。

  

学习MongoDB(二) Replica Set集群配置的更多相关文章

  1. 学习MongoDB(Troubleshoot Replica Sets) 集群排除故障

    Test Connections Between all Members(集群中节点网络测试) 在进行Mongodb集群时,每个节点的网络都需要互动,假设有3个服务器节点. m1.example.ne ...

  2. MongoDB 学习笔记(三) MongoDB (replica set) 集群配置

    MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来.而无需停机操作 Mo ...

  3. 【kafka学习之二】Kafka集群搭建

    安装环境    jdk1.7 zookeeper-3.4.5(参考 https://www.cnblogs.com/cac2020/p/9426531.html) VM虚拟机redhat6.5-x64 ...

  4. 【Kubernetes学习之二】Kubernetes集群安装

    环境 centos 7 Kubernetes有三种安装方式:yum.二进制.kubeadm,这里演示kubeadm. 一.准备工作1.软件版本 软件 版本 kubernetes v1.15.3 Cen ...

  5. hadoop学习(二)hadoop集群的启动

    一.完全分布式集群环境的搭建 1.配置hosts文件:将三台集群服务器的主机名与IP的对应关系互相配置到对方的hosts文件中,以便对方服务器能通过主机名寻找IP,hosts文件在/etc目录下. 2 ...

  6. Redis学习笔记(二):Redis集群

    集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.   1.节点 一个节点就是一个运行在集群模式下的Redis服务器.启动Redis服务器时,通过判断cluster-enabl ...

  7. MongoDB高可用集群配置方案

    原文链接:https://www.jianshu.com/p/e7e70ca7c7e5 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非 ...

  8. MongoDB高可用集群配置的方案

    >>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...

  9. redis:集群配置

    一.redis集群相关 1.概念:redis集群是通过数据分区提供可用性的,这样即使一部分节点失效也可以继续处理请求. 2.原理:集群使用数据分片实现,一个redis集群包括16384个哈希槽,数据库 ...

随机推荐

  1. process credentials(一)

    一.介绍 当linux系统中的一个进程运行起来的时候,总是要访问系统的资源,访问文件或者向其他的进程发送信号.系统是否允许其进行这些操作?系统是根据什么来判断该进程的权限?这些问题是和进程信任状(pr ...

  2. Swift2.0语言教程之函数嵌套调用形式

    Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还能够调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其它函数:还 ...

  3. RxJava学习笔记(组合Observables)(转)

    组合Observable 当我们需要处理多个Observable的时候,我们可以通过Rxjava的组合函数来创建我们自己想要的Observable. Merge RxJava的 merge() 方法将 ...

  4. python 2 python3 共存

    步骤: 1.安装python3 并添加环境变量2.修改python3 目录下文件名:修改python.exe 为python3.exe, 修改pythonw.exe 为pythonw3.exe C:\ ...

  5. eclipse jdk版本设置

    1 Java Build Path(项目的编写环境配置): 在项目上单击右键,properties -> Java Build Path -> Libraries,选择JRE System ...

  6. django -- 对行的更新只有在save调用后才会入库

    python3 manage.py shell Python 3.6.2 (v3.6.2:5fd33b5926, Jul 16 2017, 20:11:06) [GCC 4.2.1 (Apple In ...

  7. Rational Rose 2003 下载及破解方法

    FROM:http://blog.csdn.net/fenglibing/archive/2007/08/17/1747693.aspx 这么好的东西,不拿来出分享,我对不起原作者呀.但是我这里不知道 ...

  8. Atitit nodejs5 nodejs6  nodejs 7.2.1  新特性attialx总结

    Atitit nodejs5 nodejs6  nodejs 7.2.1  新特性attialx总结 1.1. Node.js 4.0.0 已经发布了 .这是和 io.js 合并之后的首个稳定版本,它 ...

  9. HTML5学习笔记(十二):JavaScript新增Map和Set

    Map JavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对. 但是JavaScript的对象有个小问题,就是键必须是字符串.但实际上Nu ...

  10. 菜鸟译文(二)——使用Java泛型构造模板方法模式

    如果你发现你有很多重复的代码,你可能会考虑用模板方法消除容易出错的重复代码.这里有一个例子:下面的两个类,完成了几乎相同的功能: 实例化并初始化一个Reader来读取CSV文件: 读取每一行并解析: ...