MongoDB之复制(副本集)

MongoDB 复制(副本集)

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

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

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

什么是复制?

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

MongoDB复制原理

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

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

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

MongoDB复制结构图如下所示:

以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。

副本集特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

实例

设置复制节点

接下来的操作需要打开多个终端窗口,而且可能会连接多台ubuntu主机,会显得有些乱,建议在xshell中实现

  • step1:创建数据库目录t1、t2

在Desktop目录下演示,其它目录也可以,注意权限即可

mkdir t1
mkdir t2
  • step2:使用如下格式启动mongod,注意replSet的名称是一致的
mongod --bind_ip 192.168.196.128 --port 27017 --dbpath ~/Desktop/t1 --replSet rs0
mongod --bind_ip 192.168.196.128 --port 27018 --dbpath ~/Desktop/t2 --replSet rs0
  • step3:连接主服务器,此处设置192.168.196.128:27017为主服务器
mongo --host 192.168.196.128 --port 27017
  • step4:初始化
rs.initiate()

初始化完成后,提示符如下图:

  • step5:查看当前状态

rs.status()

当前状态如下图:

 

  • step6:添加复本集
rs.add('192.168.196.128:27018')
  • step7:复本集添加成功后,当前状态如下图:

  • step8:连接第二个mongo服务
mongo --host 192.168.196.128 --port 27018

连接成功后,提示符如下图:

  • step9:向主服务器中插入数据
use test1
for(i=0;i<10;i++){db.t1.insert({_id:i})}
db.t1.find()
  • step10:在从服务器中插查询

说明:如果在从服务器上进行读操作,需要设置rs.slaveOk()

rs.slaveOk()
db.t1.find()
  • 其它说明--删除从节点
rs.remove('192.168.196.128:27018')

关闭主服务器后,再重新启动,会发现原来的从服务器变为了从服务器,新启动的服务器(原来的从服务器)变为了从服务器

发布了430 篇原创文章 · 获赞 364 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/lixinkuan328/article/details/104271972