MongoDB副本集搭建及备份恢复

本文详细介绍了MongoDB副本集(replset)的概念及搭建过程,并通过实例演示了如何测试副本集的功能,包括主从切换、权重设置、数据同步等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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

转载于:https://www.cnblogs.com/fansik/p/5490213.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值