MongoDB实战系列之三:MongoDB的主从部署

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

主从同步:

md01    10.0.0.11        master
md02    10.0.0.12        slave
md03    10.0.0.14        slave

#建立数据库目录

 
  1. mkdir -p /elain/apps/mongodb/ 
  2. mkdir -p /elain/data/mongodb/db/ 
  3. mkdir -p /elain/logs/mongodb/ 

注:   
1、不需要像mysql一样复制完整数据过去,丛库启动会制动复制主库完整数据。
2、丛库自动配置为只读。
3、mongodb第一次启动时间较长,需要注意等待。
4、管理命令多数都要在admin库中执行 use admin

相关参数:./mongod --help
--autoresync 当发现从服务器的数据不是最新时,开始从主服务器请求同步数据
--slavedelay 同步延迟,单位:秒

主-从
作为主服务器启动

 
  1. /elain/apps/mongodb/bin/mongod --fork --master --oplogSize=4096 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log 

作为从服务器启动,并指明主服务器地址。--autoresync为强制从主服务器同步全部数据

 
  1. /elain/apps/mongodb/bin/mongod --fork --slave --source 10.0.0.11:27001 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log  

注:可以在启动从时加以下常用参数
--slavedelay 10      #延时复制 单位为秒
--autoresync         #自动重新同步
--only               #复制指定的数据库,默认复制所有的库
--oplogSize          #主节点的oplog日志大小,单位为M,建议设大点(更改oplog大小时,只需停主库,删除local.*,然后加--oplogSize=* 重新启动即可,*代表大小)

如果发现主从不同步,从上手动同步

 
  1. db.runCommand({"resync":1}) 

状态查询

 
  1. db.runCommand({"isMaster":1})  

#主还是从

在丛库上查询主库地址

 
  1. > use local; 
  2. switched to db local 
  3. > db.sources.find(); 
  4. { "_id" : ObjectId("4e9105515d704346c8796407"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318155992000, "i" : 1 } } 

#查看各Collection状态

 
  1. db.printCollectionStats(); 

#查看主从复制状态

 
  1. db.printReplicationInfo(); 

测试主从
在主服务器新建数据库

 
  1. mongo --port 27001 
  2. >show dbs 
  3. >use elaindb 
  4. >db.blog.save({title:"new article"}) 

在从服务器上查看同步数据

 
  1. mongo --port 27001 

#在从库插入数据的操作 会提示 not master

 
  1. > use elaindb; 
  2. switched to db elaindb 
  3. > db.blog.find(); 
  4. { "_id" : ObjectId("4e9174b48443c8ef12b30c56"), "title" : "new article" } 

#查看主从同步信息:

 
  1. > db.printReplicationInfo(); 
  2. this is a slave, printing slave replication info. 
  3. source:   10.0.0.11:27001 
  4.          syncedTo: Sun Oct 09 2011 18:37:12 GMT+0800 (CST) 
  5.                  = 19 secs ago (0.01hrs) 
 
  1. >db.printSlaveReplicationInfo(); 

#此为同步过来的数据,测试成功

附加:

添加及删除源:
启动从节点时可以用--source指定主节点,也可以在shell中配置这个源,

启动一个从,端口为27002

 
  1. /elain/apps/mongodb/bin/mongod --fork --slave  --port 27002 --dbpath /elain/data/mongodb/testdb --logpath /elain/logs/mongodb/mongodb.log 

登录:

 
  1. mongo --port 27002 
  2.  
  3. [root@md03 ~]# mongo --port 27002 
  4. MongoDB shell version: 2.0.0 
  5. connecting to: 127.0.0.1:27002/test 
  6. > show dbs 
  7. local   (empty) 

添加到从节点上

 
  1. >use local 
  2. >db.sources.insert({"host": "10.0.0.11:27001"}); 

#查看显示正在同步

 
  1. > db.sources.find(); 
  2. { "_id" : ObjectId("4e9111e1c29bbd9b9cd31d4e"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318156782000, "i" : 246 }, "dbsNextPass" : { "testdb" : true, "testdb1" : true } } 

