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