http://blog.csdn.net/bloggongchang/article/details/7272403

一、MongoDB Replica Sets(副本集)简单的说就是有自动故障恢复功能的主从集群,主从集群和副本集的最为明显的区别是副本集没有固定的"主节点":整个集群会选举出来一个"主节点"当其不能正常工作时则变更到其他的节点,提高了系统的稳定性。

MongoDB Replica Sets的架构如图所示:

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

二、MongoDB Replica Sets的配置步骤:

1:首先要做是启动三个节点

介绍一下涉及到的参数

--oplogSize 日志操作文件的大

--dbpath   数据文件路径

--logpath  日志文件路径

--port        端口号,默认是27017.我这里使用的也是这个端口号.

--replSet   复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字,这里是test.

--replSet test/  这个后面跟的是其他standard节点的ip和端口

--maxConns   最大连接数

--fork       后台运行

--logappend   日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

--keyFile       标识同一集群的认证私钥

其中在启动节点时一定要加上oplogSize 的参数 为其设置大小,不然在64位操作系统上的mongodb,oplogs都相当大-可能是5%的磁盘空间,要根据情况设置个合理的值。

2:启动三个节点

启动第一个节点:/usr/local/mongodb/bin/mongod --port 28010 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r0/ --logpath=/sdb1/liujijun/data/log/r0.log --replSet rs1/127.0.0.1:28011,127.0.0.1:28012 --maxConns 800 --fork --logappend

启动第二个节点: /usr/local/mongodb/bin/mongod --port 28012 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r2/ --logpath=/sdb1/liujijun/data/log/r2.log --replSet rs1/127.0.0.1:28010,127.0.0.1:28011 --maxConns 800 --fork --logappend

启动第三个节点:/usr/local/mongodb/bin/mongod --port 28011 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r1/ --logpath=/sdb1/liujijun/data/log/r1.log --replSet rs1/127.0.0.1:28010,127.0.0.1:28012 --maxConns 800 --fork --logappend

3:链接任选一个节点

# /usr/local/mongodb/bin/mongo --port 28010

> config={_id : 'rs1',members : [{_id : 0, host : 'localhost:28010'},{_id : 1, host : 'localhost:28011'},{_id : 2, host : 'localhost:28012'}]}//配置节点信息
{
        "_id" : "rs1",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "localhost:28010"
                },
                {
                        "_id" : 1,
                        "host" : "localhost:28011"
                },
                {
                        "_id" : 2,
                        "host" : "localhost:28012"
                }
        ]
}

> rs.initiate(config)//这个过程可能要等个一到两分钟的时间。
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}
> rs.status()
{
        "set" : "rs1",
        "date" : ISODate("2012-02-19T06:01:34Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "localhost:28010",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "optime" : {
                                "t" : 1329630925000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2012-02-19T05:55:25Z"),
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "localhost:28011",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 367,
                        "optime" : {
                                "t" : 1329630925000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2012-02-19T05:55:25Z"),
                        "lastHeartbeat" : ISODate("2012-02-19T06:01:33Z"),
                        "pingMs" : 0
                },
                {
                        "_id" : 2,
                        "name" : "localhost:28012",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 367,
                        "optime" : {
                                "t" : 1329630925000,
                                "i" : 1
                        },
                        "optimeDate" : ISODate("2012-02-19T05:55:25Z"),
                        "lastHeartbeat" : ISODate("2012-02-19T06:01:33Z"),
                        "pingMs" : 0
                }
        ],
        "ok" : 1
}
PRIMARY>

配置到此结束。

备注:

如果要读写分离的话:db.getMongo().setSlaveOk()命令实现从库的可以查询的目的。在利用副本集时最好不要设置用户名和密码,因为这样会影响效率的,权限系统,非常耗资源,需要大量的运算。

