zoukankan      html  css  js  c++  java
  • 第五部分 架构篇 简单

    第五部分 架构篇
    主从复制
    副本集


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

    MongoDB的主从集群分为两种:
    Master-Slave复制(主从)
    Replica Sets复制(副本集)

    Master-Slave复制(主从)
    只需要在某一个服务启动时加上-master参数,而另一个服务加上-slave与-source参数,即可实现同步,MongoDB是最新版本已经不推荐使用这种方法了

    加载主服务器
    mongod --master --dbpath=D:\MongoDB\data\ --logpath=../log.log --port 20001

    从服务器加载
    mongod --slave --source 127.0.0.1:20001 --dbpath=D:\MongoDB\data2\ --logpath=../log2.log --port 20002

    妈的,wind下开两个老是出错,疯了,看样式子不行啊

    Linux下面的实例:

    KillAll mongod

    启动一台
    ./mongod --master --dbpath=/usr/local/mongodb/data1/ --lo
    gpath=/usr/local/mongodb/dblog1 --fork --port 20001

    查看是否成功:
    netstat -tunpl | grep :20001


    启动从服务器
    ./mongod --slave --source 127.0.0.1:20001 --dbpath=/usr/local/mongodb/data2/ --logpath=/usr/local/mongodb/dblog2 --fork --port 20002

    测试成功!
    注意,从服务只能读的,不能进行写操作

    主服务器进行写跟修改操作
    从服务器用于读取操作
    ===记得如果备份的话要在从服务器上进行备分,在dump后面加上主机跟端口号就行了

    Replica Sets 复制(副本集)
    MongoDB在1.6版本开发了replica set,主要增加了帮障自动切换和自动修复成员节点各个DB之间数据完全一致,最为显示著的区另在于,副本集没有固定的主节点,它是整个集群选举出得一个主节点,当其不工作时变更其他节点强烈推荐使用

    部署Replica Sets
    启动两个实例:
    1: 创建数据文件存储路径
    mkdir usr/local/mongodb/data/data1
    mkdir usr/local/mongodb/data/data2

    2: 创建日志文件路径
    mkdir usr/local/mongodb/log/dblog1
    mkdir usr/local/mongodb/log/dblog2

    3 创建主从key文件用于标识集群的私钥的完整路径,如果各个实例的key_file内容不一致,程序将不能正常用
    mkdir /usr/local/mongodb/key
    cd /usr/local/mongodb/key/
    touch key1
    touch key2
    //导入一串密钥进去
    echo "123456" < key1;
    echo "123456" < kye2;
    把key1 key2设置为600
    chmod 600*


    4 启动二个实例
    [root@localhost bin]# ./mongod --replSet rsl --keyFile=/usr/local/mongodb/key/key1 --port 20001 --dbpath=/usr/local/mongodb/data/data1/ --logpath=/usr/local/m
    ongodb/log/dblog1 --fork
    启动第一台服务器
    --replSet rsl 指副本集的名称

    启动第二台
    [root@localhost bin]# ./mongod --replSet rsl --keyFile=/usr/local/mongodb/key/key2 --port 20002 --dbpath=/usr/local/mongodb/data/data2/ --logpath=/usr/local/mongodb/log/dblog2 --fork

    5 配置及初始化Replica Sets
    [root@localhost bin]# ./mongo --port 20001
    MongoDB shell version: 2.2.2
    connecting to: 127.0.0.1:20001/test
    //设置配置Replica文件
    > config_rsl={
    ... _id:"rsl",
    ... members:[
    ... {_id:0,host:"localhost:20001",priority:1},
    ... {_id:1,host:"localhost:20002",priority:2}
    ... ]
    ... };
    {
    "_id" : "rsl",
    "members" : [
    {
    "_id" : 0,
    "host" : "localhost:20001",
    "priority" : 1
    },
    {
    "_id" : 1,
    "host" : "localhost:20002",
    "priority" : 2 //值越大,级别越高
    }
    ]
    }


    初始化配置文件
    > rs.initiate(config_rsl);
    {
    "info" : "Config now saved locally. Should come online in about a minute.",
    "ok" : 1
    }


    6 查看复本集状态
    rs.status();
    rsl:PRIMARY> rs.status();
    {
    "set" : "rsl",
    "date" : ISODate("2013-01-12T14:41:55Z"),
    "myState" : 1,
    "members" : [
    {
    "_id" : 0,
    "name" : "localhost:20001",
    "health" : 1,
    "state" : 2,
    "stateStr" : "SECONDARY",
    "uptime" : 781,
    "optime" : Timestamp(1358001642000, 1),
    "optimeDate" : ISODate("2013-01-12T14:40:42Z"),
    "lastHeartbeat" : ISODate("2013-01-12T14:41:54Z"),
    "pingMs" : 0
    },
    {
    "_id" : 1,
    "name" : "localhost:20002",
    "health" : 1,
    "state" : 1,
    "stateStr" : "PRIMARY",
    "uptime" : 1196,
    "optime" : Timestamp(1358001642000, 1),
    "optimeDate" : ISODate("2013-01-12T14:40:42Z"),
    "self" : true
    }
    ],
    "ok" : 1
    }


    将在次登陆以后,会出现
    rsl:PRIMARY> 这样的提示

    主从操作日志oplog
    MongoDB的Replica Set架构是通过一个日志来存储写操作的,这个日志就叫做"oplog".
    oplog.rs是一个固定长度的capped collection.
    它存在于"local"数据库中,用于记录Replica Sets操作日志
    oplog的大小是可以通过mongod的参数--oplogSize来改变oplog的日志大小

    Oplog内容样例:
    字段说明:
    ts:某个操作的时间戳
    op: 操作类:如下
    i:insert d:delete u:update
    ns: 命名空间,也就是操作的collection name
    o:document的内容


    管理维护Replica Sets
    读写分离
    从库要是进行查询,分担主库的大量的查询请求
    1 先向主库中插入一条测试数据

    2 在从库进行查询等操作
    当查询报错了,说明这个从库且不能执行查询的操作

    3 让从库可以读,分担主库的压力
    执行db.getMongo().setSlaveOk().我们就可以查询从库了
    或rs.slaveOk();


    故障转移
    副本集比传统的Master-Slave有改进的地方就是它可以进行故障的自动转移,如果我们停掉复制集中的一个成员,那么剩余成员再自动选举一个成员,做为主库

  • 相关阅读:
    Educational Codeforces Round 61
    Codeforces Round #548 (Div. 2)
    Codeforces Round #553 (Div. 2)
    spring mvc接口跨域访问
    json解析;百度统计API返回data解析
    HTML img标签使用base64展示图片
    My Sql 查询连续天数数据
    js 获取url地址栏拼接参数
    在jsp页面获取绝对路径
    java web项目配置Tomcat访问项目外文件
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2858366.html
Copyright © 2011-2022 走看看