zoukankan      html  css  js  c++  java
  • mongodb学习之:主从复制

    sql server能够做到读写分离,双机热备份和集群部署,这些在mongodb也能做到。首先来看主从复制。我们就在一台电脑上进行操作

    第一步:分别建立masterslave两个文件夹

    第二步:开启主服务器:

    mongod --dbpath /home/zhf/master --port 27017 --master

    第三步:启动从服务器。这里制定一个从服务器的端口1001,在--source后面设置的是主服务器的地址和端口。注意这个端口要和开启主服务器上的一致。

    mongod --dbpath /home/zhf/slave --port 1001 --slave --source 127.0.0.1:27017

    slave上开启成功后后可以看到slave服务器上不断的有同步的操作,从时间上来看每秒就同步一次。

    登录主服务器插入一个文档。

    root@zhf-maple:/home/zhf/桌面# mongo --host 127.0.0.1 --port 27017

    MongoDB shell version v3.4.7

    connecting to: mongodb://127.0.0.1:27017/

    MongoDB server version: 3.4.7> show dbs;

    admin  0.000GB

    local  0.000GB

    > db.test.insert({'name':'zhanghongfeng'})

    WriteResult({ "nInserted" : 1 })

    > show dbs

    admin  0.000GB

    local  0.000GB

    test   0.000GB

    然后登录从服务器:

    root@zhf-maple:/home/zhf/桌面# mongo --host 127.0.0.1 --port 1001

    MongoDB shell version v3.4.7

    connecting to: mongodb://127.0.0.1:1001/

    MongoDB server version: 3.4.7

    > show dbs

    2018-01-08T21:34:46.525+0800 E QUERY    [thread1] Error: listDatabases failed:{

    "ok" : 0,

    "errmsg" : "not master and slaveOk=false",

    "code" : 13435,

    "codeName" : "NotMasterNoSlaveOk"

    } :

    _getErrorWithCode@src/mongo/shell/utils.js:25:13

    Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1

    shellHelper.show@src/mongo/shell/utils.js:769:19

    shellHelper@src/mongo/shell/utils.js:659:15

    @(shellhelp2):1:1

    但是在执行show dbs报了上面的错误。解决办法是执行下rs.slaveOk()就可以了

    > show dbs

    admin  0.000GB

    local  0.000GB

    test   0.000GB

    rs.slaveOk()是什么意思呢。下面是官网的描述。也就是允许去读slave服务器上的数据

    Provides a shorthand for the following operation:

    db.getMongo().setSlaveOk()
    This allows the current connection to allow read operations to run on secondary members. See the readPref() method for more fine-grained control over read preference in the mongo shell.

    此时在从服务器上执行查找可以看到在主服务器上插入的文档。

    > db.test.find()

    { "_id" : ObjectId("5a53729bd46947e70206ba40"), "name" : "zhanghongfeng" }

    主从复制还有些选项:

    --only: 在从节点上指定只复制特定某个数据库,默认是复制所有数据库

    --slavedelay:用在从节点上,当应用主节点的操作时增加延时,单位是秒。这样的好处是通过延缓执行操作,在用户有误操作的时候,有个恢复的时间差

    --fastsync:以主节点的数据快照为基础启动从节点。

    --autoresync: 如果主节点与从节点不同步了,则自动重新同步

    --oplogSize: 主节点oplog的大小。单位是MB。

    那么如果还想增加一台从服务器但是又不想在启动的时候就指定,而是后期指定该如何操作呢。

    在主从服务器中有一个local的数据库,在里面添加从服务器就可以了.操作步骤如下:

    >mongo 127.0.0.1:1002

    >use local

    >db.sources.insert({“host”:”127.0.0.1:27017”})

    操作完成后就可以发现数据也同步到了127.0.0.1:1002这个服务器上

  • 相关阅读:
    数据的艺术
    第十七篇 make的路径搜索综合实践
    第十六篇 make中的路径搜索
    第十五篇 make中的隐式规则概述
    第十四篇 自动生成依赖关系(终结)
    [SDOI2009]HH的项链解题报告
    欧几里德与扩展欧几里德算法的理解、实现与应用
    浅析强连通分量(Tarjan和kosaraju)
    deque-at
    plt.imshow()
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/8245176.html
Copyright © 2011-2022 走看看