Mongo的Replica Sets (复制集)的配置全过程和心得体会的更多相关文章

  1. 部署Replica Sets及查看相关配置

    MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只有一台是用于写操作.正是由于这个情况,为MongoDB 提供了数据一致性的保障.担当Primary 角色的机器能把 ...

  2. 单机Mongo复制集安装配置(数据库版本:4.x)

      官方文档: https://docs.mongodb.com/manual/tutorial/deploy-replica-set-with-keyfile-access-control/#dep ...

  3. 第39章:MongoDB-集群--Replica Sets(副本集)---副本集基本原理

    ①操作日志oplog Oplog是主节点的local数据库中的一个固定集合,按顺序记录了主节点的每一次写操作,MongoDB的复制功能是使用oplog来实现的,备份节点通过查询这个集合就可以知道需要进 ...

  4. MongoDB之Replica Set(复制集复制)

    MongoDB支持两种复制模式: 主从复制(Master/Slave) 复制集复制(Replica Set) 下面主要记录我在centos虚拟机上安装replica set,主要参考:http://d ...

  5. MongoDB for OPS 02:复制集 RS 配置

    写在前面的话 对于生产环境而言,除非是非常不重要的业务,且该业务允许我们出现一定时间的停机,我们一般才会使用单节点,且该单节点必须要有完善的备份手段. RS 复制集 我们这里采取一主两从的方式搭建复制 ...

  6. 第40章:MongoDB-集群--Replica Sets(副本集)---副本集的管理

    ①以单机模式启动成员 由于很多维护的工作需要写入操作,所以不合适在副本集中操作,可以以单机模式启动成员,也就是不要使用副本的选项,就跟以前启动单独的服务器一样.一般使用一个跟副本集配置中不一样的端口号 ...

  7. Mariadb之半同步复制集群配置

    首先我们来了解下在mariadb/mysql数据库主从复制集群中什么是同步,什么是异步,什么是半同步:所谓同步就是指主节点发生写操作事件,它不会立刻返回,而是等到从节点接收到主节点发送过来的写操作事件 ...

  8. Java应用服务器之tomcat会话复制集群配置

    会话是识别用户,跟踪用户访问行为的一个手段,通过cookie(存在客户端)或session(存在服务端)来判断本次请求是那个客户端发送过来:常用的会话保持有绑定会话,就是前边我们聊的在代理上通过算法或 ...

  9. 第38章:MongoDB-集群--Replica Sets(副本集)---多机的搭建

    ①机器环境 182.48.115.236    master-node(主节点) 182.48.115.237    slave-node1(从节点) 182.48.115.238    slave- ...

随机推荐

  1. 转-AFNetwork 作用和用法详解

    来自:http://www.maxiaoguo.com/clothes/269.html AFNetworking是一个轻量级的iOS网络通信类库.它建立在NSURLConnection和NSOper ...

  2. jmeter(十七)逻辑控制器

    JMeter中的Logic Controller用于为Test Plan中的节点添加逻辑控制器. JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行过程中节点 ...

  3. Join方法,yield方法,线程的优先级

  4. 数据流和ByteArray

    问题:如何把一个long类型的数写进一个文件里 所以现在有DataInputStream和DataOutputStream 这两个是节点流 例子代码: import java.io.*; public ...

  5. 172 Factorial Trailing Zeroes 阶乘后的零

    给定一个整数 n,返回 n! 结果尾数中零的数量.注意: 你的解决方案应为对数时间复杂度. 详见:https://leetcode.com/problems/factorial-trailing-ze ...

  6. [转]linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)

    本文转自:http://www.cnblogs.com/jack-liang/archive/2011/03/22/1991554.html Group By/Having操作符 适用场景:分组数据, ...

  7. 动态生成li标签,并设置点击事件

    今天要解释的是如下界面              主要实现了: 1.模拟后台的json数据,动态生成li标签 2.导航栏的下划线 3.给li标签右边设置图片 4.动态生成的li标签,设置选中的li的点 ...

  8. vue组件、数据解析的实现思想猜想与实践

    Vue的全局组件,在注册后,可在全局范围内无限次使用,猜想是利用了闭包"可以保持形参"的特性,使初始化时的作用域得意保存,下面用原生js和部分jquery代码模拟了数据解析和组件渲 ...

  9. Linux下Eclipse连接小米手机真机调试

    以前用Ubuntu 12.04可以真机调试,连上手机就可以了,上次看pear os 好看于是下了个玩玩(界面风格像mac 买不起,仿得起),这次想开发安卓发现真机调试不了了...于是乎各种找资料,各种 ...

  10. 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常

    导出到Excel方法: <span style="color: rgb(0, 0, 255);">public</span> <span style= ...