mongoDB的两个特性主从复制和副本集,实现了数据的同步备份

一、主从复制

主从复制是一个简单的数据库同步备份的集群技术.例如主服务器宕机了,可以直接使用从服务器,主服务器恢复后在进行同步,保证了业务的连续性

注意点:

  • 主服务器只有一台
  • 从服务器需要知道自己的数据源,也就是对应的主服务器
  • --master确定主服务器,--slave和--source来控制从服务器

1.举例:

1).主服务器的端口是60000

2).从服务器的端口是60001

如何配置主从复制?

主服务器的配置:

dbpath = D:\MongoDBMSCopy\Master   主数据库地址

port = 60000 主数据库端口号

bind_ip = 127.0.0.1 主数据库所在服务器

master = true 确定我是主服务器

从服务器的配置

dbpath =  D:\MongoDBMSCopy\Slave 从数据库地址

port = 60001 从数据库端口号

bind_ip = 127.0.0.1 从数据库所在服务器

source = 127.0.0.1:60000 确定我数据库端口

slave = true 确定自己是从服务器

配置文件写好之后,就可以通过命令来启动主从服务器了,

如下:

启动主服务器

C:\Windows\system32>mongod --config D:\MongoDBMSCopy\Master\Master.conf

启动从服务器

C:\Windows\system32>mongod --config D:\MongoDBMSCopy\Slave\slave.conf

验证是否进行了复制

①打开cmd,连接主服务器,并建立一个Students数据库,插入一个文档名为Students

查看一下数据

> db.students.find()

{ "_id" : 1, "name" : "BigOrange", "age" : 25 }

②打开cmd连接从服务器

如上图所示,证明已经进行了复制

2.主从复制的其他设置项

--only  从节点→指定复制某个数据库,默认是复制全部数据库

--slavedelay  从节点→设置主数据库同步数据的延迟(单位是秒)

--fastsync 从节点→以主数据库的节点快照为节点启动从数据库

--autoresync 从节点→如果不同步则从新同步数据库

--oplogSize  主节点→设置oplog的大小(主节点操作记录存储到local的oplog中)

3.利用shell动态添加和删除从节点

在从数据库中的local数据库会多一个sources文档,它保存着主服务器的信息

如何进行动态添加从节点呢,和正常的添加数据的操作一样,直接通过insert插入remove删除

挂接主节点:

db.sources.insert({“host”:”127.0.0.1:60000”})

删除已经挂接的主节点:

db.sources.remove({“host”:”127.0.0.1:60000”})

二、副本集

第一张图表明A是活跃的B和C是用于备份的

第二张图当A出现了故障,这时候集群根据权重算法推选出B为活跃的数据库

第三张图当A恢复后他自动又会变为备份数据库

例:如何配置一个副本集服务器集群

1.假如有上面ABC三台服务器,如何进行配置呢,同样需要修改配置文件

对于A服务器:

dbpath = D:\MongoDBCopy\A\MongoDB_A.conf        #A的配置

port=11111                                       #端口号

bind_ip=127.0.0.1                                   #IP地址

replSet = child/127.0.0.1:22222                        #设定同伴,这里是B

对于B服务器:

dbpath = D:\MongoDBCopy\B\MongoDB_B.conf          #A的配置

port=22222                                        #端口号

bind_ip=127.0.0.1                                    #IP地址

replSet = child/127.0.0.1:33333                        #设定同伴,这里是C

对于C服务器:

dbpath = D:\MongoDBCopy\C\MongoDB_C.conf          #A的配置

port=33333                                        #端口号

bind_ip=127.0.0.1                                    #IP地址

replSet = child/127.0.0.1:11111                        #设定同伴,这里是A

2.初始化副本集

使用shell进入一台服务器,然后设定初始化副本集

 use admin
db.runCommand({"replSetInitiate":
{
"_id":'child',
"members":[{
"_id":,
"host":"127.0.0.1:11111"
},{
"_id":,
"host":"127.0.0.1:22222"
},{
"_id":,
"host":"127.0.0.1:33333"
}]
}
})

哪个节点成为活跃节点,这时候是随机的,如果想要更准确的设置,需要设置权重

3.查看副本集状态

rs.status()

上图可以看到,端口为11111的服务器被选择为活跃服务器

注意:

备份点不能进行查询操作的,只有活跃点才能进行查询操作

①在活跃服务器上添加一个数据库并添加一个文档

child:PRIMARY> show dbs

admin  (empty)

local  4.076GB

child:PRIMARY> use Students

switched to db Students

child:PRIMARY> db.student.insert({name:"BigOrange",age:25})

WriteResult({ "nInserted" : 1 })

child:PRIMARY> db.student.find()

{ "_id" : ObjectId("56fa6b9159b5751566c1c37f"), "name" : "BigOrange", "age" : 25

}

child:PRIMARY>

②切换到其中一个备份服务器,发现不能进行查询

C:\Windows\system32>mongo 127.0.0.1:22222/test

MongoDB shell version: 2.6.5

connecting to: 127.0.0.1:22222/test

child:SECONDARY> show dbs

Students  0.078GB

admin     (empty)

local     2.077GB

child:SECONDARY> use Students

switched to db Students

child:SECONDARY> show collections

