mongodb主从复制_动力节点Java学院整理

MongoDB主从复制攻略

什么是MongoDB主从复制

MongoDB的复制机制是指将一台Primary节点的数据自动同步到一个或多个Secondary节点的过程,其中Primary节点是一个可写的节点,而Secondary节点只有在Primary节点宕机或者其他情况下才会变成可写节点。

主从复制原理

MongoDB的主从复制是通过Oplog来实现的,Oplog是一种特殊的集合,用来记录所有的更新操作。其原理为:在Master节点上产生了一个新的数据集合或者更新了一个数据,它会先在Master节点的数据文件中进行处理,然后再把这个数据写入到Oplog中。而Slave节点会不断的从Master节点的Oplog中读取新写入的数据,并在自己的机器上执行同样的操作,从而达到数据的同步。

主从复制配置

步骤一:创建Keyfile

在Master和Slave节点上都需创建Keyfile,用来进行节点的身份验证。

$ umask 077
$ echo '<YourPrivateKey>' > /opt/mongo/mongodb-keyfile
# YourPrivateKey:自定义的私有key,不能包含多余字符,长度不少于6。

注意:File Permissions必须为400:

$ chmod 400 /opt/mongo/mongodb-keyfile

步骤二:指定Replication Set

在Master节点的MongoDB配置文件mongod.conf中指定replication.replSetName

replication:
   replSetName: rs0

步骤三:启动MongoDB

在Master和Slave节点上启动MongoDB。

步骤四:初始化副本集

在Master节点上:

$ mongo --eval "rs.initiate()"

初始化命令可以自动完成其他节点的加入。

步骤五:添加Secondary

在Master节点上使用以下命令添加Secondary节点:

$ mongo --eval "rs.add('192.168.0.150:27017')"

其中192.168.0.150:27017为Slave节点的信息。

备份与恢复数据

主从复制架构可以实现数据的自动备份,在Slave节点上可以随时切断与Master节点的连接,从而进行数据备份。

在Slave节点上使用mongodump进行数据备份:

$ mongodump --host 192.168.0.140 --port 27017 --out /backup/mongodb/

其中192.168.0.140:27017为Master节点信息,/backup/mongodb/为备份数据存储路径。

在恢复数据时,可以在Slave节点上先停止MongoDB的服务,然后使用mongorestore进行数据恢复:

$ mongorestore --host 192.168.0.150 --port 27017 /backup/mongodb/

其中192.168.0.150:27017为Slave节点信息,/backup/mongodb/为备份数据存储路径。

注意事项

  • 在配置每个节点的mongod.conf文件时,需要将bindIp指定为本机的ip地址,如:

net:
bindIp: 192.168.0.140
port: 27017

  • 存放Oplog数据的目录不能使用NFS挂载,需要在每个节点上均创建本地目录,并确保每个节点的配置文件中都配置正确。

示例一:新建集合

在Master节点新建集合test:

$ mongo
> use test
> db.createCollection("user")
> db.user.insert({name:'Lucy',age:'18'})

在Slave节点上验证:

$ mongo
> use test
> db.user.find()
{ "_id" : ObjectId("57cd36d40dae2a46fd1bd53e"), "name" : "Lucy", "age" : "18" }

示例二:删除数据

在Slave节点中删除数据:

> use test
> db.user.remove({name:'Lucy'})

在Master节点中验证:

> use test
> db.user.find()

参考链接

MongoDB最新文档

《MongoDB权威指南》第二版

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mongodb主从复制_动力节点Java学院整理 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MySQL中创建表的三种方法汇总

    我们来详细讲解一下“MySQL中创建表的三种方法汇总”的完整攻略。 什么是创建表 在MySQL中,创建表是指通过SQL语句来创建数据库表格的过程,通常包括定义表名、列名、数据类型、键等内容。 MySQL中创建表的三种方法 MySQL中创建表的三种方法分别是:使用CREATE TABLE语句、使用MySQL Workbench、使用phpMyAdmin。下面分…

    database 2023年5月22日
    00
  • SQL Server系统函数介绍

    SQL Server系统函数介绍 SQL Server系统函数是SQL Server数据库管理系统提供的一系列内置函数,它们可以用来处理各种数据类型,执行各种数学和字符串计算等操作。本文将介绍一些常用的SQL Server系统函数。 数据类型转换函数 CAST CAST函数可以将某种数据类型转换为另一种数据类型。例如,我们可以将一个字符串转换为整数: SEL…

    database 2023年5月21日
    00
  • Linux中/var/spool/postfix/maildrop占空间很大的原因解析

    下面是关于“Linux中/var/spool/postfix/maildrop占空间很大的原因解析”的完整攻略。 问题现象描述 在 Linux 系统中,/var/spool/postfix/maildrop 的空间占用很大,而且邮件数量并不多,这是什么原因呢?本文将给出相关解析。 分析原因 /var/spool/postfix/maildrop 是 Post…

    database 2023年5月22日
    00
  • MySQL函数详解

    MySQL函数是一种可以被调用的特定代码段,它可以接收输入参数并返回处理结果。MySQL中包含了多种内置函数,这些函数可以被用于各种不同的场景,例如计算、格式化、比较等。下面是MySQL函数的种类以及作用和使用范围的详细介绍: 数学函数 MySQL中内置了多种用于数学计算的函数,例如ABS、CEILING、FLOOR、ROUND、TRUNCATE等。这些函数…

    MySQL 2023年3月9日
    00
  • SQLserver2008使用表达式递归查询

    下面是“SQL server 2008使用表达式递归查询”的完整攻略。 什么是表达式递归查询 表达式递归查询是一种使用递归方式查询数据的方法。它与常规递归的不同之处在于它使用了SQL Server的WITH语句,这使得它更容易理解而且性能更好。在这种类型的查询中,一个查询使用自身的输出来生成下一个查询的输入,这样就可以逐步构造出一个结果集。 使用表达式递归查…

    database 2023年5月21日
    00
  • 彻底杀掉redis挖矿程序及其守护进程wnTKYg

    今天又遇到了一件烦心的事,前几天刚解决服务器内存跑满的问题,今天又碰到了神奇而又久违的redis挖矿程序。 查询了一下挖矿,就是有人借助redis漏洞借用别人的服务器进行挖矿。 上次做电子商城项目时,开发过程中环境用的阿里云服务器,中途碰到了俄罗斯的ip成功黑了我的服务器,好在文件访问权限有限制,对方仅给我home目录加了密。后来,实在担心留有其它隐藏程序,…

    Redis 2023年4月11日
    00
  • MySQL多表查询机制

    MySQL多表查询是指在查询过程中涉及到多个表的数据,需要通过多表连接查询机制来实现查询的目的。下面我将从以下几个方面详细讲解MySQL多表查询的完整攻略: 多表连接分类 MySQL中的多表连接主要分为以下三种: 内连接:查询两个表中共有的数据 左连接:查询左边表中所有数据以及两个表中有相同数据的右边表数据 右连接:查询右边表中所有数据以及两个表中有相同数据…

    database 2023年5月22日
    00
  • redis连接报错error:NOAUTH Authentication required

    当我们在使用Redis时,可能会遇到“redis连接报错error:NOAUTH Authentication required”的错误提示,这是因为我们没有进行Redis的身份验证而导致连接失败。下面我将为大家介绍几种解决这个问题的方法。 方法一:在配置文件中设置密码 我们可以在Redis的配置文件中设置requirepass参数来为Redis设置密码。打…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部