一、MongoDB副本集(repl set)介绍

早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主;

目前已经淘汰了master-slave模式,改为副本集,这种模式下有一个主(primary),和多个从(secondary),只读,支持给他们设置权重,当主宕掉后,权重最高的从切换为主;

在此架构中还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据

在此架构中读写数据都是在主上,要想实现负载均衡的目的需要手动指定读库的目标server

二、MongoDB副本集搭建

服务器环境准备

三台服务器都是CentOS release 6.5 (Final)

192.168.1.203(primary)

192.168.1.201(secondary)

192.168.1.202(secondary)

编辑三台机器的配置文件,加入如下内容

replication:

oplogSizeMB: 20 #oplog大小

replSetName: fansik #名称自定义

重启三台MongoDB服务

连接主,在主上运行命令mongo,然后

> use admin

>config={_id:"fanjinbao",members:[{_id:0,host:"192.168.1.203:27017"},{_id:1,host:"192.168.1.201:27017"},{_id:2,host:"192.168.1.202:27017"}]}

> rs.initiate(config)

> rs.add("192.168.1.201")

> rs.add("192.168.1.202")

> rs.status() # 查看状态

如果两台从上的状态为"stateStr" : "STARTUP",则需要进行如下操作> var config={_id:"fanjinbao",members:[{_id:0,host:"192.168.1.203:27017"},{_id:1,host:"192.168.1.201:27017"},{_id:2,host:"192.168.1.202:27017"}]}

> rs.initiate(config)

此时再次查看rs.status()会发现从的状态变为SECONDARY

三、MongoDB副本集测试

主上建库建集合

use mydb

db.acc.insert({AccountID:1,UserName:"123",passwd:"123456"})

show dbs

从上查看

show dbs如果出现系列错误

2016-05-13T00:03:36.719+0800 E QUERY    Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }

执行

rs.slaveOk()

show dbs就可以看到创建的数据库了

四、副本集更改权重模拟主宕机

默认三台机器权重都为1,如果任何一个权重设置为比其他的高,则该台机器马上切换为primary角色,所以我们预设三台机器的权重为别为203:3,201:2,202:1

在主上执行:

cfg = rs.conf()

cfg.members[0].priority = 3

cfg.members[1].priority = 2

cfg.members[2].priority = 1

rs.reconfig(cfg)

这样的话,第二个节点将会成为候选节点

主上丢弃掉从端口27017进入的数据包

iptables -I INPUT -p tcp --dport 27017 -j DROP

五、MongoDB备份和恢复

备份指定库

# mongodump -h ip -d dbname -o dir #-h后面跟服务器ip,-d后面跟database名字,不加则备份所有库,-o指定备份到哪里,他是一个目录

备份所有库

# mongodump -h 192.168.1.203 -o /tmp/

备份指定集合

# mongodump -d fansik -c zhangsan -o /tmp/fansik #-c指定集合的名字

导出集合为json文件

# mongoexport -d mydb -c fansik -o /tmp/test.json #-o后面跟的是一个文件的名字

恢复所有库

# mongorestore --drop dir/ #其中dir是备份所有库的目录名字 其中--drop可选,意思恢复前先将数据删除,不建议使用

恢复指定库

# mongorestore -d mydb /mydb #-d恢复的库名字,mydb是该库备份目录

恢复集合

# mongorestore -d mydb -c zhangsan /fansik/zhangsan.bson #-c后面是要恢复的集合的名字,然后指定恢复的集合文件,bson格式的文件

导入集合

# mongoimport -d mydb -c test --file /tmp/test.json

