Mongodb部署笔记[5]-分片集群

一: Mogodb3.2分片集群[分片 sharding]
1. 分片的对象是:对一个(集合|表)进行拆分,把一个大数据拆分成多个小数据。
2. 分片的依据,就是对 表 中的某一个key进行分片,例如:对一个用户表进行分片,表中包含age字段int类型。假如:"age"数据分为2个片,那么int数据类型可能被同等拆分,一个片占一半。
当然,所有的操作都是由mongodb自己去完成的。
二:分片图

b5522c964bad0b141e5f4eaf4353d283df2.jpg
 

三:mongodb分片至少四台服务器
[1].说明

  1.台服务器27017
  2.台config服务器27018
  3.台分片服务器:28000,28001

[2].安装master路由服务器

mkdir -p /app/mongodb/cluster/master_mgo/{log,db,install}
wget -P /app/mongodb/cluster/master_mgo/install/ https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.16.tgz
cd /app/mongodb/cluster/master_mgo/install/ && tar -xvzf mongodb-linux-x86_64-3.2.16.tgz && rm -rf mongodb-linux-x86_64-3.2.16.tgz
mv mongodb-linux-x86_64-3.2.16 ../mongodb && cd  /app/mongodb/cluster/
cat > /app/mongodb/cluster/master_mgo/mongodb/mongodb.conf << EOF
#dbpath=/app/mongodb/cluster/master_mgo/db
#路由无需配置db
logpath=/app/mongodb/cluster/master_mgo/log/mongodb.log
port=27017
fork=true
configdb=127.0.0.1:27018
nohttpinterface=true
bind_ip = 0.0.0.0
EOF

[3].安装config(config)

cp  -a /app/mongodb/cluster/master_mgo  /app/mongodb/cluster/config_mgo
cat > /app/mongodb/cluster/config_mgo/mongodb/mongodb.conf << EOF
dbpath=/app/mongodb/cluster/config_mgo/db
logpath=/app/mongodb/cluster/config_mgo/log/mongodb.log
logappend=true
port=27018
fork=true
bind_ip = 0.0.0.0
maxConns=5000
configsvr=true
EOF

[4].安装sharding(分片1)

cp  -a /app/mongodb/cluster/master_mgo  /app/mongodb/cluster/sharding_mgo1
cat > /app/mongodb/cluster/sharding_mgo1/mongodb/mongodb.conf << EOF
dbpath=/app/mongodb/cluster/sharding_mgo1/db
logpath=/app/mongodb/cluster/sharding_mgo1/log/mongodb.log
logappend=true
port=28000
fork=true
nohttpinterface=true
bind_ip = 0.0.0.0
maxConns=5000
shardsvr=true
EOF

[5].安装sharding(分片2)

cp  -a /app/mongodb/cluster/master_mgo  /app/mongodb/cluster/sharding_mgo2
cat > /app/mongodb/cluster/sharding_mgo2/mongodb/mongodb.conf << EOF
dbpath=/app/mongodb/cluster/sharding_mgo2/db
logpath=/app/mongodb/cluster/sharding_mgo2/log/mongodb.log
logappend=true
port=28001
fork=true
nohttpinterface=true
bind_ip = 0.0.0.0
maxConns=5000
shardsvr=true
EOF

[6]启动服务;必须先启动config服务器

启动:config服务
/app/mongodb/cluster/config_mgo/mongodb/bin/mongod -f /app/mongodb/cluster/config_mgo/mongodb/mongodb.conf
启动sharding(分片1)
/app/mongodb/cluster/sharding_mgo1/mongodb/bin/mongod  -f /app/mongodb/cluster/sharding_mgo1/mongodb/mongodb.conf
启动sharding(分片2)
/app/mongodb/cluster/sharding_mgo2/mongodb/bin/mongod  -f /app/mongodb/cluster/sharding_mgo2/mongodb/mongodb.conf
启动:master路由
/app/mongodb/cluster/master_mgo/mongodb/bin/mongos -f /app/mongodb/cluster/master_mgo/mongodb/mongodb.conf
#路由服务器需要指定config服务器的ip和端口。启动指定或者配置文件指定--configdb=127.0.0.1:27018
#启动路由需要用mongos不能用mongod命令

[7]登录master路由:配置分片,并测试

/app/mongodb/cluster/master_mgo/mongodb/bin/mongo 127.0.0.1:27017
#在routemgo上运行addshard。告诉路由那个服务器作为分片服务器。route_mgo服务器需要将配置信息保存到config服务器。
查看分片:
#############
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5c9db2a4bb492042a1b98b16")
}
  shards:
  active mongoses:
    "3.2.16" : 1
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours: 
        No recent migrations
  databases:

mongos> show dbs;
config  0.000GB
###########
添加分片执行以下命令:
use admin
mongos> sh.addShard("127.0.0.1:28000")#添加分片服务器1
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard("127.0.0.1:28001")#添加分片服务器2
{ "shardAdded" : "shard0001", "ok" : 1 }
再次查看分片:

sh.status()
shards:
    {  "_id" : "shard0000",  "host" : "127.0.0.1:28000" }
    {  "_id" : "shard0001",  "host" : "127.0.0.1:28001" }
#已经添加成功的分片

测试开始:在master_mgo上面添加数据
mongos> use wyl
switched to db wyl
mongos> for(var i=1;i<=10000;i++)db.users.insert({"name":"wangyunlong"+i,"age":"addr"+i})
WriteResult({ "nInserted" : 1 })
mongos> db.users.count()
10000
mongos> db.users.find().limit(3)
{ "_id" : ObjectId("5c9db5bddcaaa994787dd2d1"), "name" : "wangyunlong1", "age" : "addr1" }
{ "_id" : ObjectId("5c9db5bedcaaa994787dd2d2"), "name" : "wangyunlong2", "age" : "addr2" }
{ "_id" : ObjectId("5c9db5bedcaaa994787dd2d3"), "name" : "wangyunlong3", "age" : "addr3" }
查看:sh.status()
 databases:{  "_id" : "wyl",  "primary" : "shard0000",  "partitioned" : false }
#partitioned:false 表示未分片
mongos> use wyl
switched to db wyl
mongos> sh.enableSharding("wyl") #启动数据库分片,指定库

#注意分片前需要对那个库中表创建索引。以索引所在的键进行分片
mongos> db.users.createIndex({"name":1})#对name表创建索引。
{"raw" : {"127.0.0.1:28000" : {"createdCollectionAutomatically" : false,"numIndexesBefore" : 1,"numIndexesAfter" : 2,"ok" : 1}},"ok" : 1}

#对users表进行分片
mongos> sh.shardCollection("wyl.users",{"name":1})#针对wyl库,users表上的name字段进行分片。
{ "collectionsharded" : "wyl.users", "ok" : 1 }
再次查看:sh.status()
分片数据已经在shard0000与shard0002中
给分片添加标签:
sh.addShardTag("shard0000","sharding_mgo1")
sh.addShardTag("shard0001","sharding_mgo2")
sh.status()
chunks:
shard0000    1026
shard0001    225

删除一个分片节点:
mongos> use admin
mongos> db.runCommand({"removeshard":"192.168.0.138:28001"})   #删除分片节点

参考:https://blog.51cto.com/13640803/2149017
 

 

转载于:https://my.oschina.net/wangyunlong/blog/3029750

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值