在生产环境中单台数据库已不能满足业务需求,数据库主从复制在架构中使用很常见,用于备份、高可用、读写分离来提高数据处理性能和冗余,常用架构模式是一主一从、一主多从、双主。但MongoDB中还不能做到双向同步,因此无法实现双主。那我们这次架构采用的是一主一从,在生产环境中主主要承担写操作,从承担读操作。
环境说明:
OS:CentOS6.5_x64
主(Master):192.168.0.201
从(Slave):192.168.0.202
主从数据库目录都在 /usr/local/mongodb/data
日志目录 /usr/local/mongodb/logs
1、主mongodb配置
1
2
3
|
[root@localhost ~]
# mkdir /usr/local/mongodb/data
[root@localhost ~]
# mkdir /usr/local/mongodb/logs
[root@localhost ~]
# mkdir /usr/local/mongodb/conf
|
1
2
3
4
5
6
7
8
9
|
[root@localhost ~]
# vi /usr/local/mongodb/conf/mongod.conf
port=27017
#端口号
fork=
true
#以守护进程方式运行
logpath=
/usr/local/mongodb/logs/mongodb
.log
#日志文件
logappend=
true
#日志输出方式
dbpath=
/usr/local/mongodb/data
#数据库位置
maxConns=1024
#数据库最大连接数
master=
true
#主模式
oplogSize=2048
#日志滚动,单位M
|
2、从Mongodb配置
1
2
3
|
[root@localhost ~]
# mkdir /usr/local/mongodb/data
[root@localhost ~]
# mkdir /usr/local/mongodb/logs
[root@localhost ~]
# mkdir /usr/local/mongodb/conf
|
1
2
3
4
5
6
7
8
9
10
|
[root@localhost ~]
# vi /usr/local/mongodb/conf/mongod.conf
port=27017
fork=
true
logpath=
/usr/local/mongodb/logs/mongodb
.log
logappend=
true
dbpath=
/usr/local/mongodb/data
maxConns=1024
slave=
true
#从模式
source
=192.168.0.201:27017
#指定主Mongodb
autoresync=
true
#自动同步
|
3、添加环境变量并启动Mongodb
1
2
3
4
5
6
|
[root@localhost ~]
# echo "PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile
[root@localhost ~]
# source /etc/profile
[root@localhost ~]
# mongod -f /usr/local/mongodb/conf/mongod.conf #启动
[root@localhost ~]
# netstat -tupln | grep mongod
tcp 0 0 0.0.0.0:28017 0.0.0.0:* LISTEN 1923
/mongod
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1923
/mongod
|
#主上日志信息看出主数据库允许让192.168.0.202从数据库45458端口连接
#从上日志信息看出开始同步192.168.0.201主数据库
4、测试Mongodb主从复制
#创建一个数据库test,集合名也是test,插入一个字段AGE:18。然后再从数据库showdbs;查看已经同步过去。语法与Mysql有很大区别。
1
2
3
4
5
6
7
8
9
10
|
[root@localhost ~]
# mongo
MongoDB shell version:2.4.9-rc0
> use
test
> db.
test
.save({AGE:18})
> db.
test
.
find
()
{
"_id"
:ObjectId(
"52addd66124c02eb8b2d1a5a"
),
"AGE"
: 18 }
> show dbs
local
2.0771484375GB
test
0.203125GB
>
|
主日志
从日志
创建数据库后,由上主从日志看出,主允许从连接,从同步主数据(applied 1 operations)。主数据库操作记录为OpLog日志,说明主从数据库原理是定期从主服务器中获取oplog记录,然后在本机上执行。
5、查看主从复制状态
#查看主
1
2
3
4
5
6
7
8
9
10
|
[root@localhost ~]
# mongo
MongoDB shell version:2.4.9-rc0
connecting to:
test
>db.printReplicationInfo()
configured oplog size: 2048MB
log length start to end:1494secs (0.42hrs)
oplog first event
time
: Sun Dec 15 2013 10:55:37 GMT-0500 (EST)
oplog last event
time
: Sun Dec 15 2013 11:20:31 GMT-0500 (EST)
now: Sun Dec 15 2013 11:20:33GMT-0500 (EST)
>
|
#查看从
1
2
3
4
5
6
7
8
9
|
[root@localhost ~]
# mongo
MongoDB shell version: 2.4.9-rc0
connecting to:
test
>db.printReplicationInfo()
this is a slave, printingslave replication info.
source
: 192.168.0.201:27017
syncedTo: Sun Dec 15 2013 11:18:31GMT-0500 (EST)
= 21 secs ago (0.01hrs)
>
|
#关闭Mongodb数据库
[root@localhost ~]# mongod -f/usr/local/mongodb/conf/mongod.conf --shutdown
#写一个简单的SysV管理脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@localhost ~]
# vim /etc/init.d/mongod
#!/bin/bash
#chkconfig: 35 80 20
#description: Mongodb service control script
PROG=
"/usr/local/mongodb/bin/mongod"
CONF=
"/usr/local/mongodb/conf/mongod.conf"
case
$1
in
start)
$PROG -f $CONF &>
/dev/null
echo
"Starting mongodb: [ OK ]"
;;
stop)
$PROG -f $CONF --
shutdown
&>
/dev/null
echo
"Shutting down mongodb: [ OK ]"
;;
restart)
$0 stop
$0 start
;;
*)
echo
"Usage: $0 {start|stop|restart}"
esac
|
1
2
3
|
[root@localhost ~]
# chmod +x /etc/init.d/mongod
[root@localhost ~]
# chkconfig --add mongod
[root@localhost ~]
# chkconfig mongod on
|
Mongdb主从复制就完事了,比Myslq简单吧,比较灵活。
本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1348589,如需转载请自行联系原作者