Mongodb主从模式篇

主从模式架构图:

主从配置安装:

10.10.20.160(master)-->10.10.20.161(slave)

Master

tar zxvf mongodb-linux-x86_64-2.2.2.tgz

ln -s mongodb-linux-x86_64-2.2.2 mongodb

mkdir -p /u01/mongodata/db/geomaster/

mkdir -p /u01/mongodata/log/

/usr/local/mongodb/bin/mongod --fork --port40000 --dbpath /u01/mongodata/db/geomaster/ --logpath/u01/mongodata/log/geomaster.log --logappend –master

Slave

tar zxvf mongodb-linux-x86_64-2.2.2.tgz

ln -s mongodb-linux-x86_64-2.2.2 mongodb

mkdir -p /u01/mongodata/db/geomaster/

mkdir -p /u01/mongodata/log/

/usr/local/mongodb/bin/mongod --fork --port40000 --dbpath /u01/mongodata/db/geoslave/ --logpath /u01/mongodata/log/geosalve.log–logappend --slave --source 10.10.20.160:40000

参数说明:

mongod为mongoDB的server程序,启动参数使用的主要有如下几个

--fork fork出一个server端的daemon进程

--port server监听端口

--dbpath 数据文件目录

--logpath 日志文件路径

--logappend 日志追加到日志文件中,而不是覆盖写入

mongod在主从情况下可以设置的参数有:

--master master模式

--salve salve模式

--source salve模式下指定master<server:port>

--only 只复制某一个数据库

--salvedelay 从库从主库中同步延时

--autoresync 假如从库数据不同步,自动同步

主从配置完毕后测试:

Master

/usr/local/mongodb/bin/mongo -port 40000

use test;

db.createCollection("table1");

db.test.table1.insert({tag:"test"});

db.test.table1.find();

slave

/usr/local/mongodb/bin/mongo -port 40000

db.test.table1.find();

有数据,说明同步成功

同步后在master上用db.currentOp()也能看到slave的线程

主从相关命令:

db.isMaster():主从都可执行,用这个命令判断是不是master

db.getReplicationInfo():主上执行,获取主从信息

db.printReplicationInfo():主从都可执行,获取主从信息

db.printSlaveReplicationInfo();:从库执行,查看主从延时

同步失败处理方法:

如果同步失败,可使用如下命令同步所有数据:

同步出现问题,日志会有如下记录

TueFeb 19 16:31:45 [replslave] all sources dead: data too stale haltedreplication, sleeping for 5 seconds

都是每5秒重试,一直在重试,那么如果要解决只能执行下面的命令全部同步一下

Use admin

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

也可在启动从库时添加--autoresync参数

同步原理:

同步就是master上把对数据的更改操作记录到oplog中,然后slave抓取master的oplog执行。从这点看Oplog的功能和mysql的mysql-bin.的功能类似。Mysql-bin以二进制日志的形式存在,但是oplog是以一个mongodb的表的形式存在,该表在local库表名为oplog.$main,该表为循环写入形,所以不用定时清理。

修改oplog大小:

我们在首次启动mongodb服务的时候如果没有设置oplog的大小,那么它的默认值将是所在硬盘的5%,那么如果我们想要改变大小呢,必须重启,然后在启动的时候设置oplogsize,不过还有个小问题,因为之前的oplog已经存在了,所以修改完大小启动会报错,Tue Feb 19 15:43:19[initandlisten] cmdline oplogsize (10) different than existing (1779),解决方法就是将mongodb数据目录下的local.*删除,参见:http://api.mongodb.org/wiki/current/Halted%20Replication.html

由于删除后oplog是重建的,slave的时间点信息比master上oplog的开始时间点要小,所以从库只能做全同步才能继续同步。但是有个问题,如果主库数据非常多的话,做一次全同步是一件非常耗时的事,况且数据也没有丢失。那么现在有个小技巧:

  1. 关闭slave的mongo服务
  2. Master上在我们删除local.*之后,不要急着启动服务,先用linux的date命令更改系统时间,让时间小于slave上同步的最后时间,也就是slave执行db.printSlaveReplicationInfo()看到的时间
  3. 然后启动主库和从库方能继续同步
时间: 2024-08-01 00:20:30

Mongodb主从模式篇的相关文章

mongodb主从模式部署

