在生产环境中单台数据库已不能满足业务需求,数据库主从复制在架构中使用很常见,用于备份、高可用、读写分离来提高数据处理性能和冗余,常用架构模式是一主一从、一主多从、双主。但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配置
[root@localhost ~]# mkdir /usr/local/mongodb/data [root@localhost ~]# mkdir /usr/local/mongodb/logs [root@localhost ~]# mkdir /usr/local/mongodb/conf
[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配置
[root@localhost ~]# mkdir /usr/local/mongodb/data [root@localhost ~]# mkdir /usr/local/mongodb/logs [root@localhost ~]# mkdir /usr/local/mongodb/conf
[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、添加环境变量并启动
[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有很大区别。
[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、查看主从复制状态
#查看主
[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) >
#查看从
[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管理脚本
[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
[root@localhost ~]# chmod +x /etc/init.d/mongod [root@localhost ~]# chkconfig --add mongod [root@localhost ~]# chkconfig mongod on
Mongdb主从复制就完事了,比Myslq简单吧,比较灵活。