• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MongoDB 复制(副本集)学习笔记
    POST TIME:2021-10-18 23:14

    本文实例讲述了MongoDB 复制(副本集)。分享给大家供大家参考,具体如下:

    replication set复制集,
    复制集,多台服务器维护相同的数据副本,提高服务器的可用性。
    MongoDB复制是将数据同步在多个服务器的过程。
    复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
    复制还允许您从硬件故障和服务中断中恢复数据。

    设置过程:

    (1)创建示例

    假设创建三台,创建三个实例目录和日志目录:
    mkdir /home/m17 /home/m18 /home/m19 /home/mlog
    启动三个示例,端口分别为27017、27018、27019。

    ./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=rs2 --smallfiles
    ./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=rs2 --smallfiles
    ./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=rs2 --smallfiles
    
    

    说明:

    参数--replSet设置一样,才能属于同一个复制集
    参数--smallfiles可以节省空间,提高速度。

    然后使用ps aux | grep mongo可以查看到启动起来的三个端口。

    (2)配置

    使用客户端连接mongo进行配置:

    [test@localhost bin]$ ./mongo
    
    

    要管理配置,所以切换到admin上:

    >use admin
    
    

    (配置是json格式)

    var rsconf = {
    _id:'rs2',
    members:[
    {"_id":0,host:'192.168.8.172:27017'},
    {_id:1,host:'192.168.8.172:27018'},
    {_id:2,host:'192.168.8.172:27019'}
    ]
    }
    
    

    如果没有配置ip,使用127.0.0.1

    var rsconf = {
    _id:'rs2',
    members:[
    {_id:0,host:'127.0.0.1:27017'},
    {_id:1,host:'127.0.0.1:27018'},
    {_id:2,host:'127.0.0.1:27019'}
    ]
    }
    
    

    执行后,使用 printjson(rsconf)查看刚才的配置。

    然后执行初始化:

    >rs.initiate(rsconf);
    > rs.initiate(rsconf);
    {
    "ok" : 1,
    "operationTime" : Timestamp(1539933041, 1),
    "$clusterTime" : {
    "clusterTime" : Timestamp(1539933041, 1),
    "signature" : {
    "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
    "keyId" : NumberLong(0)
    }
    }
    }
    rs2:SECONDARY>
    
    

    查看节点:

    rs.status()
    
    

    删除节点:

    rs.remove('127.0.0.1:27019')
    
    

    添加节点:

    rs.add('127.0.0.1:27019')
    
    

    切换节点:

    默认是在27017端口,即rs2:PRIMARY>状态,
    退出mongo客户端命令模式,
    切换到另一个端口:

    [test@localhost bin]$ ./mongo --port=27018,
    
    

    即切换到rs2:SECONDARY>状态。

    测试:

    在主服务上,创建库和集合,

    rs2:PRIMARY> use student
    switched to db student
    rs2:PRIMARY> db.user.insert({uid:1,name:'zhang san'})
    WriteResult({ "nInserted" : 1 })
    rs2:PRIMARY> db.user.find();
    { "_id" : ObjectId("5bc9889f85a0986431fd2499"), "uid" : 1, "name" : "zhang san" }
    
    

    去从服务上查看

    show dbs

    然后看到有错误,具体错误信息是:

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

    是因为slave默认不允许读写:

    >rs.slaveOk();
    
    

    然后就可以看到主服务器创建的库和集合了。

    同理27019也需要执行这个命令才能自动同步和读写。

    当主服务器27017停掉的时候,
    第二个27018就自动变成主服务器master状态。
    但是27019需要再次执行rs.slaveOk()才能自动同步读写。

    shell脚本:

    #!/bin/bash
    IP=127.0.0.1
    NA=rs2
    sudo mkdir -p /home/m17 /home/m18 /home/m19 /home/mlog
    sudo chmod -R 777 /home/m17 /home/m18 /home/m19 /home/mlog
    ./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=${NA} --smallfiles
    ./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=${NA} --smallfiles
    ./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=${NA} --smallfiles
    ./mongo EOF
    use admin
    var rsconf = {
    _id:'rs2',
    members:[
    {_id:0,host:'${IP}:27017'},
    {_id:1,host:'${IP}:27018'},
    {_id:2,host:'${IP}:27019'}
    ]
    }
    rs.initiate(rsconf)
    
    

    希望本文所述对大家MongoDB数据库程序设计有所帮助。

    您可能感兴趣的文章:
    • MongoDB的主从复制及副本集的replSet配置教程
    • Mongodb 副本集搭建问题总结及解决办法
    • Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍
    • mongodb3.4集群搭建实战之高可用的分片+副本集
    • 详解MongoDB中用sharding将副本集分配至服务器集群的方法
    • Mongodb副本集和分片示例详解
    • CentOS 6.4创建Mongodb副本集
    • MongoDB副本集丢失数据的测试实例教程
    • mongodb 4.0副本集搭建的全过程
    上一篇:mongodb数据库入门学习笔记之下载、安装、启动、连接操作解析
    下一篇:MongoDB实现问卷/考试设计功能
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信