转载自:http://my.oschina.net/willSoft/blog/34993
需要启动的两个MongoDB文档数据库,一个是以主模式启动,另一 |
个属于从模式启动。因此,主服务器进程将创建一个local.oplog,将 |
通过这个“交易记录”同步到Slave服务器中。 |
1. 建立主/从服务器 |
主服务器:132.129.31.213:10111(A) |
从服务器:132.129.31.213:10112(B) |
启动Master数据库服务器: |
$./mongod –master -port=10111 -dbpath=/home/tsaip/mongodb/data/10111 |
-nohttpinterface & |
启动Slave数据库服务器:5s同步一次 |
$./mongod –slave –source=132.129.31.213:10111 -port=10112 |
-dbpath=/home/tsaip/mongodb/data/10112 –slavedelay 5 -nohttpinterface & |
测试同步结果: |
//登录master数据库服务器 |
$ ./mongo -host 132.129.31.213 -port 10111 |
MongoDB shell version: 1.8.2-rc2 |
connecting to: 132.129.31.213:10111/test |
> use test; |
switched to db test |
> db.user.insert({_id:1,name:'samlee',age:80}); |
> db.user.find(); |
{ "_id" : 1, "name" : "samlee", "age" : 80 } |
> |
//登录slave数据库服务器 |
$ ./mongo -host 132.129.31.213 -port 10112 |
MongoDB shell version: 1.8.2-rc2 |
connecting to: 132.129.31.213:10112/test |
> use test; |
switched to db test |
> db.user.find(); |
{ "_id" : 1, "name" : "samlee", "age" : 80 } |
21 |
|
> |
数据同步成功!! |
在slave数据库服务器上执行如下操作: |
> db.user.insert({_id:2,name:'Jack',age:23}); |
not master |
> |
提示not master ,所以slave服务器只可以执行读操作,不可以执行 |
写操作,如下图所示:
|
|
2. 相关参数说明 |
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数据过时后自动重连 |
|
22 |
|
3. Slave顶替Master |
如果上面的主服务器A宕了,此时需要用B机器来顶替master服务, |
步骤如下: |
停止B进程(mongod) |
删除B数据目录中的local.* |
以--master模式启动B |
4. 切换Master/Slave角色 |
a) 假设已经具备主机A和从机B,此时想切换它们的角色,步骤如下:(假设A是健康的) |
b) 用fsync命令暂停A上的写操作, |
c) 确定B是从机,关闭B上的服务 |
d) 清空B上的local.*文件 |
e) 用-master选项重启B服务 |
f) 在B上执行一次写操作,初始化oplog,获得一个同步起始点 |
g) 关闭B服务,此时B已经有了信的local.*文件 |
h) 关闭A服务,并且用B上新的local.*文件来代替A上的local.*文件(拷贝之前,记得先 |
压缩,因为文件可能很大) |
i) 用-master选项重启B服务 |
j) 在平时的slave选项上加一个-fastsync选项来重启A服务 |
|
如果A不是健康的,但是硬件是健康的,那么跳过上面的前两步,并且用B上所有文件去 |
替换A上的文件,重启服务。 |
5. 更新主服务器位置 |
假设现有从机启动方式如下: |
$ mongod --slave --source 132.129.31.213:10000 |
此时如果想更换主机的位置,可以通过以下的步骤来完成: |
重启mongod服务,不要加-slave 和 –source选项: |
$ mongod |
启动shell,执行如下操作: |
23 |
|
> use local |
switched to db local |
> db.sources.update({host : "132.129.31.213:10000"}, |
{$set : {host : "132.129.31.213:10001"}}) |
接着重启从机上的服务: |
$ ./mongod --slave --source 132.129.31.213:10001 |
$ # or |
$ ./mongod --slave |