1.1 架构思路:

192.168.50.131              192.168.50.131             192.168.50.132

mongos

mongos

mongos

configsvr

configsvr

configsvr

Shard1

Shard1

Shard1

Shard2

Shard2

Shard2

Shard3

Shard3

Shard3

1.2 安装使用虚拟机:

192.168.50.130,192.168.50.131,192.168.50.132

1.3 软件包:

mongodb-linux-x86_64-rhel62-3.4.0.tar.gz

1.4 创建软连接(三台机器)

ln -s /usr/local/ mongodb-linux-x86_64-rhel62-3.4.0/bin/mongo /usr/bin/mongo

ln -s /usr/local/ mongodb-linux-x86_64-rhel62-3.4.0/bin/mongos /usr/bin/mongos

ln -s /usr/local/ mongodb-linux-x86_64-rhel62-3.4.0/bin/mongod /usr/bin/mongod

1.5 创建数据和日志目录(三台机器)

mkdir -p /data/mongodb && cd /data/mongodb/ && mkdir -p conf/data conf/log mongos/log shard{1..3}/data shard{1..3}/log

1.6 创建configsvr(三台机器)

mongod --configsvr --replSet configset --dbpath /data/mongodb/conf/data --port 27100 --logpath /data/mongodb/conf/confdb.log   --bind_ip 0.0.0.0  --fork

1.7 将configsvr初始化为复制集

mongo192.168.25.131:27100

config_replset={_id:"configset",members:[{_id:0,host:"192.168.25.130:27100"},{_id:1,host:"192.168.25.131:27100"},{_id:2,host:" 192.168.25.132:27100"}]}

rs.initiate(config_replset)

1.8 配置mongos(三台机器)  路由

mongos

--configdb configset/192.168.25.130:27100,192.168.25.131:27100,192.168.25.132:27100 --port 27200 --logpath /data/mongodb/mongos/mongos.log --fork

1.9 配置shard(三台机器)  分片

mongod --shardsvr --replSet shard1 --port 27001 --bind_ip 0.0.0.0 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --directoryperdb --fork

mongod --shardsvr --replSet shard2 --port 27002 --bind_ip 0.0.0.0 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --directoryperdb --fork

mongod --shardsvr --replSet shard3 --port 27003 --bind_ip 0.0.0.0 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --directoryperdb --fork

1.10 初始化shard复制集

1.10.1 第一台机器(192.168.25.130没有显示只当主节点,会选择登陆的机器为主节点)

mongo --port 27001

use admin

rs.initiate({

_id: 'shard1',

members: [

{_id: 84, host: '192.168.25.130:27001'},

{_id: 89, host: '192.168.25.131:27001'},

{_id: 90, host: '192.168.25.132:27001'}

]

});

1.10.2 第二台机器(192.168.25.131)

mongo --port 27002

use admin

rs.initiate({

_id: 'shard2',

members: [

{_id: 84, host: '192.168.25.130:27002'},

{_id: 89, host: '192.168.25.131:27002'},

{_id: 90, host: '192.168.25.132:27002'}

]

});

如果要设置仲裁节点的话:

config = {_id: 'shard3', members: [{_id: 0, host: '192.168.10.202:27022'},{_id:1, host: '192.168.10.204:27022'},{_id: 2, host: '192.168.10.203:30001', arbiterOnly:true}]}
rs.initiate(config);

1.10.3 第三台机器(192.168.25.132)

mongo --port 27003

use admin

rs.initiate({

_id: 'shard3',

members: [

{_id: 84,
host: '192.168.25.130:27003'},

{_id: 89,
host: '192.168.25.131:27003'},

{_id: 90,
host: '192.168.25.132:27003'}

]

});

1.11 在mongos中注册shard

Mongo –port 27200

use admin

db.runCommand({addShard: 'shard1/192.168.25.130:27001,192.168.25.131:27001,192.168.25.132:27001'});

db.runCommand({addShard:
'shard2/192.168.25.130:27002,192.168.25.131:27002,192.168.25.132:27002'});

db.runCommand({addShard:
'shard3/192.168.25.130:27003,192.168.25.131:27003,192.168.25.132:27003'});

