mongodb主备 VS 业务系统主备

报表系统主备(主机、备机并不是配死的,谁先启动谁就是主机)

报表系统主备场景描述:

3台REPORT系统主备。在redis里面设了master键,为了防止并发,在数据库里面也设置了主备。

之前开发的逻辑通过IP来标识,但如果部署在通一个机器上,问题来了:3台机器同一个IP的时候,怎么区分?

后来开发修改方案,每台机器去redis注册,每次重启都新生成唯一编号(类似时间戳)

测试场景设计:

(1)3台同事并发启动,只能又1台是主2台备,只有主机会执行REPORT的定时任务。

(2)3台机器,其中1台主机,2台备机。主机DOWN后,2台备机只能一个变成主。

(3)A,B,C,按照先后顺序,慢慢启动(不并发),只有A一台机器时A是主机。第2启动的B是备机,第3启动的是C备机

然后依次从A,B,C宕机,剩下B,C机器时有1台是主机,剩下C一台机器它自己是主机

 

 

MONODB主备 

开发设计:(这个方案不合理)

通过mongdb 自己的主从配置,配置谁是主,谁是备

主永远是主,备永远是备(并不是谁先启动,谁是主)

主备都OK时,先写主,同步到备(主备数据保持一致)

主备,主挂了,自动写备,主恢复补上失去的数据,程序自动写主。

主备,备挂了,备恢复后要补上失去的数据

mongodb高可用方案(一)主从复制
https://blog.csdn.net/ocean_fan/article/details/79191521

mongodb高可用方案(二)可复制集----推荐用这个实现MONGO主备
https://blog.csdn.net/ocean_fan/article/details/79191649

 

同步测试

  • 在主库上插入数据
> use testsalve
switched to db testsalve
> db
testsalve
> db.testsalve.insert({"name" : "测试同步"})
WriteResult({ "nInserted" : 1 })
> show collections
testsalve
> db.testsalve.find().pretty()
{ "_id" : ObjectId("5ad44d090dd23b7a5c1a983f"), "name" : "测试同步" }

  • 从库上查看是否同步
> rs.slaveOk();
> show dbs;
admin      0.000GB
config     0.000GB
local      0.000GB
testsalve  0.000GB
> use testsalve
switched to db testsalve
> db.testsalve.find().pretty()
{ "_id" : ObjectId("5ad44d090dd23b7a5c1a983f"), "name" : "测试同步" }
# 数据已同步过来

注意

salve节点默认是无法读写的,如果非要解决,方法如下:
在从库执行
> rs.slaveOk();


 

  • MongoDB数据库备份

1、语法: mongodump -h dbhost -d dbname -o dbdirectory

参数说明:

-h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d: 需要备份的数据库实例,例如:test -o: 备份的数据存放位置,例如:/home/mongodump/,当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。


 

  • MongoDB数据库恢复

1、语法: mongorestore -h dbhost -d dbname --dir dbdirectory

参数或名:

-h: MongoDB所在服务器地址

-d: 需要恢复的数据库实例,

例如:test,当然这个名称也可以和备份时候的不一样,

比如test2 --dir: 备份数据所在位置,

例如:/opt --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。

就是说,恢复后,备份后添加修改的数据都会被删除。

 

 



作者:你的小白
链接:https://www.jianshu.com/p/647ddfd1f5d7
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值