一 基础信息

--1.1 分片环境核心组件

shard  节点:     分片节点,存储数据,可以是单个进程,也可以是 replica set;


config 节点:   配置节点,仅存储集群的元数据,在生产环境上一般配置 3个 config 节点;


monos 进程:  路由进程,本身不存储数据,负责将应用发出的SQL分发到各个 shard 节点,

         monos 进程消耗资源较少,可以部署在应用服务端,也可以部署在数据库端。



--1.2 环境信息


主机名:  redhatB.example.com

OS:      Red Hat Enterprise Linux Server release 6.2 (Santiago)

mongo:   db version v2.2.1 ( 软件安装略)



--1.3 各节点端口信息

shard1          5281

shard2          5282

Config Server   7281

mongos          7282


 


二:搭建步骤

--2.1 增加OS用户

[root@redhatB ~]# groupadd shard
[root@redhatB ~]# useradd  -g shard shard
[root@redhatB ~]# passwd shard
[root@redhatB ]# mkdir -p /shard
[root@redhatB ]# chown -R shard:shard /shard


--2.2 配置 shard1 节点

--2.2.1 创建目录和配置文件

mkdir -p /shard/shard1
touch /shard/shard1/shard1_5281.conf #(包含以下内容)
fork = true
port = 5281
dbpath = /shard/shard1
logpath = /shard/shard1/shard1.log
logappend = true
journal = true

   

--2.2.2 启动 shard1

 mongod -f /shard/shard1/shard1_5281.conf


--2.3 配置 shard2 节点

--2.3.1 创建目录和配置文件

mkdir -p /shard/shard2
touch /shard/shard2/shard2_5282.conf #(包含以下内容)
fork = true
port = 5282
dbpath = /shard/shard2
logpath = /shard/shard2/shard2.log
logappend = true
journal = true

   

--2.3.2 启动 shard2


 

mongod -f /shard/shard2/shard2_5282.conf

   


--2.4 配置 Config Server 

--2.4.1 创建目录和配置文件

mkdir -p /shard/conf
touch /shard/conf/conf_7281.conf  #(包含以下内容)
configsvr = true
fork = true
port = 7281
dbpath = /shard/conf
logpath = /shard/conf/conf.log
logappend = true

   

     

--2.4.2 启动 Config Server    

 mongod -f /shard/conf/conf_7281.conf

 


--2.5 启动  mongos 进程


 

mongos --configdb redhatB.example.com:7281 --fork --logpath /shard/mongos.log  --chunkSize 1 --port 7282

    备注:--chunkSize 选项设置 chunk 的大小,默认64M,这里将它设置为 1M,在接下来的实验

                更容易看到分片效果。


--2.6 增加分片结点到集群

[shard@redhatB shard]$ mongo 127.0.0.1:7282
MongoDB shell version: 2.2.1
connecting to: 127.0.0.1:7282/test
mongos> show dbs;
config  0.046875GB
mongos> sh.addShard( "redhatB.example.com:5281" );
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard( "redhatB.example.com:5282" );
{ "shardAdded" : "shard0001", "ok" : 1 }


   


--2.7 查看集群状态

 mongos> sh.status();
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
        {  "_id" : "shard0000",  "host" : "redhatB.example.com:5281" }
        {  "_id" : "shard0001",  "host" : "redhatB.example.com:5282" }
  databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

   

        备注:到了这里,单节点的  Sharded Cluster 搭建完成了,接下来验证下。


 



三 测试

--3.1 开启指定数据库 Sharding 功能

 [shard@redhatB shard]$ mongo 127.0.0.1:7282
MongoDB shell version: 2.2.1
connecting to: 127.0.0.1:7282/test
mongos> sh.enableSharding("francs");
{ "ok" : 1 }

   


--3.2 开启指定集合分片

 mongos> sh.shardCollection("francs.test_1", { "id": 1} );
{ "collectionsharded" : "francs.test_1", "ok" : 1 }

--3.3 查看已分片集合的索引信息

 mongos> db.test_1.getIndexes();
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "ns" : "francs.test_1",
                "name" : "_id_"
        },
        {
                "v" : 1,
                "key" : {
                        "id" : 1
                },
                "ns" : "francs.test_1",
                "name" : "id_1"
        }
]

     备注:在集合上通过命令 shardCollection 开启分片后, 在分片的字段上默认创建了索引。


--3.4 测试:插入数据


 mongos> for( var i=1; i<50001; i++) db.test_1.save({id:i,name:'abc'})

   


--3.5 看集合 test_1 状态


 

mongos> db.test_1.stats();
{
        "sharded" : true,
        "ns" : "francs.test_1",
        "count" : 50000,
        "numExtents" : 10,
        "size" : 2400128,
        "storageSize" : 5849088,
        "totalIndexSize" : 3049648,
        "indexSizes" : {
                "_id_" : 1635200,
                "id_1" : 1414448
        },
        "avgObjSize" : 48.00256,
        "nindexes" : 2,
        "nchunks" : 3,
        "shards" : {
                "shard0000" : {
                        "ns" : "francs.test_1",
                        "count" : 11827,
                        "size" : 567760,
                        "avgObjSize" : 48.005411346918066,
                        "storageSize" : 3055616,
                        "numExtents" : 5,
                        "nindexes" : 2,
                        "lastExtentSize" : 2359296,
                        "paddingFactor" : 1,
                        "systemFlags" : 1,
                        "userFlags" : 0,
                        "totalIndexSize" : 735840,
                        "indexSizes" : {
                                "_id_" : 392448,
                                "id_1" : 343392
                        },
                        "ok" : 1
                },
                "shard0001" : {
                        "ns" : "francs.test_1",
                        "count" : 38173,
                        "size" : 1832368,
                        "avgObjSize" : 48.0016765776858,
                        "storageSize" : 2793472,
                        "numExtents" : 5,
                        "nindexes" : 2,
                        "lastExtentSize" : 2097152,
                        "paddingFactor" : 1,
                        "systemFlags" : 1,
                        "userFlags" : 0,
                        "totalIndexSize" : 2313808,
                        "indexSizes" : {
                                "_id_" : 1242752,
                                "id_1" : 1071056
                        },
                        "ok" : 1
                }
        },
        "ok" : 1
}

   

     备注:"shard0000" 存储 11827条,"shard0001" 存储 38173 条,集合已分片。