2016-03-29T19:50:09.064+0800 error: { "$err" : "not master and slaveOk=false", "

code" : 13435 } at src/mongo/shell/query.js:131

child:SECONDARY> db.student.find()

error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

child:SECONDARY>

补充:

节点和初始化高级参数

standard 常规节点:参与投票有可能成为活跃节点

passive 副本节点:参与投票,但是不能成为活跃节点

arbiter 仲裁节点:只是参与投票不复制节点也不能成为活跃节点

高级参数

Priority  0到1000之间 ,0代表是副本节点 ,1到1000是常规节点

arbiterOnly : true 仲裁节点

用法

把上面A设置为仲裁节点

其他的不变,在初始化的时候,写成如下

use admin
db.runCommand({"replSetInitiate":
{
"_id":'child',
"members":[{
"_id":,
"host":"127.0.0.1:11111",
arbiterOnly : true
},{
"_id":,
"host":"127.0.0.1:22222",
},{
"_id":,
"host":"127.0.0.1:33333"
}]
}
})

其他使用可以参考如下

http://blog.itpub.net/29254281/viewspace-1176553/

4.读写分离操作→扩展读

设置读写分离

slaveOkay :  true

MongoDB的主从复制和副本集的更多相关文章

  1. MongoDB之主从复制和副本集(四)

    简单主从复制 采用一主一从或一主多从的布署模式,可以将读写分离开来,提高数据库的可用性,不过mongodb的主从模式并不能在主节点崩溃后,从节点替换主节点的工作,一般可以在开发阶段使用. 实现步骤 设 ...

  2. MongoDB主从复制和副本集

    MongoDB有主从复制和副本集两种主从复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集解决了主从模式无法自动故障转义的特点,因此是复制的首选.对于简单的主从复制无法自动故障转移 ...

  3. MongoDB 删除,添加副本集,并修改副本集IP等信息

    MongoDB 删除,添加副本集,并修改副本集IP等信息 添加副本,在登录到主节点下输入 rs.add("ip:port"); 删除副本 rs.remove("ip:po ...

  4. MongoDB 带访问控制的副本集部署

    当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成. 版本及环境 MongoDB4.4  Centos6.5  一. 下载安装 MongoDB Server 及 ...

  5. 8.MongoDB系列之创建副本集(一)

    1. 复制简介 在MongoDB中,创建副本集后就可以使用复制功能了,副本集是一组服务器,其中一个是用于处理写操作的主节点,还有多个用于保存主节点的数据副本的从节点,如果主节点崩溃了,则从节点会从中选 ...

  6. Mongodb主从复制 及 副本集+分片集群梳理

    转载努力哥原文,原文连接https://www.cnblogs.com/nulige/p/7613721.html 介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 ...

  7. MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)

      一.mongodb主从复制配置 主从复制是mongodb最常用的复制方式,也是一个简单的数据库同步备份的集群技术,这种方式很灵活.可用于备份,故障恢复,读扩展等. 最基本的设置方式就是建立一个主节 ...

  8. MongoDB 学习笔记(七):主从复制与副本集

    一.主从复制 1.主从复制是一个简单的数据库同步备份的集群技术,如下图:要明确的知道主服务器与从服务器,且从服务器要明确的知道主服务器的存在. 2.在MongoDB中在启动数据库服务时,可以用mast ...

  9. Mongodb 主从复制与副本集实验

    1.实验主从复制,并验证复制成功,抓图实验过程  Step1:创建相应的目录 Mkdir -p ./dbs/master Mkdir -p ./dbs/slave Step2:开启主服务 ./bin/ ...

随机推荐

  1. 编译并使用Lua语言

    Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. 可扩展性.Lua的扩展性非常卓越,可以通过Lua代码或C代码扩展,很多功能可以通过外部库来扩 ...

  2. 你可能没听过的 Java 8 中的 10 个特性

    你以前听到的谈论关于Java8的所有都是围绕lambda表达式. 但它仅仅是Java8的一部分. Java 8 有许多新特性—一些强大的新类和语法, 还有其他的从一开始就应该具有的东西. 我将要介绍我 ...

  3. python 偏函数

    functools.partial可以设置默认参数和关键字参数的默认值 Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的 ...

  4. class-dump 复制到/usr/bin目录不可写,Operation not permitted 解决办法

    许多升级了OSX 10.11的朋友在配置class-dump的时候,会发现书上推荐的class-dump存放目录/usr/bin不再可写,如下所示: Operation not permitted 把 ...

  5. Objective-C中的Block

    1.相关概念 在这篇笔记开始之前,我们需要对以下概念有所了解. 1.1 操作系统中的栈和堆 注:这里所说的堆和栈与数据结构中的堆和栈不是一回事. 我们先来看看一个由C/C++/OBJC编译的程序占用内 ...

  6. sonne_game网站开发03 spring-mvc+freemarker整合

    今天的任务就是在spring+mybatis+springmvc的基础上,将freemarker整合进来. freemarker是什么? freemarker是一种模板引擎.它的目的是基于模板和数据, ...

  7. SQL函数中的动态执行语句

    一.为什么要使用动态执行语句? 由于在PL/SQL 块或者存储过程中只支持DML语句及控制流语句,并不支持DDL语句,所以Oracle动态执行语句便应允而生了.关于DDL与DML的区别,请参见:DDL ...

  8. jquery ajax 报交请求返回 HTTP 400 错误

    提交请求的AJAX代码如下: 点击(此处)折叠或打开 $.ajax({ url: "${ctx}/selfhelp/userAttributeAnalysis/userAttributeLi ...

  9. 转--23种设计模式的搞笑解释(后续放逐一C++解释版本)

    创建型模式 1.FACTORY —追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德 ...

  10. UNIX标准化及实现之标准之间的冲突

    就整体而言,这些不同的标准之间配合得相当好.但是我们也很关注它们之间的差别,特别是ISO C标准和POSIX.1之间的差别. ISO C定义了函数clock,它返回进程使用的CPU时间,返回值类型是c ...