【Mongodb】Master-Slave 复制

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:
mongodb的主从复制是最常见的复制模式,这种模式是非常灵活的并且可以用来做备份,failover 故障切换, 拓展读等等,最常见的方式是 一主一备或者一主多备,每个slave 都知道主库的地址 即主库的ip地址和端口号。
如下图:
                                                一主一备模式
                                                   一主多备 模式
mongodb 启动master 的方式是 
./mongod --master 
启动slave 模式执行
./mongod --slave --source master_address (主库的ip地址和端口)
例如 例子是在同一个主机:
主库:./mongod --master --dbpath=/opt/monogdata/data --port=60000
从库:./mongod --slave --dbpath=/opt/monogdata/slavedata/ --port=60010 --source=127.0.0.1:60000
异机的例子:
主库:./mongod --master --dbpath=/opt/monogdata/data --port=60000
从库:./mongod --slave --dbpath=/opt/monogdata/slavedata/ --port=60010 --source=10.250.7.220:60000
所有的slave库必须从一个主库进行复制,到目前为止,现在的版本还不支持从备库进行复制即级联形式的复制,因为slaves 并不保持他们自己的oplog。对于一对多形式的主从复制对于从库并没有数量的限制,但是设置从库时必须考虑主库 IO方面的压力。
下面介绍一些比较重要的且常见的选项
--slavedelay 
  延迟应用主库的oplog,和oracle 的dataguard 中的 delay 关键字的作用一直,单位为秒。如果在主库进行误操作,设置延迟应用,这样可以一个维护窗口进行恢复数据。
--fastsync 
 Start a slave from a snapshot of the master node. This option allows a slave to bootstrap much faster than doing a full sync, 
 if its data directory is initialized with a snapshot of the master’s data. 
##以主库的一个快照为基础,启动一个slave。当快照中已经保存了主库的数据字典,这样可以比从库进行完全同步要快##
--autoresync 
   ##自动执行一个完整的同步操作##
  Automatically perform. a full resync if this slave gets out of sync with the master 
--oplogSize 
  ##主库的oplog的大小以M 为单位。##  