#同步完成后

 
  1. > db.sources.find(); 
  2. { "_id" : ObjectId("4e9111e1c29bbd9b9cd31d4e"), "host" : "10.0.0.11:27001", "source" : "main", "syncedTo" : { "t" : 1318156782000, "i" : 256 } } 

更改源:(假设10.0.0.12也为主库)

 
  1. db.sources.insert({"host": "10.0.0.12:27001"}); 
  2. db.sources.remove({"host": "10.0.0.11:27001"}); 

若复制中使用了认证,需在local库中添加repl用户来复制

 
  1. >user local; 
  2. > db.addUser("repl", "elain123"); 


附录一、Slave 顶替 Master
如果主服务器 10.0.0.11 宕机了,
此时需要用 10.0.0.12 机器来顶替 master 服务,

步骤如下:
#停止 10.0.0.12 进程(mongod)

 
  1. kill -2 `ps -ef|grep mongod|grep -v grep|awk '{print $2}'` 

#删除 10.0.0.12 数据目录中的 local.*

 
  1. rm -rf /elain/data/mongodb/db/local.* 

#以--master 模式启动 10.0.0.12

 
  1. /elain/apps/mongodb/bin/mongod --fork --master --oplogSize=4096 --port 27001 --dbpath /elain/data/mongodb/db --logpath /elain/logs/mongodb/mongodb.log 

附录二、切换 Master/Slave 角色
切换主库10.0.0.11和从库10.0.0.12的角色

步骤如下:(命令略)

用 fsync 命令暂停 主库 上的写操作,
关闭 从库 上的服务
清空 从库 上的 local.*文件
用-master 选项重启 从库 服务
在 从库 上执行一次写操作,初始化 oplog,获得一个同步起始点
关闭 从库 服务,此时 从库 已经有了新的 local.*文件
关闭 主库 服务,并且用 从库 上新的 local.*文件来代替 主库 上的 local.*文件(建议先压缩再COPY)
用-master 选项重启 从库 服务
在启动slave的选项上加一个-fastsync 选项来重启 主库 服务
 

转载请注明: 转载自http://www.elain.org

本文链接地址:MongoDB实战系列之三:MongoDB的主从部署




本文转自 elain2012 51CTO博客,原文链接:http://blog.51cto.com/elain/760266

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
3月前
|
NoSQL Java 测试技术
|
4月前
|
NoSQL Java 测试技术
spring boot MongoDB实战(二)
spring boot MongoDB实战
84 1
|
4月前
|
存储 NoSQL Linux
MongoDB【部署 02】mongodb使用配置文件启动、添加为系统服务及自启动(一个报错:[13436][NotMasterOrSecondary])
MongoDB【部署 02】mongodb使用配置文件启动、添加为系统服务及自启动(一个报错:[13436][NotMasterOrSecondary])
226 0
|
4月前
|
存储 JSON 分布式计算
MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
156 0
|
4月前
|
NoSQL Java MongoDB
Spring Boot中MongoDB的使用和实战
Spring Boot中MongoDB的使用和实战
63 0
|
3月前
|
存储 NoSQL Linux
|
3月前
|
NoSQL Java 测试技术
5-MongoDB实战演练
MongoDB实战演练
|
3月前
|
NoSQL 安全 物联网
检索时间减少83%!部署MongoDB后,通用电气医疗集团狠狠提升了物联网设备的利用效率!
作为医疗技术领域的全球领导者,通用电气医疗集团选择了 MongoDB由其管理旗下物联网设备,从部署(生命周期初期,即 BoL)到报废(生命周期结束,即 EoL)的整个生命周期
1828 3
检索时间减少83%!部署MongoDB后,通用电气医疗集团狠狠提升了物联网设备的利用效率!
|
4月前
|
存储 NoSQL MongoDB
MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储
MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储
200 0
|
4月前
|
NoSQL MongoDB 数据库
MongoDB【部署 03】Windows系统安装mongodb并设置用户名密码(无需安装mongosh)及SpringBoot集成报错 Command failed with error 18
MongoDB【部署 03】Windows系统安装mongodb并设置用户名密码(无需安装mongosh)及SpringBoot集成报错 Command failed with error 18
143 0