MongoDB的 复制(副本集)

1. 概念

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

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

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

复制集的概念

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

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

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

复制集是一个集群,它是2台及2台以上的服务器组成,以及复制集成员包括数据节点和投票节点

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

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

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

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

2. 原因

  • 保障数据的安全性
  • 数据高可用性 (24*7)
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据

2. 副本集和主从复制的区别是什么?

副本集就是有自动故障恢复功能的主从集群,由一个primary节点和一个或多个secondary节点组成。主从集群和副本集最为明显的区别就是副本集没有固定的主节点:整个集群会选举出一个主节点,当其不能工作时,则变更到其它节点。
副本集总会有一个活跃节点和一个或多个备份节点。

 

主从复制是可用于备份,故障恢复和读扩展等。基本就是搭建一个主节点和一个或多个从节点,在数据库集群中要明确的知道谁是主服务器,主服务器只有一台。从服务器要知道自己的数据源也就是对应的主服务是谁。

4. 主从复制和副本集区别

主从集群和副本集最大的区别就是副本集没有固定的“主节点”;整个集群会选出一个“主节点”,当其挂 掉后,又在剩下的从节点中选中其他节点为“主节点”,副本集总有一个活跃点(主、primary)和一个或多 个备份节点(从、secondary)。

 

3. 原理

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

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

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

关于仲裁者的额外说明:

您可以将额外的mongod实例添加到副本集作为仲裁者。 仲裁者不维护数据集。 仲裁者的目的是通过 响应其他副本集成员的心跳和选举请求来维护副本集中的仲裁。 因为它们不存储数据集,所以仲裁器可 以是提供副本集仲裁功能的好方法,其资源成本比具有数据集的全功能副本集成员更便宜。

如果您的副本集具有偶数个成员,请添加仲裁者以获得主要选举中的“大多数”投票。 仲裁者不需要专用 硬件。

仲裁者将永远是仲裁者,而主要人员可能会退出并成为次要人员,而次要人员可能成为选举期间的主要 人员。

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

3. 如何配置MongoDB副本集?

实验步骤

1. 新建三个角色的mongodb,主节点27017,从节点27018,仲裁者27019
【主要配置三个mongodb.conf,分别启动】
2. 设置主节点,添加从节点和仲裁者
3. 测试:主节点,在test_db数据中写入user集合,{name:“cjy”}
从节点,切换test_db数据,可以查到主节点写入的user集合及{name:“cjy”}

副本集的创建

第一步:创建主节点

建立存放数据和日志的目录

#主节点

mkdir -p /mongodb/replica_sets/myrs_27017/log \ &

mkdir -p /mongodb/replica_sets/myrs_27017/data/db

新建或修改配置文件:

vi /mongodb/replica_sets/myrs_27017/mongod.conf

myrs_27017:【注意,跟我们yaml格式一致,】

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  注意ip必须存在否启动不了mongoDB
 
bindIp: localhost,xxx.xxx.xx
 
#bindIp
  #
绑定的端口
 
port: 27017
replication:
 
#副本集的名称
 
replSetName: myrs

启动节点服务:

mongod -f /mongodb/replica_sets/myrs_27017/mongod.conf

第二步:创建副本节点

建立存放数据和日志的目录

#-----------myrs

#副本节点

mkdir -p /mongodb/replica_sets/myrs_27018/log \ &

mkdir -p /mongodb/replica_sets/myrs_27018/data/db

新建或修改配置文件:

vi /mongodb/replica_sets/myrs_27018/mongod.conf

myrs_27018:

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  注意ip必须存在否启动不了mongoDB
 
bindIp: localhost,xxx.xxx.xxx
 
#bindIp
  #
绑定的端口
 
port: 27018
replication:
 
#副本集的名称
 
replSetName: myrs

启动节点服务:

mongod -f /mongodb/replica_sets/myrs_27018/mongod.conf

第三步:创建仲裁节点

建立存放数据和日志的目录

#-----------myrs

#仲裁节点

mkdir -p /mongodb/replica_sets/myrs_27019/log \ &

mkdir -p /mongodb/replica_sets/myrs_27019/data/db

新建或修改配置文件:

vi /mongodb/replica_sets/myrs_27019/mongod.conf

myrs_27019:

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  注意ip必须存在否启动不了mongoDB
 
bindIp: localhost,xxx.xxx.xxx
 
#bindIp
  #
绑定的端口
 
port: 27019
replication:
 
#副本集的名称
 
replSetName: myrs

启动节点服务:

mongod -f /mongodb/replica_sets/myrs_27019/mongod.conf

第四步:初始化配置副本集和主节点

使用客户端命令连接任意一个节点,但这里尽量要连接主节点(27017节点):

mongo

使用默认的配置来初始化副本集:rs.initiate()

查看副本集的配置内容

rs.conf

第六步:查看副本集状态

rs.status()

第七步:添加副本从节点

在主节点添加从节点,将其他成员加入到副本集

语法:

rs.add(host, arbiterOnly)

第八步:添加仲裁从节点

在主节点添加从节点,将其他成员加入到副本集

rs.addArb(host,arbiterOnly)

7. 副本集的数据读写操作

目的:了解默认情况下,从节点没有读写权限(需要运行rs.slaveOk()赋予权限)

主节点:

 

赋予读权限(主节点负责写,从节点负责读,取消权限slaveOk(false))

rs.slaveOk()

仲裁者节点,不存放任何业务数据,只存放副本集配置等数据

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值