添加和删除源库
之前说过可以在开始启动的时候直接指定 --source 来标识主库,也可以在启动slave之后,在local 库中添加主(源)库的信息,比如:
加入在本机上已经有一个主库在localhost:27017端口,我们可以启动一个不带 --source参数的slave 
$ ./mongod --slave --dbpath ~/dbs/slave --port 27018 
启动之后,执行添加操作:
> use local 
> db.sources.insert({"host" : "localhost:27017"}) 
例子:
在主库:
[mongodb@rac2 bin]$ ./mongod --master -port=27017 --dbpath=/opt/mongodata  &
[1] 6715
[mongodb@rac2 bin]$ Sun Oct 30 17:34:08 [initandlisten] MongoDB starting : pid=6715 port=27017 dbpath=/opt/mongodata master=1 64-bit host=rac2
[mongodb@rac2 bin]$ ./mongo 127.0.0.1:27017
MongoDB shell version: 2.0.1
connecting to: 127.0.0.1:27017/test
> db.yql.insert({id:1,val:"this is on master!"});
> db.yql.find();
{ "_id" : ObjectId("4ead1b21da034cce224fca6f"), "id" : 1, "val" : "this is on master!" }
> db.yql.insert({id:1,val:"this is on master and this message will be send to slave!"});
> db.yql.find();
{ "_id" : ObjectId("4ead1b21da034cce224fca6f"), "id" : 1, "val" : "this is on master!" }
{ "_id" : ObjectId("4ead1bd7da034cce224fca70"), "id" : 1, "val" : "this is on master and this message will be send to slave!" }
在备库
[mongodb@rac3 bin]$ ./mongo 127.0.0.1:27018
MongoDB shell version: 2.0.1
connecting to: 127.0.0.1:27018/test
> use local
switched to db local
> db.sources.insert({"host" : "10.250.7.249:27017"}); 
> db.sources.find();
{ "_id" : ObjectId("4ead1b68b868f3c88da3b06f"), "host" : "10.250.7.249:27017", "source" : "main", "syncedTo" : { "t" : 1319967596000, "i" : 1 }, "dbsNextPass" : { "test" : true }, "incompleteCloneDbs" : { "test" : true } }
> use test
switched to db test
> db.yql.find();
{ "_id" : ObjectId("4ead1b21da034cce224fca6f"), "id" : 1, "val" : "this is on master!" }
> db.yql.find();
{ "_id" : ObjectId("4ead1b21da034cce224fca6f"), "id" : 1, "val" : "this is on master!" }
{ "_id" : ObjectId("4ead1bd7da034cce224fca70"), "id" : 1, "val" : "this is on master and this message will be send to slave!" }
如果你要更换master ,比如从 10.250.7.249 更换为 10.249.197.220 则执行
> db.sources.insert({"host" : "10.250.7.220:27017"}); 
> db.sources.remove({"host" : "10.250.7.249:27017"});
####但我实验的过程中是如下情况,remove 删除不了!???#####
> db.sources.find();
{ "_id" : ObjectId("4ead250e6c7e8620f17d8ebb"), "host" : "10.250.7.249:27017", "source" : "main", "syncedTo" : { "t" : 1319970116000, "i" : 1 } }
> db.sources.remove({"host" : "10.250.7.249:27017"}); 
> db.sources.find();
{ "_id" : ObjectId("4ead25ed6c7e8620f17d8ebc"), "host" : "10.250.7.249:27017", "source" : "main", "syncedTo" : { "t" : 1319970276000, "i" : 1 } }
注意:如果从库从不同的主库上接受日志,对于同样的集合collections,mongodb会自动合并他们,当然这样做并不保证完全正确。 对于此种情况,最好指定不同的命名空间。
相关文章
|
机器学习/深度学习 人工智能
48小时封镜!这是一部完全由AI制作的科幻电影
在伦敦科幻电影节的“48小时电影挑战”,导演Oscar Sharp和AI研究员Ross Goodwin带来一部全部制作过程由AI导演的实验性影片《Zone Out》。影片采用“换脸”技术,使用神经网络生成的对话和配音等,整个制作过程都由被称为Benjamin的AI进行处理。
2666 0
|
12月前
|
监控 负载均衡 网络协议
OSPF的性能优化策略
OSPF的性能优化策略
421 3
|
10月前
|
自然语言处理
高效团队的秘密:7大团队效能模型解析
3分钟了解7大团队效能模型,有效提升团队绩效。
1015 7
高效团队的秘密:7大团队效能模型解析
|
10月前
|
人工智能 安全 数据安全/隐私保护
《巧用鸿蒙Next原子化服务,打造轻量级人工智能应用》
在科技飞速发展的当下,鸿蒙Next的原子化服务为轻量级人工智能应用的开发带来了全新机遇。原子化服务具有轻量化、便捷性和多终端适配性等特点,用户无需安装完整应用,点击卡片即可快速获取服务。轻量级AI应用需在计算资源有限的设备上运行,要求模型体积小、计算复杂度低、运行效率高。利用鸿蒙Next的原子化服务,开发者可以高效利用资源,实现快速部署与更新,并支持多设备协同工作。通过选择合适的AI模型、集成鸿蒙Next的AI能力、设计简洁交互界面和确保数据安全,开发者能打造出高质量的轻量级AI应用,提升用户体验。
402 17
|
城市大脑 达摩院 监控
阿里云交通数据中台解决方案,打造“数字化生产力”
在交通行业中,阿里云不仅具备成熟的方法论和工具,还联合高德、支付宝、阿里达摩院等,构成了一个内部协同生态,外部也积极与生态伙伴展开合作,全方位渗透交通各个领域和场景,是建设智能计算和催生智能分析的引擎。
阿里云交通数据中台解决方案,打造“数字化生产力”
|
前端开发
CSS 鼠标样式和手指样式
巧合要用到鼠标样式效果,就顺便整理了下十五种CSS鼠标样式,小例子供大家使用啊。CSS鼠标样式语法如下: 任意标签中插入 style="cursor:*"   例 子:<span style="cursor:*">文本或其它页面元素</span>  <a href="#" style="cursor:*">文本或其它页面元素</a>
2082 0
|
存储 缓存 NoSQL
一文搞懂redis
NoSQL泛指非关系型数据库,随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0大数据时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的。
一文搞懂redis
|
存储 物联网 网络性能优化
一文教你小区如何自建快递柜
共享快递拟收费事件后,国内小区物业开启一波自建快递柜的浪潮,阿里平台快递柜销量暴涨1400%。那么问题来了,企业如何基于阿里云物联网平台快速构建一套高可用的共享快递柜服务?
700 1
一文教你小区如何自建快递柜
|
供应链 监控 数据可视化
21克:仅需3天,我们就用Quick BI搭建起数据驾驶舱
简介: 数智化并不仅仅是大型企业才需要去思考的课题,而是摆在所有企业面前的一个可选项。借助Quick BI搭建的数据分析体系,21克实现了销售、财务、供应链等多部门业务的数据化支撑,从一份份本地化的Excel文件,到清晰美观的数据看板,数据所能带来的价值改变正在21克中逐渐显现。
911 0
|
云安全 存储 安全
IDaaS 新品亮点与设计理念
3月9日,阿里云宣布 IDaaS 重磅升级,阿里云高级产品专家Michael S.在发布会上阐述了IDaaS 新版的亮点以及设计理念,以企业的研发团队为例,讲解新版IDaaS如何为这类用户带来工作效率的提升。以下是演讲概要。 限时免费体验 IDaaS :https://www.aliyun.com/product/idaas
IDaaS 新品亮点与设计理念

热门文章

最新文章