1、概述
Mongo是一个高性能,开源,模式自由(schema-free)的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值(key-value)存储方式。Mongo使用C++开发,具有以下特性:
l 面向集合的存储:适合存储对象及JSON形式的数据。
l 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
l 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
l 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
l 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
l 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)。
l 自动分片以支持云级别的伸缩性(处于早期alpha阶段):自动分片功能支持水平的数据库集群,可动态添加额外的机器。
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。
MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。
MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。
2、主从复制
Ø 主从复制模型图:
Ø 从上面的图形中我们可以分析出这种架构有如下的好处:
<1>数据备份。
<2>数据恢复。
<3>读写分离。
2.1、建立主从数据库目录
mkdir -p /data0/mongodb/masterdb
mkdir -p /data0/mongodb/slavedb_1
mkdir -p /data0/mongodb/slavedb_2
2.2、启动主库服务器
为了方便以后使用,可以创建两个启动脚本文件置放在mongoDB启动路径的bin目录下,这两个文件分别为主库启动脚本和从库启动脚本,首先创建主库启动脚本文件,如下所示:
[root@mongo01bin]# vi master.sh
/usr/local/mongodb/mongodb-linux-x86_64-2.2.0/bin/mongod--dbpath /data0/mongodb/masterdb --port 10000 --master –smallfiles –fork
Ø 前台启动主库服务器
在mongoDB主机启动路径bin目录下输入前台启动命令:
~/bin/mongod--dbpath /data0/mongodb/masterdb --port 10000 --master --smallfiles
【注】后台启动命令如下(建议在实际使用环境中采用后台启动方式):
~/bin/mongod--dbpath /data0/mongodb/masterdb --port 10000 --master –smallfiles --fork
Ø 查看主库服务器前台启动消息
[root@mongo01bin]# ./ mongod --dbpath /data0/mongodb/masterdb --port 10000 --master--smallfiles
Fri Sep 1412:46:00 [initandlisten] MongoDB starting : pid=10515 port=10000dbpath=/data0/mongodb/masterdb master=1 64-bit host=mongo01
Fri Sep 1412:46:00 [initandlisten] db version v2.2.0, pdfile version 4.5
Fri Sep 1412:46:00 [initandlisten] git version: f5e83eae9cfbec7fb7a071321928f00d1b0c5207
Fri Sep 1412:46:00 [initandlisten] build info: Linux ip-10-2-29-402.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64BOOST_LIB_VERSION=1_49
Fri Sep 1412:46:00 [initandlisten] options: { dbpath:"/data0/mongodb/masterdb", master: true, port: 10000, smallfiles:true }
Fri Sep 1412:46:00 [initandlisten] journal dir=/data0/mongodb/masterdb/journal
Fri Sep 1412:46:00 [initandlisten] recover : no journal files present, no recovery needed
Fri Sep 1412:46:01 [initandlisten] preallocateIsFaster=true 12.84
Fri Sep 1412:46:02 [initandlisten] preallocateIsFaster=true 14.8