zoukankan      html  css  js  c++  java
  • Mongo的Replica Sets (复制集)的配置全过程和心得体会

    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()命令实现从库的可以查询的目的。在利用副本集时最好不要设置用户名和密码,因为这样会影响效率的,权限系统,非常耗资源,需要大量的运算。

  • 相关阅读:
    【重点】Java大厂面试10个知识点汇总
    TEC-2机微程序设计
    Component 'TABCTL32.OCX'错误的处理方法
    Azure DevOps的使用入门
    Mac + VMware Fusion + Windows 11尝鲜
    Golang接口类型-下篇
    Golang接口类型-上篇
    基于Python实现原生的登录验证码
    一套帮助你理解C语言的测试题(转)
    KMP算法详解
  • 原文地址:https://www.cnblogs.com/seasonzone/p/3791240.html
Copyright © 2011-2022 走看看