今天初步学习 MongoDB 的分片相关的内容,分片是 MongoDB 的一个非常重要的特性,将数据分散到各个子节点,分散IO,具有易分片,易扩展,易集群的特性等,以下在虚拟机环境下搭建最简单的分片环境。
基础信息
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用户
1 |
[root@redhatB ~] |
2.2 配置 shard1 节点
2.2.1 创建目录和配置文件
1 |
mkdir -p /shard/shard1 |
2.2.2 启动 shard1
1 |
mongod -f /shard/shard1/shard1_5281.conf |
2.3 配置 shard2 节点
2.3.1 创建目录和配置文件
1 |
mkdir -p /shard/shard2 |
2.3.2 启动 shard2
1 |
mongod -f /shard/shard2/shard2_5282.conf |
2.4 配置 Config Server
2.4.1 创建目录和配置文件
1 |
mkdir -p /shard/conf |
2.4.2 启动 Config Server
1 |
mongod -f /shard/conf/conf_7281.conf |
2.5 启动 mongos 进程
1 |
mongos --configdb redhatB.example.com:7281 --fork --logpath /shard/mongos.log --chunkSize 1 --port 7282 |
备注:–chunkSize 选项设置 chunk 的大小,默认64M,这里将它设置为 1M,在接下来的实验更容易看到分片效果。
2.6 增加分片结点到集群
1 |
[shard@redhatB shard]$ mongo 127.0.0.1:7282 |
2.7 查看集群状态
1 |
mongos> sh.status(); |
测试
3.1 开启指定数据库 Sharding 功能
1 |
[shard@redhatB shard]$ mongo 127.0 :7282 |
3.2 开启指定集合分片
1 |
mongos> sh.shardCollection("francs.test_1", { "id": 1} ); |
3.3 查看已分片集合的索引信息
1 |
mongos> db.test_1.getIndexes(); |
备注:在集合上通过命令 shardCollection 开启分片后, 在分片的字段上默认创建了索引。
3.4 测试:插入数据
1 |
mongos> for( var i=1; i<50001; i++) db.test_1.save({id:i,name:'abc'}) |
3.5 看集合 test_1 状态
1 |
mongos> db.test_1.stats(); |
备注:”shard0000” 存储 11827条,”shard0001” 存储 38173 条,集合已分片。
参考
http://docs.mongodb.org/manual/tutorial/deploy-shard-cluster/
http://docs.mongodb.org/manual/administration/sharding/#set-up-a-sharded-cluster
http://blog.163.com/dazuiba_008/blog/static/36334981201110172191325/
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/237928.html