美文网首页
MongoDB主从复制

MongoDB主从复制

作者: 攻城老狮 | 来源:发表于2021-01-13 09:00 被阅读0次

    一 三种角色

    • 主要成员(Primary):主要接收所有写操作。就是主节点。
    • 副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型。
    • 仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型。

    注:如果副本+主节点的个数是偶数,建议加一个仲裁者,形成奇数,容易满足大多数的投票。 如果副本+主节点的个数是奇数,可以不加仲裁者。

    image-20210113081804556.png

    二 副本集构建

    1主1从1仲裁

    2.1 创建主节点

    1. 建立数据和日志存储目录
    #主节点
    mkdir -p /mongodb/replica_sets/myrs_27017/log
    mkdir -p /mongodb/replica_sets/myrs_27017/data/db
    
    1. 添加配置文件
    vim /mongodb/replica_sets/myrs_27017/mongod.conf
    
    systemLog:
        #MongoDB发送所有日志输出的目标指定为文件
        destination: file
        #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
        path: "/mongodb/replica_sets/myrs_27017/log/mongod.log"
        #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
        logAppend: true
    storage:
        #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
        dbPath: "/mongodb/replica_sets/myrs_27017/data/db"
        journal:
            #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
            enabled: true
    processManagement:
        #启用在后台运行mongos或mongod进程的守护进程模式。
        fork: true
        #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
        pidFilePath: "/mongodb/replica_sets/myrs_27017/log/mongod.pid"
    net:
        #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
        #bindIpAll: true
        #服务实例绑定的IP
        bindIp: localhost,192.168.44.142
        #bindIp
        #绑定的端口
        port: 27017
    replication:
        #副本集的名称
        replSetName: myrs
    
    1. 启动主节点服务
    /usr/local/mongodb/bin/mongod -f /mongodb/replica_sets/myrs_27017/mongod.conf
    

    2.2 创建副本节点

    1. 建立数据和日志存储目录
    #副本节点
    mkdir -p /mongodb/replica_sets/myrs_27018/log
    mkdir -p /mongodb/replica_sets/myrs_27018/data/db
    
    1. 添加配置文件
    vim /mongodb/replica_sets/myrs_27018/mongod.conf
    
    systemLog:
        #MongoDB发送所有日志输出的目标指定为文件
        destination: file
        #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
        path: "/mongodb/replica_sets/myrs_27018/log/mongod.log"
        #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
        logAppend: true
    storage:
        #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
        dbPath: "/mongodb/replica_sets/myrs_27018/data/db"
        journal:
            #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
            enabled: true
    processManagement:
        #启用在后台运行mongos或mongod进程的守护进程模式。
        fork: true
        #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
        pidFilePath: "/mongodb/replica_sets/myrs_27018/log/mongod.pid"
    net:
        #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
        #bindIpAll: true
        #服务实例绑定的IP
        bindIp: localhost,192.168.44.142
        #bindIp
        #绑定的端口
        port: 27018
    replication:
        #副本集的名称
        replSetName: myrs
    
    1. 启动主节点服务
    /usr/local/mongodb/bin/mongod -f /mongodb/replica_sets/myrs_27018/mongod.conf
    

    2.3 创建仲裁节点

    1. 建立数据和日志存储目录
    #仲裁节点
    mkdir -p /mongodb/replica_sets/myrs_27019/log
    mkdir -p /mongodb/replica_sets/myrs_27019/data/db
    
    1. 添加配置文件
    vim /mongodb/replica_sets/myrs_27019/mongod.conf
    
    systemLog:
        #MongoDB发送所有日志输出的目标指定为文件
        destination: file
        #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
        path: "/mongodb/replica_sets/myrs_27019/log/mongod.log"
        #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
        logAppend: true
    storage:
        #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
        dbPath: "/mongodb/replica_sets/myrs_27019/data/db"
        journal:
            #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
            enabled: true
    processManagement:
        #启用在后台运行mongos或mongod进程的守护进程模式。
        fork: true
        #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
        pidFilePath: "/mongodb/replica_sets/myrs_27019/log/mongod.pid"
    net:
        #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
        #bindIpAll: true
        #服务实例绑定的IP
        bindIp: localhost,192.168.44.142
        #bindIp
        #绑定的端口
        port: 27019
    replication:
        #副本集的名称
        replSetName: myrs
    
    1. 启动主节点服务
    /usr/local/mongodb/bin/mongod -f /mongodb/replica_sets/myrs_27019/mongod.conf
    

    2.4 初始化配置副本集和主节点

    1. 使用客户端连接主节点27017
    /usr/local/mongodb/bin/mongo --host=192.168.44.142 --port=27017
    
    1. 初始化副本集
    # 不初始化无法使用相关命令 如:show dbs
    rs.initiate()
    
    1. 查看副本集的默认节点配置
    rs.conf()
    

    2.5 查看并添加副本从节点和仲裁节点

    1. 查看副本集状态
    rs.status()
    
    1. 添加从节点
    rs.add("192.168.44.142:27018")
    
    1. 添加仲裁节点
    rs.addArb("192.168.44.142:27019")
    
    # 查看此时的副本集状态
    rs.status()
    

    三 副本集的数据读写操作

    1. 登录主节点27017,写入和读取数据
    /usr/local/mongodb/bin/mongo --host=192.168.44.142 --port=27017
    
    myrs:PRIMARY> use articledb
    switched to db articledb
    myrs:PRIMARY> db
    articledb
    myrs:PRIMARY> db.comment.insert({"articleid":"100000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date()})
    WriteResult({ "nInserted" : 1 })
    myrs:PRIMARY> db.comment.find()
    { "_id" : ObjectId("5ffe419c3b3f5cc5af83f476"), "articleid" : "100000", "content" : "今天天气真好,阳光明媚", "userid" : "1001", "nickname" : "Rose", "createdatetime" : ISODate("2021-01-13T00:41:00.713Z") }
    
    1. 登录从节点27018
    /usr/local/mongodb/bin/mongo --host=192.168.44.142 --port=27018
    
    # 不能读取集合的数据。当前从节点只是一个备份,不是奴隶节点,无法读取数据,写当然更不行
    # show dbs 报错
    
    # 设置为奴隶节点,允许在从成员上运行读的操作,但无法写
    myrs:SECONDARY> rs.slaveOk()
    myrs:SECONDARY> show dbs
    admin      0.000GB
    articledb  0.000GB
    config     0.000GB
    local      0.000GB
    myrs:SECONDARY> use articledb
    switched to db articledb
    myrs:SECONDARY> show collections
    comment
    myrs:SECONDARY> db.comment.find()
    { "_id" : ObjectId("5ffe419c3b3f5cc5af83f476"), "articleid" : "100000", "content" : "今天天气真好,阳光明媚", "userid" : "1001", "nickname" : "Rose", "createdatetime" : ISODate("2021-01-13T00:41:00.713Z") }
    
    # 要取消作为奴隶节点的读权限
    myrs:SECONDARY> rs.slaveOk(false)
    
    1. 仲裁者节点,不存放任何业务数据
    /usr/local/mongodb/bin/mongo --host=192.168.44.142 --port=27019
    
    myrs:ARBITER> rs.slaveOk()
    myrs:ARBITER> show dbs
    local  0.000GB
    myrs:ARBITER> use local
    switched to db local
    myrs:ARBITER> show collections
    replset.minvalid
    replset.oplogTruncateAfterPoint
    startup_log
    system.replset
    system.rollback.id
    

    相关文章

      网友评论

          本文标题:MongoDB主从复制

          本文链接:https://www.haomeiwen.com/subject/iizyaktx.html