mongodb集群部署
一、MongoDB
1.1 介绍
MongoDB是开源的一个分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
1.2 特点
高性能、易部署、易使用,存储数据非常方便。
1.3 主要功能特性
Ø 面向集合存储,易存储对象类型的数据
Ø 模式自由
Ø 支持动态查询
Ø 支持完全索引,包含内部对象
Ø 支持查询
Ø 支持复制和故障恢复
Ø 使用高效的二进制数据存储,包括大型对象(如视频等)
Ø 自动处理碎片,以支持云计算层次的扩展性
Ø 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言
Ø 文件存储格式为BSON(一种JSON的扩展)
1.4 MongoDB集成hadoop进行统计计算
MongoDB还提供了对外部统计工具的接口,MongoDB与Hadoop相结合。MongoDB作为数据源存储以及数据结果的存储,而具体的计算过程在Hadoop中进行。
二、MongoDB集群架构
2.1 架构图
路由分片的架构
2.2 路由服务器 - mongos
请求分发中心,负责把请求分拨到shard服务器上
192.168.1.150:20000 192.168.1.151:20000 192.168.1.107:20000
2.3 配置服务器 - configServer
存储数据库元信息配置(路由、分片数据)
① mongos第一次启动、关掉重启都会从 config server 加载配置信息;
② 以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态;
③ configServer保证mongos可以准确路由;
192.168.1.150:21000 192.168.1.151:21000 192.168.1.107:21000
2.4 节点服务器 - shard
节点服务器负责存储mongo数据库的数据,分为主节点、副本节点以及仲裁节点。
分片
例如:
一台机器的一个数据表 Collection1 存储了 1T 数据,压力太大了!在分给4个机器后,每个机器都是256G,则分摊了集中在一台机器的压力。
主节点
192.168.1.150:22001 (shard1) 192.168.1.150:22002 (shard2) 192.168.1.150:22003 (shard3)
副本节点
192.168.1.151:22001 (shard1) 192.168.1.151:22002 (shard2) 192.168.1.151:22003 (shard3)
仲裁节点
192.168.1.107:22001 (shard1) 192.168.1.107:22002 (shard2) 192.168.1.107:22003 (shard3)
三、集群部署
3.1 准备机器
机器A:192.168.1.150
机器B:192.168.1.151
机器C:192.168.1.107
3.2 创建目录
mongos目录
mkdir -p /root/data/mongodb/mongos/data mkdir -p /root/data/mongodb/mongos/log
config server 数据文件存放目录
mkdir -p /root/data/mongodb/config/data mkdir -p /root/data/mongodb/config/log
节点数据目录
shard1 存放目录 mkdir -p /root/data/mongodb/shard1/data mkdir -p /root/data/mongodb/shard1/log shard2 存放目录 mkdir -p /root/data/mongodb/shard2/data mkdir -p /root/data/mongodb/shard2/log shard3 存放目录 mkdir -p /root/data/mongodb/shard3/data mkdir -p /root/data/mongodb/shard3/log
3.3 启动configServer服务
mongod --configsvr --dbpath /root/data/mongodb/config/data --port 21000 --logpath /root/data/mongodb/config/log/config.log --fork
3.4 启动mongos服务
mongos --configdb 192.168.1.150:21000,192.168.1.151:21000,192.168.1.107:21000 --port 20000 --logpath /root/data/mongodb/mongos/log/mongos.log
3.5 启动节点服务
mongod --shardsvr --replSet shard1 --port 22001 --dbpath /root/data/mongodb/shard1/data --logpath /root/data/mongodb/shard1/log/shard1.log --fork --nojournal --oplogSize 10 mongod --shardsvr --replSet shard2 --port 22002 --dbpath /root/data/mongodb/shard2/data --logpath /root/data/mongodb/shard2/log/shard2.log --fork --nojournal --oplogSize 10 mongod --shardsvr --replSet shard3 --port 22003 --dbpath /root/data/mongodb/shard3/data --logpath /root/data/mongodb/shard3/log/shard3.log --fork --nojournal --oplogSize 10
3.6 设置分片副本集
3.6.1 登陆机器A,设置第一个分片副本集
mongo 127.0.0.1:22001 use admin; config = { _id:"shard1", members:[ {_id:0,host:"192.168.1.150:22001"}, {_id:1,host:"192.168.1.151:22001"}, {_id:2,host:"192.168.1.107:22001",arbiterOnly:true} 【仲裁节点】 ] } rs.initiate(config);
3.6.2 登陆机器A,设置第二个分片副本集
mongo 127.0.0.1:22002 use admin; config = { _id:"shard2", members:[ {_id:0,host:"192.168.1.150:22002"}, {_id:1,host:"192.168.1.151:22002"}, {_id:2,host:"192.168.1.107:22002",arbiterOnly:true}【仲裁节点】 ] }; rs.initiate(config);
3.6.3 登陆机器A,设置第三个分片副本集
mongo 127.0.0.1:22003 use admin; config = { _id:"shard3", members:[ {_id:0,host:"192.168.1.150:22003"}, {_id:1,host:"192.168.1.151:22003"}, {_id:2,host:"192.168.1.107:22003",arbiterOnly:true}【仲裁节点】 ] }; rs.initiate(config);
3.7 configServer分片配置
mongo 127.0.0.1:20000 串联路由服务器与分配副本集 use admin; db.runCommand( { addshard : "shard1/192.168.1.150:22001,192.168.1.151:22001,192.168.1.107:22001"}); db.runCommand( { addshard : "shard2/192.168.1.150:22002,192.168.1.151:22002,192.168.1.107:22002"}); db.runCommand( { addshard : "shard3/192.168.1.150:22003,192.168.1.151:22003,192.168.1.107:22003"});
3.8 设置需要分片的数据库和表
db.runCommand( { enablesharding :"testdb"}); db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
3.9 测试分片配置结果
mongo 127.0.0.1:20000
use testdb; for (var i = 1; i <= 100000; i++) db.table1.save({id:i,"test1":"testval1"}); db.table1.stats();
{ "sharded" : true, "ns" : "testdb.table1", "count" : 100000, "numExtents" : 13, "size" : 5600000, "storageSize" : 22372352, "totalIndexSize" : 6213760, "indexSizes" : { "_id_" : 3335808, "id_1" : 2877952 }, "avgObjSize" : 56, "nindexes" : 2, "nchunks" : 3, "shards" : { "shard1" : { "ns" : "testdb.table1", "count" : 42183, "size" : 0, ... "ok" : 1 }, "shard2" : { "ns" : "testdb.table1", "count" : 38937, "size" : 2180472, ... "ok" : 1 }, "shard3" : { "ns" : "testdb.table1", "count" :18880, "size" : 3419528, ... "ok" : 1 } }, "ok" : 1 }