转自: http://www.open-open.com/lib/view/open1341304885621.html
主从同步:
md01 10.0.0.11 master
md02 10.0.0.12 slave
md03 10.0.0.14 slave
#建立数据库目录
mkdir
-p
/elain
/apps
/mongodb
/
mkdir
-p
/elain
/data
/mongodb
/db
/
mkdir
-p
/elain
/logs
/mongodb
/
注:
1、不需要像mysql一样复制完整数据过去,丛库启动会制动复制主库完整数据。
2、丛库自动配置为只读。
3、mongodb第一次启动时间较长,需要注意等待。
4、管理命令多数都要在admin库中执行 use admin
相关参数:./mongod –help
–autoresync 当发现从服务器的数据不是最新时,开始从主服务器请求同步数据
–slavedelay 同步延迟,单位:秒
主-从
作为主服务器启动
/elain
/apps
/mongodb
/bin
/mongod
--fork
--master
--oplogSize=
4096
--port
27001
--dbpath
/elain
/data
/mongodb
/db
--logpath
/elain
/logs
/mongodb
/mongodb.log
作为从服务器启动,并指明主服务器地址。–autoresync为强制从主服务器同步全部数据
/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=* 重新启动即可,*代表大小)
如果发现主从不同步,从上手动同步
db.runCommand
(
{
"resync":
1
}
)
状态查询
db.runCommand
(
{
"isMaster":
1
}
)
#主还是从
在丛库上查询主库地址
> use
local;
switched to db
local
> db.sources.find
(
);
{
"_id" : ObjectId
(
"4e9105515d704346c8796407"
),
"host" :
"10.0.0.11:27001",
"source" :
"main",
"syncedTo" :
{
"t" :
1318155992000,
"i" :
1
}
}
#查看各Collection状态
db.printCollectionStats
(
);
#查看主从复制状态
db.printReplicationInfo
(
);
测试主从
在主服务器新建数据库
mongo
--port
27001
>show dbs
>use elaindb
>db.blog.save
(
{title:
"new article"
}
)
在从服务器上查看同步数据
#在从库插入数据的操作 会提示 not master
> use elaindb;
switched to db elaindb
> db.blog.find
(
);
{
"_id" : ObjectId
(
"4e9174b48443c8ef12b30c56"
),
"title" :
"new article"
}
#查看主从同步信息:
> db.printReplicationInfo
(
);
this is a slave, printing slave replication info.
source: 10.0.0.11:
27001
syncedTo: Sun Oct 09
2011
18:
37:
12 GMT+0800
(CST
)
=
19 secs ago
(0.01hrs
)
>db.printSlaveReplicationInfo
(
);
#此为同步过来的数据,测试成功
附加:
添加及删除源:
启动从节点时可以用–source指定主节点,也可以在shell中配置这个源,
启动一个从,端口为27002
/elain
/apps
/mongodb
/bin
/mongod
--fork
--slave
--port
27002
--dbpath
/elain
/data
/mongodb
/testdb
--logpath
/elain
/logs
/mongodb
/mongodb.log
登录:
mongo
--port
27002
[root
@md03 ~
]
# mongo --port 27002
MongoDB shell version: 2.0.0
connecting to: 127.0.0.1:
27002
/
test
> show dbs
local
(empty
)
添加到从节点上
>use
local
>db.sources.insert
(
{
"host":
"10.0.0.11:27001"
}
);
#查看显示正在同步
> db.sources.find
(
);
{
"_id" : ObjectId
(
"4e9111e1c29bbd9b9cd31d4e"
),
"host" :
"10.0.0.11:27001",
"source" :
"main",
"syncedTo" :
{
"t" :
1318156782000,
"i" :
246
},
"dbsNextPass" :
{
"testdb" :
true,
"testdb1" :
true
}
}
#同步完成后
> db.sources.find
(
);
{
"_id" : ObjectId
(
"4e9111e1c29bbd9b9cd31d4e"
),
"host" :
"10.0.0.11:27001",
"source" :
"main",
"syncedTo" :
{
"t" :
1318156782000,
"i" :
256
}
}
更改源:(假设10.0.0.12也为主库)
db.sources.insert
(
{
"host":
"10.0.0.12:27001"
}
);
db.sources.remove
(
{
"host":
"10.0.0.11:27001"
}
);
若复制中使用了认证,需在local库中添加repl用户来复制
>user
local;
> db.addUser
(
"repl",
"elain123"
);
附录一、Slave 顶替 Master
如果主服务器 10.0.0.11 宕机了,
此时需要用 10.0.0.12 机器来顶替 master 服务,
步骤如下:
#停止 10.0.0.12 进程(mongod)
kill
-2
`
ps
-ef
|
grep mongod
|
grep
-v
grep
|
awk
''
''
{print
$2
}
''
''
`
#删除 10.0.0.12 数据目录中的 local.*
rm
-rf
/elain
/data
/mongodb
/db
/local.
*
#以–master 模式启动 10.0.0.12
/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 选项来重启 主库 服务