mongo 复制
来源:互联网 发布:科瑞物业软件 编辑:程序博客网 时间:2024/05/19 00:56
mongo的复制有主从和复制集两种策略,熟悉数据库的都了解主从,复制集与主从类似,但它更强大,一旦主节点挂掉会从从节点当中会挑选一个成为新的主节点。
主从复制
配置
主服务器:
./mongod --dbpath /data/db/master --logpath /data/db/master.log --logappend --fork --port 2717 --master --oplogSize 64从服务器:
./mongod --dbpath /data/db/slave --logpath /data/db/slaver.log --logappend --fork -port 27018 --slave --slavedelay 5 --autoresync --source localhost:27017需要注意的是,主从不能使用同样的数据目录和端口。mongo也支持一主多从的模式,但从多了同样会对主造成性能影响。当然mongo也支持双master的模式,但双master模式一直存在数据同步延迟造成某一方数据被冲掉的情况,根据情况灵活使用。
启动选项
- --master,指定主节点
- --slave,指定从节点
- --fastsync,以主节点的数据快照为基础启动从节点,用该选项启动比做完整同步快很多
- --oplogSize arg,指定主节点oplog的大小(MB)
- --source arg <serverIp:port>,在主节点上指定从节点地址,在从节点上指定主节点地址
- --only arg,在从节点上指定复制特定的数据库,默认复制所有数据库
- --slavedelay arg,设定从节点同步主节点数据的延迟时间
- --autoresync,如果主从节点不同步了,则自动重新同步
动态添加删除源
在启动从节点时可以不用指定主节点地址而是在启动后在shell里通过命令动态的添加或删除主节点:
db.sources.insert({'host':'ip:port'}); db.sources.remove({'host':'ip:port'});db.sources.find()
sources集合可以和其它集合一样的操作。需要注意的时,从节点在切换主节点时会将同样的集合合并。
复制集
前面讲了复制集(replica set)能自动的恢复,它能保证在集群中总有一个活跃节点(primary)可用和一个或多个备份节点(secondary)。
启动
先启动两台服务器:
./mongod --dbpath /data/db1/ --logpath mo1.log --replSet shard1 --port 27017./mongod --dbpath /data/db2/ --logpath mo2.log --replSet shard1 --port 27018
--replSet指定了复制集名字,通过该选项可以将不同的实例放在同一个复制集中。上面添加了两个实例,当然可以添加多个实例。启动复制集但还不可用,需要进行初始化。
初始化
在shell中连接上面两个实例中的任意一个,敲入如下命令进行初始化:
cfg={_id:'shard1',members:[{_id:0,host:'127.0.0.1:27017'},{_id:1,host:'127.0.0.1:27018'}]}rs.initiate(cfg)cfg是配置信息,_id指定了复制集的名字,members指定了复制集中的实例。rs.initiate命令进行初始化,它返回初始化是否成功以及相应信息。初始化成功之后,shell会显示你正在使用primary还是secondary,也可以使用rs.status()查看状态信息,复制集的配置信息存储在local.system.replset集合中。
登录secondary节点,在正常查询前需要输入rs.slaveOK()。
添加节点
现在需要添加一个新的节点,先要启动新节点:
./mongod --dbpath /data/db3/ --logpath mo3.log --replSet shard1 --port 27019然后登录primary节点,执行如下命令:
rs.add('127.0.0.1:27019')rs.reconfig(rs.conf())
节点
复制集中有几种不同类型的节点:
- standard,常规节点,存储完整的数据备份,参与选举投票,可能成为活跃节点;
- passive,存储完整的数据备份,参与选举投票,不能成为活跃节点;
- arbiter,只参与投票,不存储数据,不能成为活跃节点。
每个节点有一个priority属性,范围是0~1000,默认值是1,它的值决定了该节点是standard还是passive,如果是0则是passive,否则是standard。
standard节点中也根据priority的值从大到小决定谁能成为新的活跃节点,如果多个节点的priority值一样,则看哪个节点的数据比较新。
在添加节点时,可以设置节点的属性arbiterOnly为true,则设置改节点为arbiter。
复制原理
主节点将操作计入oplog,从节点启动时复制主节点中的每一个文档,之后获取主节点的oplog并执行其中的操作以达到数据同步。oplog保存在local.oplog集合中,主从节点都会维护一个syncedTo的属性,主节点通过db.slaves.find(),从节点通过db.sources.find()查看,表示从节点上次同步时间,这样就知道下次该从哪个时间开始做同步了。
- mongo 复制
- mongo主从复制
- mongo复制,备份,恢复
- mongo的复制集
- mongo 复制集
- BSONObj to BSONObjBuilder mongo::BSONObjBuilder复制 mongo::BSONObj复制
- Mongo 主从复制 原理浅析
- Mongo集群之主从复制
- mongo 复制 collection ,重命名 字段
- mongo快速搭建复制集
- mongo复制集同步验证
- mongo shell 高级之 主从复制
- mongo复制集(无仲裁节点)
- 【MongoDB】mongo复制数据库和集合
- 【mongoDB实战】mongo集群---主从复制篇
- mongo学习笔记(二)-复制
- MONGO
- mongo
- 代码风格中需要注意的问题
- Android 如何更改包名
- nfs性能调优
- spring整合jbpm Error creating bean with name 'departmentServiceImpl':
- 李开复的成长格言:思考比传道更重要
- mongo 复制
- 微软 Entity Framework 实体框架工具 - EF Power Tools
- hdu 2057 A + B again
- 《C++程序设计语言》笔记之五
- spring整合jbpm Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
- freemarker案例(支持中文标签)
- android获取网上图片
- JQUERY 单双行样式简单变换
- CDATA是XML标记语言的语法成分