MongoDB主从复制

MongoDB 主从复制

环境:

Win 7

MongoDB软件位置:D:\Program Files (x86)\mongodb

主库数据文件位置:D:\MongoData\7777

主库端口:                       7777

主库启动配置文件:     D:\MongoData\7777.cnf

从库数据文件位置:D:\MongoData\8888

从库端口:                       8888

从库启动配置文件:     D:\MongoData\8888.cnf

 

MongoDB 的最新版本已不再推荐此方案。

配置文件设置

主库配置文件

dbpath=D:\MongoData\7777

port=7777

bind_ip=127.0.0.1

master=true

 

从库配置文件

dbpath=D:\MongoData\8888

port=8888

bind_ip=127.0.0.1

slave=true

source=127.0.0.1:7777

 

 

启动数据库

在命令窗口

mongod –config D:\MongoData\7777.cnf

先在主库上插入一条数据

C:\Users\Dillon>mongo 127.0.0.1:7777

MongoDB shell version: 2.0.9

connecting to: 127.0.0.1:7777/test

> use zd

switched to db zd

> db.persons.insert({name:"zd"})

> db.persons.find();

{ "_id" : ObjectId("534a706360baf06eb370f7ff"), "name" : "zd" }

 

 

启动从库

mongod –config D:\MongoData\8888.cnf

查询从库的记录

C:\Users\Dillon>mongo 127.0.0.1:8888

MongoDB shell version: 2.0.9

connecting to: 127.0.0.1:8888/test

> show dbs

local   0.078125GB

zd      0.078125GB

> use zd

switched to db zd

> show collections;

persons

system.indexes

> db.persons.find();

{ "_id" : ObjectId("534a706360baf06eb370f7ff"), "name" : "zd" }

 

主从同步实验

 

在主库插入一条新的记录

> db.book.insert({name:"MongoDB"})

 

在从库中查询

> db.book.find();

{ "_id" : ObjectId("534a70f660baf06eb370f800"), "name" : "MongoDB" }

 

Slave顶替Master

 

如果上面的主服务器7777宕了,此时需要用8888机器来顶替master服务,步骤如下:

   停止B进程(mongod)

   删除B数据目录中的local.*

   --master模式启动B

 

首先将

C:\Users\Dillon>mongod --config D:\MongoData\7777.cnf

所在的cmd进程ctrl +C,停止掉,模拟7777主库宕机。

 

此时在备库的cmd终端上有如下显示信息

Sun Apr 13 19:43:57 [replslave] repl: sleep 3 sec before next pass

Sun Apr 13 19:44:00 [replslave] repl: from host:127.0.0.1:7777

Sun Apr 13 19:44:01 [replslave] repl:  couldn't connect to server 127.0.0.1:7777

 

现在停止8888从库进程

所在的cmd进程ctrl +C,停止掉8888从机

 

进入D:\MongoData\8888,删除目录中的local.*

删除这两项

 

配置新的配置文件

dbpath=D:\MongoData\8888

port=8888

bind_ip=127.0.0.1

master=true

 

 

再次启动从库

C:\Users\Dillon>mongod --config D:\MongoData\8888B.cnf

Sun Apr 13 19:49:28 [initandlisten] MongoDB starting : pid=6940 port=8888 dbpath

=D:\MongoData\8888 master=1 64-bit host=Dillon-PC

Sun Apr 13 19:49:28 [initandlisten] db version v2.0.9, pdfile version 4.5

Sun Apr 13 19:49:28 [initandlisten] git version: 7e34cb36a6ae64d527c0b0da81fa967

606c55433

Sun Apr 13 19:49:28 [initandlisten] build info: windows sys.getwindowsversion(ma

jor=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB

_VERSION=1_42

Sun Apr 13 19:49:28 [initandlisten] options: { bind_ip: "127.0.0.1", config: "D:

\MongoData\8888B.cnf", dbpath: "D:\MongoData\8888", master: "true", port: 8888 }

Sun Apr 13 19:49:28 [initandlisten] journal dir=D:/MongoData/8888/journal

Sun Apr 13 19:49:28 [initandlisten] recover : no journal files present, no recovery needed

Sun Apr 13 19:49:28 [initandlisten] ******

Sun Apr 13 19:49:28 [initandlisten] creating replication oplog of size: 8418MB...

Sun Apr 13 19:49:28 [initandlisten] ******

Sun Apr 13 19:49:28 [initandlisten] waiting for connections on port 8888

Sun Apr 13 19:49:29 [websvr] admin web console waiting for connections on port 9888

 

验证新的主库插入数据的操作

C:\Users\Dillon>mongo 127.0.0.1:8888

MongoDB shell version: 2.0.9

connecting to: 127.0.0.1:8888/test

> show dbs

local   10.0732421875GB

zd      0.078125GB

> use zd

switched to db zd

> show collections

book

persons

system.indexes

> db.persons.insert({name:"Dillon"})

> db.persons.find();

{ "_id" : ObjectId("534a706360baf06eb370f7ff"), "name" : "zd" }

{ "_id" : ObjectId("534a7a1a8f3b19faafd337ff"), "name" : "Dillon" }

 

新的主库设置完毕!

 

切换Master/Slave角色

 

假设已经具备主机A和从机B,此时想切换它们的角色,步骤如下:(假设A是健康的)

1) sync命令暂停A上的内存数据保存在磁盘中

2) 确定B是从机,关闭B上的服务

3) 清空B上的local.*文件

4) -master选项重启B服务

5) B上执行一次写操作,初始化oplog,获得一个同步起始点

6) 关闭B服务,此时B已经有了新的local.*文件

7) 关闭A服务,并且用B上新的local.*文件来代替A上的local.*文件(如果文件过大,可以先将文件压缩)

8) -master选项重启B服务

9) 在启动slave时选项上加一个-fastsync选项来重启A服务

如果A不是健康的,但是硬件是健康的,那么跳过上面的前两步,并且用B上所有文件去替换A上的文件,重启服务。

 

 

主从复制相关参数

主从复制的其他设置项

Master

--master master模式

--oplogSize arg size limit (in MB) for op log

Slave

--slave slave模式

--source arg source指定master位置

--only arg单独指定备份某一database

--slavedelay arg指定与Master延迟时间(秒)

--autoresync当Slave数据过时后自动重连

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值