查看shard

use admin

db.runCommand({listshards: 1});

{

"shards" : [

{

"_id" : "shard1",

"host" :
"shard1/10.199.144.84:27001,10.199.144.89:27001"

},

{

"_id" : "shard2",

"host" :
"shard2/10.199.144.89:27002,10.199.144.90:27002"

},

{

"_id" : "shard3",

"host" :
"shard3/10.199.144.90:27003,10.199.144.84:27003"

}

],

"ok" :
1

}

1.12 插入数据测试

mongo --port 27200

use admin

db.runCommand({enablesharding: 'dbtest'});

db.runCommand({shardcollection: 'dbtest.coll1', key: {id:
1}});

use dbtest

db.coll1.stats()

结果是数据分配不平均,因为id没hash

此处对sano1y库的testtb使用hash策略:

  1. mongos> use
    admin
  2. switched to db admin
  3. mongos> db.runCommand({"enablesharding":"sano1y"})
  4. { "ok" : 1
    }
  5. mongos> db.runCommand({"shardcollection":"sano1y.testtb","key":{"_id":"hashed"}})
  6. { "collectionsharded" : "sano1y.testtb", "ok" : 1
    }

目前为止,已经对sano1y库的testtb集合进行了shard配置。

测试:

  1. mongos> use
    sano1y
  2. switched to db sano1y
  3. mongos> for(i=0;i<100000;i++) {db.testtb.insert({"id":i,"name":"test_hash"});}

稍等片刻,等待插入完毕:

  1. WriteResult({ "nInserted" : 1
    })

进入shard1(187)的PRIMARY实例检查

  1. shard1:PRIMARY> use sano1y
  2. switched to db sano1y
  3. shard1:PRIMARY> db.testtb.find().count()
  4. 49983
  5. shard1:PRIMARY> db.testtb.find()
  6. { "_id" : ObjectId("5837ef1dea1fd54fb38d845c"), "id" : 0, "name" : "test_hash" }
  7. { "_id" : ObjectId("5837ef1dea1fd54fb38d845d"), "id" : 1, "name" : "test_hash" }
  8. { "_id" : ObjectId("5837ef1dea1fd54fb38d845e"), "id" : 2, "name" : "test_hash" }
  9. { "_id" : ObjectId("5837ef1dea1fd54fb38d8460"), "id" : 4, "name" : "test_hash" }
  10. { "_id" : ObjectId("5837ef1dea1fd54fb38d8461"), "id" : 5, "name" : "test_hash" }
  11. { "_id" : ObjectId("5837ef1dea1fd54fb38d8465"), "id" : 9, "name" : "test_hash" }
  12. { "_id" : ObjectId("5837ef1dea1fd54fb38d8468"), "id" : 12, "name" : "test_hash" }
  13. { "_id" : ObjectId("5837ef1dea1fd54fb38d846f"), "id" : 19, "name" : "test_hash" }
  14. { "_id" : ObjectId("5837ef1dea1fd54fb38d8471"), "id" : 21, "name" : "test_hash" }
  15. { "_id" : ObjectId("5837ef1dea1fd54fb38d8475"), "id" : 25, "name" : "test_hash" }
  16. { "_id" : ObjectId("5837ef1dea1fd54fb38d8476"), "id" : 26, "name" : "test_hash" }
  17. { "_id" : ObjectId("5837ef1dea1fd54fb38d8479"), "id" : 29, "name" : "test_hash" }
  18. { "_id" : ObjectId("5837ef1dea1fd54fb38d847d"), "id" : 33, "name" : "test_hash" }
  19. { "_id" : ObjectId("5837ef1dea1fd54fb38d847e"), "id" : 34, "name" : "test_hash" }
  20. { "_id" : ObjectId("5837ef1dea1fd54fb38d8480"), "id" : 36, "name" : "test_hash" }
  21. { "_id" : ObjectId("5837ef1dea1fd54fb38d8481"), "id" : 37, "name" : "test_hash" }
  22. { "_id" : ObjectId("5837ef1dea1fd54fb38d8483"), "id" : 39, "name" : "test_hash" }
  23. { "_id" : ObjectId("5837ef1dea1fd54fb38d8486"), "id" : 42, "name" : "test_hash" }
  24. { "_id" : ObjectId("5837ef1dea1fd54fb38d848b"), "id" : 47, "name" : "test_hash" }
  25. { "_id" : ObjectId("5837ef1dea1fd54fb38d848d"), "id" : 49, "name" : "test_hash" }