mongodb部署采用主从模式,主节点为:peiwo-turn4,从节点为peiwo-proxy 1.创建部署用户与部署路径.日志.数据存放路径 在peiwo-proxy主机上执行以下操作 groupadd mongodb useradd -g mongodb -d /usr/local/mongodb mongodb mkdir -p /data0/mongodb/logs  #日志文件存放路径 mkdir -p /data0/mongodb/data/master #数据文件存放路径 mkd

Linux系统mongodb主从模式配置

一.环境 操作系统: # uname -r 2.6.32-358.el6.x86_64 # cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m 主:192.168.137.148 从:192.168.137.154 二.主从同步系统时间 #ntpdate ntp.api.bz && hwclock -w --systohc 三.安装 #wget  #tar xf mongodb-linux-x86_64-enterpri

Mongodb sharding模式篇

8台机器,4个分片及其各自之间的角色分配: 注意:上表中颜色相同的代表在同一台服务器上,其实也可以每个成员单放一台机器,但是比如像arbiter(仲裁节点),configserver(配置服务器),mongos(路由)本身消耗资源不是很大,可以复用,但是一台服务器最好只运行一个mongod.所以我们采用的一台服务器只运行了一个mongod和1至2个其他组成员,注意,一台服务器上不要运行同一组的多个成员,这样就起不到冗余的作用了. //shard1 10.10.6.48 10.10.6.46 su

Mongodb的主从模式搭建实例

对数据库来说,为了保证数据的安全性和高可用性,往往会采用主从架构模式,对于Mongodb也是如此,这篇文章将讲述一下如何搭建一个简单的Mongodb主从架构模型. 在下面的实例中,因为没有多个服务器的原因,在一台服务器上进行了实验,采用不同的端口号进行区分主从. 首先我们需要的是下载Mongodb的官方版本,这里我下载的是2.4.1的Linux版本,并在Linux下进行解压,然后创建两个文件夹master和slave,分别存放主Mongodb实例和从mongodb实例. 然后我们首先启动mast

mongodb高可用集群01---单实例、主从模式、一主多从模式

本人根据此文章进行学习:http://blog.jobbole.com/72610/ 会不断更新内容主要分为四大模块: mongodb各种方式的部署 常用使用[工作不用就没必要学了,精力有限] 性能优化 故障排除 很多会和网上资料一样,主要是自己学习不断梳理资料,追求:提及精华 单实例: 1)建立mongodb测试文件 #存放整个mongodb文件 mkdri-p /data/mongodbtest/single #mongodb数据文件 mkdir /data/mongodbtest/data

MongoDB主从

数据存储是整个系统中非常重要的一部分,在MySQL.Redis中都有主从架构,能够在一定程度上保证数据的安全性和高可用性,而MongoDB中也是有这种实现方式.主从配置非常简单,但是随着技术的发展已经很少采用主从架构,而更多的是采用副本集或者集群的模式去实现高可用. 简单的介绍一下MongoDB主从实现的方式和 环境: 操作系统:CentOS 6.7 MongoDB:  3.4.5 主数据目录:/data/mongomaster 从数据目录: /data/mongoslave MongoDB 管

mongoDB主从和副本集群配置

mongoDB主从和副本集群配置 Mongodb是时下流行的NoSql数据库(MongoDB是一个基于分布式文件存储的数据库),它的存储方式是文档式存储,并不是Key-Value形式.   优势: 快速!(当然,这和具体的应用方式有关,通常来说,它比一般的关系型数据库快5位左右.) 很高的可扩展性–轻轻松松就可实现PB级的存储(但是可能我们并不需要PB级的存储,10TB可能就够了) 他有一个很好的 replication 模式 (replica sets) 有很完善的Java API 他的存储格

redis 4.0.13 -- 主从模式

1.前提 本文使用的是redis-4.0.13.tar.gz版本. redis各版本下载地址:http://download.redis.io/releases/, 下载与安装单个redis查看我的另一篇<redis 4.0.13 -- 单个redis下载.安装.启动.验证>的“1.下载与初始化redis” 按照我之前的文章<redis 4.0.13 -- 单个redis下载.安装.启动.验证>先在两个虚拟机上分别安装一个redis 2.修改redis.conf配置 修改其中一个你

MongoDB主从+php实现

环境 172.16.115.202   primary 172.16.111.171   secondary 172.16.115.157   secondary 一.MongoDB安装 1. yum下载安装mongodb  扩展源http://repo.mongodb.org/yum/redhat/mongodb-org-3.0.repo mongodb-org-3.0.7-1.el6.x86_64.rpm #元数据包,它可以实现自动安装下面的4个组件包 mongodb-org-mongos-