1.建立配置数据库服务node
mongod --dbpath=d://path/mongodb_ds/mongodb_config --port 1234mongodb
2.建立3台分布数据库服务shell
mongod --dbpath=d://path/mongodb_ds/mongodb111 --port 1111数据库
mongod --dbpath=d://path/mongodb_ds/mongodb222 --port 2222windows
mongod --dbpath=d://path/mongodb_ds/mongodb333 --port 3333服务器
3.开启路由服务指定mongodb_config数据库服务为路由,负责转发客户端的数据库请求,合理分配给3台数据库服务负载均衡
mongos --port 4321 --configdb=localhost:1234分布式
4.开启一个客户端链接路由服务性能
mongo localhost:4321测试
4.1 切换到admin数据库,准备配置相关参数 use admin
4.2 为3台分布数据库服务建立分片
db.runCommand({"addshard":"localhost:1111",allowLocal:true});
db.runCommand({"addshard":"localhost:2222",allowLocal:true});
db.runCommand({"addshard":"localhost:3333",allowLocal:true});
*addshard 表示建立分片,allowLocal 表示是否容许别的客户端访问这台数据库。
4.3 容许哪一个数据库使用分片
db.runCommand({"enablesharding":"test"});
4.4 指定哪一个数据库的哪一个集合使用分片,且分片依据是哪一个字段
db.runCommand({"shardcollection":"test.person","key":{age:1}});
5.切换到test数据库,准备插入数据 use test
mongos> for(var i=0; i<10000000; i++){
db.person.insert({name:"distributedName",age:i});
}
这里插入1000w条数据到test数据库的person集合,路由服务会根据前面的配置,以age的值为分片依据,决定具体插入到哪一个数据库服务的test数据库下的Person集合。
https://blog.csdn.net/qwkxq/article/details/53728244
MongoDB是最易用的NoSQL,比较适合取代MySQL作一些存储,不过不是强一致性的。本文介绍一下MongoDB各类部署方式,并分享一些感觉。前两部分“单机部署”和“主从部署”是“分片部署”的基础。
启动下载来的MongoDB包的bin目录下的mongod.exe便可打开MongoDB服务,能够添加的基本配置是:
1 |
|
默认的端口是27017。启动的时候必须有一个data目录,让mongod读写数据。写入数据后,data目录里的文件如图:
.lock文件若是在下次启动时候还存在,须要删除才能成功启动。"article"和"config"是数据库名字,能够特别注意一下每一个文件块的大小(16M, 32M, 64M, 128M)。
主从配置是MongoDB特点之一,使之具有了容错,故障恢复等性能。主节点要声明"master",从节点们要声明"slave"和"--source"。最简单的主从配置以下:
1 |
|
1 |
|
从 节点直接从主节点同步数据,从节点之间不互相同步。容错性更强的部署是一个主从集群,互相都能成为“主节点”,叫作Replica Set。在Replica Set里会有一个活跃节点和若干个备份节点。配置的时候,整个Replica Set要取个名字,而后每台都要指明一个或几个伙伴:
1 |
|
1 |
|
1 |
|
谁成为活跃节点取决于优先级,优先级默认是1,也能够启动mongod进行设置(不具体介绍了),总之是内部的选举机制。
介绍完以上,组合起来就能够搭建一个比较强壮的分布式MongoDB集群。分片相似分布式,MongoDB以新增分片的方式,扩展本身的容量,而且能给读写负载均衡。
1. 每个启动的mongod都是实际存放数据的地方,都能做为别人的sharding
2. 分片部署须要一个mongos,起路由分发的做用;须要一个配置服务器和若干个分片服务器(都是mongod)
3. 单机的时候,应用链接的是mongod;分布式的时候,应用链接的是mongos。
最简单的分片部署是单个的配置服务器,一个config(即mongod),一个mongos,几个sharding(即mongod):
1 |
|
1 |
|
1 |
|
1 |
|
若是有时候启动不了某个mongod,可能和端口有关。在windows下,这样一个集群会打开不少shell窗口。这种状况下,仍是三个独立的mongd,要打开上面的mongos,输入命令加入sharding片:
1 2 3 |
|
1 |
|
还要设置片建,以提供负载均衡的依据:
1 |
|
dbname.collection是本身的数据库的数据集。设置的"key"须要已经创建索引。
mongos下还有一些查看分片状况的命令,方便集群的管理和监控,能够本身体验下:
1 2 3 |
|
也能够经过runCommand的其余命令添加新的片,删除已有的片,并且添加的片能够是旧的mongod。
测试开发的时候像上面这样的一组可可以了,真正健壮的集群可能要具有下面三个条件:
1. 多个配置服务器config1, config2, config3(能够都通过一个mongos来路由)
2. 每一个sharding都是Replica Set
3. 每一台物理物理服务器承担若干个不一样的进程(mongos, shards, config)
就像下面这种图呈现的同样:
咱们能够这样理解mongos, shards, config三样东西:
1. shards是一些实际存数据的能够单独使用的db,他们能分配给任何config server,并且添加删除都很方便。
2. 每一个shard里有若干个地位平等的mongods,因此每一个是一个Replica Set(副本集)
3. 一个config手下带领好几个shards,目的是负载和扩容,他们之间须要mongos来路由
4. mongos是一个路由,能够路由一个或多个config servers,不须要很大的分配空间
5. 每个客户端的应用,每一张数据库表,最好对应一个config server和一个mongos
以上内容里的"--port" 部分改成IP:port就能够分布式环境了。比较合理的节省物理服务器的配置方法能够像下图这样:
不把全部鸡蛋扔一个篮子里。