美文网首页
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副本集

    MongoDB有主从复制和副本集两种复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集则解决了...

  • mongodb复制集群

    Mongodb的复制功能: Mongodb的复制架构: Mongo的数据同步类型: 主从复制选项: 选举机制: m...

  • 数据库学习目录

    MySQL 备份 MySQL 主从复制 MySQL 读写分离 MySQL 慢查询日志 Redis MongoDB

  • MongoDB主从复制

    主从复制: 数据库同步备份的集群技术 ´原理:具备两个或多个服务器,一个为主节点,负责处理客户端请求,其余从节点用...

  • MongoDB主从复制

    一 三种角色 主要成员(Primary):主要接收所有写操作。就是主节点。 副本成员(Replicate):从主节...

  • mongodb性能问题诊断与优化

    mongodb目前在业界的使用一般可分为两种架构:主从复制集和分片复制集集群。 因为分片复制集包含了主从复制集的功...

  • 2018-08-10mongodb聚合+group管道

    总论:高级操作 讲解关于mongodb的高级操作,包括聚合、主从复制、分片、备份与恢复、MR 完成python与m...

  • MongoDB集群之复制集,分片

    1 集群 1.1 简介 MongoDB 有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(...

  • mongoDB实现主从复制

    主从复制是MongoDB最常用的复制方式。这种方式非常灵活,可用于备份、故障恢复、读扩展等。 最基本的设置方式就是...

  • MongoDB副本集

    MongoDB的复制主要分2种,一种是Master-Salve(主从复制),一种是副本集(replica sets...

网友评论

      本文标题:MongoDB主从复制

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