另外如果到shard2可以看到shard1这些不连续的id。
可发现shard1和2中的document数量,还是比较均匀的。

shard1: 33320
shard2: 33421

Shard3: 33259

可以看出,count数量基本还是保持平衡的,又很小的落差

mongo复制集、分片集(亲测)的更多相关文章

  1. mongo 3.4分片集群系列之八:分片管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  2. mongo 3.4分片集群系列之七:配置数据库管理

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  3. mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  4. mongo 3.4分片集群系列之六:详解配置数据库

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  5. mongo 3.4分片集群系列之五:详解平衡器

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  6. mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  7. mongo 3.4分片集群系列之二:搭建分片集群--哈希分片

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  8. mongo 3.4分片集群系列之一:浅谈分片集群

    这篇为理论篇,稍后会有实践篇. 这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mong ...

  9. mongoDB副本集+分片集群

    首先搭建一个副本集(三台机器) 主,从,仲裁 然后搭建分片shard1,在每台机子上启用shard1(这里就写一个分片吧!!如果写多了怕初学者会混乱,先写一个.然后可以按照同样的方法写第二个,第三个) ...

  10. Cocos Creator JS web平台复制粘贴代码(亲测可用)

    Cocos Creator JS web平台复制粘贴代码(亲测可用) 1 webCopyString: function(str){ var input = str; const el = docum ...

随机推荐

  1. IE9 和IE10 兼容性判断及效果

    仅IE9可识别 .d1{ width:100px; height:100px; background:blue; } IE9及一下使用<!--[if IE 8]><![endif]- ...

  2. 关于eclipse的编码注释等Code Template设置

    啥也不说直接放东西: 首先进入eclipse的preferences里的java 点击Insert variable可以自己设置需要的 1. 设置Files:点击edit, /** * <p&g ...

  3. 抽象工厂模式的C++、Java实现

    1.抽象工厂模式UML 图1. 抽象工厂模式的UML 2.C++实现 C++实现类图为: 图2. 抽象工厂模式的C++实现类图 其中,AbstractFactory的实现代码为: //抽象工厂类基类. ...

  4. Hibernate 注解(Annotations 二)一对一双向注解

    注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来 ...

  5. Bzoj3105:[CQOI2013]新Nim游戏

    题面 传送门 Sol 也是拿出一些数,使剩下的异或起来不为\(0\) 而线性基内的数异或不出\(0\) 那么从大到小加到线性基内 然后中途为\(0\)了,就取走它 这样我们使最大的在线性基内,剩下的是 ...

  6. Angular-ui/bootstarp modal 主控制器与模态框控制器传值

    调用模态框: $scope.open = function (size) { //这里很关键,是打开模态框的过程 var modalInstance = $uibModal.open({ animat ...

  7. Java基础知识错误分析

    答案:A,C 解析: 题目2: 答案:B 解析: 题目3: 答案:A 解析: 题目4: 答案:D 解析: 题目5: 答案:C 题目六: 答案:C 解析:

  8. Linux文件系统简介----转载

    原文地址:Linux文件系统 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载 ...

  9. Tesseract-OCR-02-Tesseract-OCR 的安装与 环境变量配置

    Windows 下 Tesseract-OCR 的安装与 环境变量配置 本篇介绍Windows下Tesseract-OCR的安装与环境配置,然后做一个图片的文字识别测试 Windows下 Tesser ...

  10. SQL Server ->> SQL Server 2016功能改进之 -- Update Statistics

    1) 以前SQL Server更新一张表/索引的间隔是固定的,创建时更新一次,到了500行时更新第二次,接下来就是呈百分比式的间隔去更新,距离数据修改量达到表的行数量的的20%再次触发更新.但是这样的 ...