您的位置:首页 > 数据库 > Mongodb

MongoDB 分片集群搭建

2015-12-26 17:37 751 查看
一 .集群部署简介

       MongoDB 的部署方式十分灵活,可以使用单个 MongoDB 实例,也可以使用复制集和分片集群。在测试开发阶段一般使用单个 MongoDB 实例。由于云数 据中心需要存储海量数据且系统并发访问量大,所以需要使用 MongoDB 分片集 群存储数据,这里将使用三台机器来搭建 MongoDB 分片集群,其部署方式如下图所示。

                                  


        MongoDB 分片集群包括三个配置服务器,三个 mongos 路由服务器以及三 个分片组成,其中每个分片是由三个节点组成的复制集。 分片集群设备具体参数如下:

     主机配置:CPU 2GHZ 内存 4G 硬盘 250G

     操作系统:Ubuntu x86_64 GNU/Linux

     MongoDB:x86_64 Version 2.4.12

二.机器部署

MongoDB 分片集群部署步骤如下:

1) 创建数据目录

在每台服务器上使用如下脚本创建数据目录

home=/home/yuzhi/MongoDB

if [ ! -f "$home/ShardEnv" ];then

    #测试环境目录

    mkdir -p $home/ShardEnv

    #配置服务器的数据和日志目录

    mkdir -p $home/ShardEnv/config/data

    mkdir -p $home/ShardEnv/config/log

    #mongos 日志目录

    mkdir -p $home/ShardEnv/mongos/log

    #三个分片服务器的数据和日志目录

    mkdir -p $home/ShardEnv/shard1/data

    mkdir -p $home/ShardEnv/shard1/log

    mkdir -p $home/ShardEnv/shard2/data

    mkdir -p $home/ShardEnv/shard2/log

    mkdir -p $home/ShardEnv/shard3/data

    mkdir -p $home/ShardEnv/shard3/log

fi

        由于 mongos 服务器不需要存储数据,只需创建 mongos 服务器的日志目录, 配置服务器和片服务器需要包含数据目录和日志目录。

2) 启动配置服务器进程

在每台服务器上使用如下脚本来启动配置服务器 

    DataHome=/home/yuzhi/MongoDB/ShardEnv

    config_dbpath=$DataHome/config/data

    config_logpath=$DataHome/config/log/mongod.log

    mongod –configsvr --dbpath $config_dbpath –logpath $config_logpath –logappend --port 20000 --fork

3) 启动 mongos 进程

在每台服务器上运行如下脚本,来启动 mongos 进程 

   DataHome=/home/yuzhi/MongoDB/ShardEnv

   mongos_logpath=$DataHome/mongos/log/mongod.log

   config1=node1:20000

   config2=node2:20000

   config3=node3:20000

   mongos --configdb$config1,$config2,$config3 –logpath $mongos_logpath --logappend –port 30000 –fork

4) 启动分片进程

在每台服务器上运行如下脚本,来启动分片进程

    DataHome=/home/yuzhi/MongoDB/ShardEnv

    shard_dbpath_1=$DataHome/shard1/data

    shard_logpath_1=$DataHome/shard1/log/mongod.log

    shard_dbpath_2=$DataHome/shard2/data

    shard_logpath_2=$DataHome/shard2/log/mongod.log

    shard_dbpath_3=$DataHome/shard3/data

    shard_logpath_3=$DataHome/shard3/log/mongod.log

    mongod--shardsvr--replSetshard1--dbpath$shard_dbpath_1--logpath$shard_logpath _1 --logappend--port22001--fork

    mongod--shardsvr--replSetshard2--dbpath$shard_dbpath_2--logpath$shard_logpath _2 --logappend--port22002--fork

    mongod--shardsvr--replSetshard3--dbpath$shard_dbpath_3--logpath$shard_logpath _3 --logappend--port22003--fork

5) 配置每个分片的复制集

登陆mongo,添加相应的机器,其中分片 shard1 的配置如下:

yuzhi@node1:~/MongoDB/sh$ mongo node1:22001

MongoDB shell version: 2.4.12

connecting to: node1:22001/test

          > config={_id:"shard1",members:[

                     ... {_id:0,host:"node1:22001"}, 

                     ... {_id:1,host:"node2:22001"},

                     ... {_id:2,host:"node3:22001"}

         ...]

配置完成后,使用 rs.initiate(config)命令初始化复制集。

添加成功后,可以使用 rs.status()命令查看复制集的状态,如下图所示,说明复制集 shard1 启动成功。

                            


以相同的方式来配置分片 shard2 和 shard3。

6) 分片配置

运行如下命令,将创建好的三个分片添加到集群中 

yuzhi@node1:~/MongoDB/sh$ mongo node1:30000

MongoDB shell version: 2.4.12

connecting to: node1:30000/test

mongos> use admin switched to db admin

mongos>db.runCommand( {addshard:"shard1/node1:22001,node2:22001,node3:2 2001" } ) { "shardAdded" : "shard1", "ok" : 1 } mongos>db.runCommand( {addshard:"shard2/node1:22002,node2:22002,node3:2 2002" } ) { "shardAdded"
: "shard2", "ok" : 1 } mongos>db.runCommand( {addshard:"shard3/node1:22003,node2:22003,node3:22 003" } ) { "shardAdded" : "shard3", "ok" : 1 }


三 验证分片集群

       为了验证分片集群是否正常工作,现将测试数据导入分片集群中, 来查看数据的分布情况。

       默认情况下,创建的数据库和集合不会分片。因此,为了验证分片集群,首先创建允许分片的数据库和集合,其创建方式如下:

mongos> db.runCommand( {enablesharding: "GISNew"} )

          { "ok" : 1 }

mongos>db.runCommand( {shardCollection:" GISNew.baidugis",key:{id:1} )

          { "collectionsharded" : "testshard.shardtable", "ok" : 1 }

这里选择 id 作为分片的片键,然后使用 mongorestore 命令导入数据。

      使用 mongorestore --host node1 --port 30000 baidugis 导入测试数据,导入完 成后,使用 db.printShardingStatus() 查看数据的分布情况,其结果如下图所示。

      可以看到,数据库 GISNew 和集合 baidugis 已经分片, 测试数据分散的存储在 shard1、shard2 和 shard3 上,其中 shard1 和 shard3 上有 4 个数据块,shard2 上有 3 个数据块。

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MongoDB