mongoDB 的分片技术(shard)
其功能是把mongoDB数据库上的数据进得分片存储,以便于实现类似的负载均衡
规划
从流程上来说 分片需要有三个步骤
1. 数据请求交给 mongos服务器,它相当于一个路由器,是数据请求的总入口,
2. 需要一个mongo configsvr服务器
3. 实际存储数据的数据库 , 可以是N多台 , configsvr 会自动分配数据存储到其中
二.实现步骤
1. 首先配置一个 路由表服务器 configsvr
#> ./mongod --dbpath /var/www/monogdb/dbpath --logpaht /var/www/mongodb/logpath --fork --port 20000 --configsvr [--smallfiles]
//命令解释 --configsvr :这个选项一定不能少 表示本台服务器是 分片的路由服务器 -- fork:表示在后台运得 --prot:表示服务中运行在20000 端口上的
2. 开启一个路由服务器,也就 是mongos
#> ./mongos --logpath /var/www/mongologpath --fork --configdb 127.0.0.1:20000
//命令解释 --configdb 127.0.0.1:20000 这个选项不能少 表示路由表服务器的位置 及其运行的端口 而mongos服务运行在30000端口上
3. 开启N个存储数据的服务器
#> ./mongod --dbpath /var/mongodbpath --logpath /var/mongologpath --port 27017 --fork [--smallfiles]
#> ./mongod --dbpath /var/mongodbpath --logpath /var/mongologpath --port 27018 --fork [--smallfiles]
// 命令解释:这是在27017 和 27018 两个端口上开启了两个mongo数据库
//到这个地方,可以看到 路由器服务器,路由表服务器两个之间有了联系,,但是两个数据服务器 其它们好像一点关系都没有
//接下来把两个数据服务器 的关系建立起来
具体做法如下:
4. 使用./mongo 命令进入mongos的管理命令行
./mongo 127.0.0.1:30000 //因为 mongos服务运行在本机的30000端口上 回车后出现的命令行提示符就是 mongos
//在 mongos 命令行中 输入 sh.help() 可以看到所有的命令
这里我们那两台数据服务器加入进来
mongos> sh.addShard("127.0.0.1:27017")
mongos> sh.addShard("127.0.0.1:27018")
这样就已经把两个数据服务器加入到了分片中,可以使用sh.status(),看到有两个分片的数据存储服务器
shards:
{ "_id" : "shard0000", "host" : "127.0.0.1:27017" }
{ "_id" : "shard0001", "host" : "127.0.0.1:27018" }
但这样子并不能使数据分片, 因为分片是 基于数据库 或者数据表的 所在应该使用 sh.enableSharding() 和 sh.shardCollection() 来指明数据库或数据表
5.指定可以分片的数据库 比出说 我的数据库中有一个 名为 mytestDatabase 的数据库
mongos> sh.enableSharding("mytestDatabase")
这里选择了可以分片的数据库,但是还是不能分片,因为分片的规则还没有说明,根本不知道按照什么来分片
所以,分片的规则是在 下面一个命令中出
6.指定可以分片的数据表,并且给出 分片的规则,按数据表中的哪一个字段来进行分片 (假设mytestDatabas库中有一个 user的数库表,字段有 “user_id" "user_name" 等
mongos > sh.shardCollection("user",{"user_id":1}) //这个命令的意思是说 对 user表 根据 user_id 作为参照来进得分片
至此,就完成了 mytestDatabase 数据库中的 user表 来 进行分片的操作
(over)