zoukankan      html  css  js  c++  java
  • Mongodb副本集配置

    官方文档:点击这里 菜鸟教程:点击这里

    MongoDB复制是将数据同步在多个服务器过程

    复制提供了数据的冗余备份,并在多个服务器存储数据副本,提高了数据的可用性,并可以保证数据的安全性。

    复制还允许从硬件故障和服务器中恢复数据。

    什么是复制?

    • 保证数据的安全性

    • 数据可用性(24*7)

    • 灾难恢复

    • 无需停机维护(如备份,重建索引,压缩)

    • 分布式读取数据

    MongoDB复制原理

    mongodb的复制至少需要两个节点(这里准备三个)其中一个主节点,负责处理客户端请求,其余都是从节点,负责复制主节点的数据。

    mongodb各个节点常用的搭配方式为:一主一从,一主多从

    主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

    MongoDB复制结构图如下:

     架构规划:

    节点 数据目录 端口
    主节点 28017 /data/mongo_28017 :28017
    从节点 28018 /data/mongo_28018 :28018
    从节点 28019 /data/mongo_28019 :28019

    创建节点目录和数据目录

    su - mongo
    mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
    mkdir -p /opt/mongo_2801{7,8,9}/{conf,log,pid}
    mkdir -p /data/mongo_2801{7,8,9}

    创建配置文件

    cat >/opt/mongo_28017/conf/mongo_28017.conf <<EOF
    systemLog:
      destination: file   
      logAppend: true  
      path: /opt/mongo_28017/log/mongodb.log
    
    storage:
      journal:
        enabled: true
      dbPath: /data/mongo_28017
      directoryPerDB: true
      wiredTiger:
         engineConfig:
            cacheSizeGB: 0.5 
            directoryForIndexes: true
         collectionConfig:
            blockCompressor: zlib
         indexConfig:
            prefixCompression: true
    
    processManagement:
      fork: true
      pidFilePath: /opt/mongo_28017/pid/mongod.pid
    
    net:
      port: 28017
      bindIp: 127.0.0.1,10.0.0.51
    
    replication:
       oplogSizeMB: 1024 
       replSetName: dba
    EOF

    复制配置文件到其他节点

    cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28018/conf/mongo_28018.conf
    cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28019/conf/mongo_28019.conf

    替换端口号

    sed -i 's#28017#28018#g' /opt/mongo_28018/conf/mongo_28018.conf  
    sed -i 's#28017#28019#g' /opt/mongo_28019/conf/mongo_28019.conf

    启动所有节点

    mongod -f /opt/mongo_28017/conf/mongo_28017.conf
    mongod -f /opt/mongo_28018/conf/mongo_28018.conf
    mongod -f /opt/mongo_28019/conf/mongo_28019.conf

    初始化集群

    进入各个节点:

    # 添加主机名
    vim /etc/hosts
    10.0.0.51 db01
    
    mongo db01:28017
    mongo db01:28018
    mongo db01:28019

    改成变量起个别名,添加主从节点信息

    config = {
                _id : "dba", 
                members : [
                            {_id : 0, host : "db01:28017"},
                            {_id : 1, host : "db01:28018"},
                            {_id : 2, host : "db01:28019"},
                ]}
    rs.initiate(config)

    选举过程:

    插入数据

    db.inventory.insertMany( [
        { "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
        { "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
        { "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
        { "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
        { "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
    ]);

    副本节点登录查看数据

    rs.slaveOk()
    use test
    db.inventory.find()

    设置副本可读

    # 临时生效
    rs.slaveOk()
    
    # 写入启动文件
    echo "rs.slaveOk()" > ~/.mongorc.js
  • 相关阅读:
    关于mysql创建数据库中字符集和排序规则的选择
    关于springboot中数据库连接池报错:testWhileIdle is true, validationQuery not set
    微软不允许以maven的方式直接下载该文件 (com.microsoft.sqlserver:sqljdbc4:jar:4.0),记录一下解决方案
    关于 idea 添加 web项目非 maven
    关于 tomcat版本和jdk版本的问题
    关于 jquery中的 只读两种属性(readonly,disabled),
    layui中如何给 表单中的input标签动态赋值,怎么获取父页面中的值
    pl/sql developer F5快捷键
    SQL中的left outer join,inner join,right outer join用法
    Aix下使用rman备份Oracle RAC数据库
  • 原文地址:https://www.cnblogs.com/Mercury-linux/p/12741075.html
Copyright © 2011-2022 走看看