一、关于mongodb MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当***能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 |
三、mongodb分布式部署方式服务器部署可以有多种方式。首先,每台config server、mongos、mongod都可以是单独的服务器,但这样会导致某些服务器的浪费,比如config server。下图为物理机共享的集群部署,不需要额外加机器。
当然也有其他的方案,比如把mongos部署在所有的mongod(server1-6)上,又或者在每个运用服务器(server7)上部署mongos。这样部署有个好处在于,appserver和mongos之间的通信建立在localhost interface上,减少了通信成本。当然,此乃官方说法,但本人有想法,尽管减少了appserver和mongos之间的通信成本,但mongos与mongod之间的通信成本却增加了,而且把mongos部署在appserver上并不是很利于sa管理,mongoDB应该是一个相对独立的系统,与应用的耦合度应该尽量降到最低,万一应用想要换数据库,也能多少减少些工作量。 |
四、mongodb分布式的安装
1、下载
- wget
2、安装
- tar zxvf mongodb-linux-2.0.4.tgz
- cp -fr mongodb-linux-*2.0.4/* /data/mongodb/
- mkdir -p /data/mongodb/data/ #创建数据存储目录
- mkdir -p /data/mongodb/log/ #创建日志存储目录
- mkdir -p /data/mongodb/config/ #创建配置存储目录
- mkdir -p /data/mongodb/arbiter/ #创建仲裁节点存储目录
3、单机模式以及个参数说明
- mongod --fork --bind_ip 127.0.0.1 --port 11811 --dbpath /data0/mongodb/data --directoryperdb --logpath /data0/mongodb/log/db1.log --logappend --nohttpinterface
- netstat -ntlp|grep mongod
- 简单的参数说明:
- –logpath 日志文件路径
- –master 指定为主机器
- –slave 指定为从机器
- –source 指定主机器的IP地址
- –pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
- –logappend 日志文件末尾添加
- –port 启用端口号
- –fork 在后台运行
- –only 指定只复制哪一个数据库
- –slavedelay 指从复制检测的时间间隔
- –auth 是否需要验证权限登录(用户名和密码)
- –noauth 不需要验证权限登录(用户名和密码)
五、集群模式mongos,mongod,configsvr
- 1.Shard分片--
- 第一组分片
- 192.168.200.226:
- /data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface
- #启动rep1分片的一个数据节点
- /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log #启动路由节点,读取201.226上的配置节点的配置文件,(在配置节点启动后启动)
- /data/mongodb/bin/mongod --replSet rep1 --fork --port 11814 --dbpath /data/mongodb/arbiter --directoryperdb --logpath /data/mongodb/log/arbiter.log --logappend --nohttpinterface
- #启动分片的仲裁节点
-
- 192.168.201.226:
- /data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface
- #启动rep1分片的第二个数据节点
- /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log
- #启动第二个路由节点 (在配置节点启动后启动)
-
- 2.ConfigServer---
- #启动config server
- 192.168.201.226:
- /data/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config --port 11812 --fork --logpath /data/mongodb/log/mc.log
- #启动配置节点,注意配置节点应该优先启动,不然路由节点读取不到配置节点信息则会启动失败。
- 3.Mongos路由---
- #启动mongos,指定config server, chunkSize 256M
- 192.168.201.226:
- /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log
- #启动路由节点
由于机器有限,只配置了一个shard分片,该分片里有2个节点,新增加分片只需对应改replSet 名称即可。
- 4.配置replSet: 连接任一mongod members
-
- mongo 192.168.201.226:11813
- config = {_id: 'rep1', members: [
- {_id: 0, host: '192.168.200.226:11813', priority: 2}, #priority 为定义优先级,默认为1,高优先级会被认为是主节点优先启用。
- {_id: 1, host: '192.168.201.226:11813'},
- {_id: 2, host: '192.168.200.226:11814', arbiterOnly: true}]
- }
- rs.initiate(config);
- rs.status()
- 5.连接mongos增加shard 80G
-
- mongo 192.168.201.226:11811/admin
- show dbs
- use admin
- db.runCommand({addshard:'rep1/192.168.201.226:11813,192.168.200.226:11813',maxsize:81920})
- db.runCommand({listshards:1})
- 6.连接mongos增加创建test库和c1集合,并测试
-
- mongo 192.168.201.226:11811/admin
- db.runCommand({enablesharding:'test'})
- printShardingStatus()
- db.runCommand({shardcollection:'test.auto_increment_id', key:{_id:1}, unique : true})
- db.runCommand({shardcollection:'test.c1', key:{_id:1}, unique : true})
- for (var i = 1; i <= 100; i++)db.c1.save({id:i,value1:"1234567890",value2:"1234567890",value3:"1234567890",value4:"1234567890"})
- db.c1.stats()
-
- db.createCollection("cap_coll", {capped:true, size:100000, max:100});
- db.mycoll.validate();
-
- 7.检查: db.printCollectionStats()
-
- 8.管理: mongo 127.0.0.1:11811
- show dbs
- use admin
- show collections
- db.serverStatus()
- db.shutdownServer()
- exit
- 9.索引:
- db.product_data.ensureIndex({data_id: 1}, {unique: true,dropDups: true}); #创建索引
- db.product_data.dropIndexes(); #删除索引
至此,mongodb的分布式架构就架起来了,并且通过测试和log的分析,可看服务是否正常,下面就需要php客户端的支持,和程序的运行,之后加到监控里,就可以在线上部署使用了。
|
阅读(1252) | 评论(0) | 转发(0) |