MongoDB副本集搭建及备份恢复的更多相关文章

  1. windows版本 MongoDB副本集搭建及开启身份验证

    ------------恢复内容开始------------ ------------恢复内容开始------------ MongoDB副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...

  2. mongodb副本集搭建过程中的问题和解决技巧

    在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天 ...

  3. MongoDB 副本集搭建

    搭建mongodb副本集 [root@ mongodb]# cd /u02 [root@ u02]# mkdir -p mongodb/data_2777 [root@ u02]# mkdir -p ...

  4. MongoDB副本集--Secondary节点实例恢复

    场景描述 MongoDB副本集中有一台Secondary节点出现RECOVERING的状态 状态如下: arps:RECOVERING> rs.status() { "set" ...

  5. MongoDB 副本集搭建 & 副本集扩容

    副本集的搭建 创建多实例目录 [root@redis03 ~]# mkdir /server/mongodb/2801{7,8,9}/{conf,logs,pid,data} -p 编辑多实例配置文件 ...

  6. Mongodb副本集搭建经验

    一.环境配置经验 1.一般安装的副本集的时候,主实例可以有数据库和用户:从实例不能.仲裁机不能有任何数据库包括用户 2.搭建副本集的时候Host使用外网IP,否则使用Mongodb VUE 1.6.9 ...

  7. mongodb副本集搭建

    1.创建目录 mkdir -p /data/r1  /data/r2  /data/r3 2.启动: bin/mongod --config ../mongod.conf --replSet r1 b ...

  8. 在centos7上搭建mongodb副本集

    1.安装副本集介绍 副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的 ...

  9. mongodb 4.0副本集搭建

    近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysql MHA简单的不止一点半点. 那么到底如何部署呢?请看下文. 1.  准备工作 1.1 下载软件 选择版本并下 ...

随机推荐

  1. IT公司100题-5-查找最小的k个元素

    问题描述: 输入n 个整数,输出其中最小的k 个. 例如输入8, 7, 6, 5, 4, 3, 2, 1这8 个数字,则最小的3 个数字为3, 2, 1.   分析: 时间复杂度O(nlogn)方法: ...

  2. 支持单色条码图像生成的条形码控件Barcode Professional

    Barcode Professional for .NET Windows Forms条形码控件是一款灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加条码生成和打印功能到您的.NE ...

  3. java基础之 string

    一 string public final class String 继承自java.lang.Object类. 实现了接口: java.io.Serializable, Comparable< ...

  4. java基础之 反射

    首先,我们在开始前提出一个问题: 1.在运行时,对于一个java类,能否知道属性和方法:能否去调用它的任意方法? 答案是肯定的. 本节所有目录如下: 什么是JAVA的反射机制 JDK中提供的Refle ...

  5. httplib、urllib、urllib2的区别

     Python3.4互联网通讯协议支持 1,webbrowser方便的浏览器容器 2,cgi公共网关接口支持 3,cgitb管理cgi脚本 4,wsgiref  WSGI实体和引用实现 5,urlli ...

  6. linux下磁盘进行分区、文件系统创建、挂载和卸载

    任务的原因:由于,刚购买来的服务器需要将磁盘挂载到操作系统上,为了挂载磁盘首先要对磁盘进行分区,然后进行文件系统的创建,最后将磁盘挂载到操作系统上的某个目录. MBR(Master Boot Reco ...

  7. hdu 2061

    PS:  以为找个简单来恢复信心..结果碰到那么傻逼的题目... 题意:给出学分和成绩,算GPA...关键是注意换行....它要求的换行我觉得超级奇怪...除了第一个正常,其他的输入完之后先一个换行. ...

  8. 作业1-我的第一个博客&GuiHub简单练习

    自我介绍                   姓名:苗中峰(不要问有什么含义,翻着字典取的名,翻到什么字就取了什么字)                               性别:男(不解释) ...

  9. OD调试4--绕过nag窗口

    先看一下程序的运行情况 先跳出了一个nag窗口 点确定 又跳出了一个NAG窗口,这是一些程序编写的时候常用的方法,设法让你购买正版软件, 于是今天呢,学会了四种绕过NAG的方法 我们先用OD加载进入这 ...

  10. Squid Proxy Server 3.1

    Improve the performance of your network using the caching and access control capabilitiess of squid. ...