Mongodb 的三种集群方式的搭建:Master-Slaver/Replica Set / Sharding


三种集群搭建方式首选 Replica Set,只有真的是大数据,Sharding 才能显现威力,毕竟备节点同步数据是需要时间的。Sharding 可以将多片数据集中到路由节点上进行一些对比,然后将数据返回给客户端,但是效率还是比较低
一、主从 (单机-搭建伪分布式)
这个是最简答的集群搭建,不过准确说也不能算是集群,只能说是主备。并且官方已经不推荐这种方式,所以在这里只是简单的介绍下吧,搭建方式也相对简单。
注意:从机不能读也不能写。从机若要可以读数据,可以在连接从机上输入修改:rs.slaveOk();
主从新建文件目录

修改主从的mongodb.conf的配置文件,如:
主机修改或添加:
启动,如下图:

验证(主机造数据,从机查看):
master=true
source=192.168.254.135:27008
从机修改或添加:
slave=true
source=192.168.254.135:27009

二、副本集
主、从、仲裁节点添加安装文件
master节点(192.168.254.135)
配置mongodb.conf文件,添加副本集: replSet=shard001slave节点(192.168.254.134)
配置mongodb.conf文件,添加副本集: replSet=shard001arbiter节点(192.168.254.132)
配置mongodb.conf文件,添加副本集: replSet=shard001配置主、备、仲裁节点
>mongo 192.168.254.135:27017 #ip 和 port 是某个节点的地址
>use admin
>cfg={_id:"shard001",members:[{_id:0,host:'192.168.254.135:27017',priority:9},{_id:1,host:'192.168.254.134:27017',priority:1},{_id:2,host:'192.168.254.132:27017',arbiterOnly:true}]};
>rs.initiate(cfg) #使配置生效检测是否成功


>如上图,输入下面命令即可看到主从仲裁各节点。
>mongo 192.168.254.135:27017
>rs.status();
可以通过在主节点添加数据,在从机上查看,如图
三、Sharding
添加新的副本集,新建文件目录,并添加修改配置文件mongodb.cfg
配置 configsvr
新建文件目录,并修改配置文件mongodb.cfg

>mongodb.cfg配置文件大同,如下:
dbpath=/opt/mongodb/shard/configsvr/config3/data
configsvr=true
port=28003
fork=true
logpath=/opt/mongodb/shard/configsvr/config3/logs/mongodb.log
replSet=configrs
logappend=true
bind_ip=192.168.254.135
>mongo 192.168.254.135 :28001 连接节点.
>cfg={_id:"configrs",members:[{_id:0,host:'192.168.254.135:28001'},{_id:1,host:'192.168.254.135:28002'},{_id:2,host:'192.168.254.135:28003'}]};
>rs.initiate(cfg)配置路由节点

>新建文件目录,如:mkdir -p /opt/mongodb/shard/routesvr/logs
>修改配置文件mongodb.cfg
configdb=configrs/192.168.254.135:28001,192.168.254.135:28002,192.168.254.135:28003
port=30000
fork=true
logpath=/opt/mongodb/shard/routesvr/logs/mongodb.log
logappend=true
bind_ip=192.168.254.135>启动路由节点:mongos -f /opt/mongodb/shard/routesvr/mongodb.cfg
配置Sharding
ReplicaSet(副本集)、shard(切片)和chunk(分块)的区别
基本概念:RouteServer(路由服务器)、ConfigServer(配置服务器)、Replica Set(副本集)、Shard(切片)、Chunk(分块)
基于上面的副本集的环境,再搭建一个单机的伪分布式环境,从而构建两个如上图所示的两个副本集。


>mongodb.cfg配置文件大同,如下:
dbpath=/opt/mongodb/shard/replset/replica1/data
logpath=/opt/mongodb/shard/replset/replica1/logs/mongodb.log
logappend=true
fork=true
bind_ip=192.168.254.135(根据环境而定)
port=27001(修改端口)
replSet=shard002(不能和已有的副本集名称重复)
shardsvr=true
>mongo 192.168.254.135 :27001连接节点
>cfg=cfg={_id:"shard002",members:[{_id:0,host:'192.168.254.135:27001'},{_id:1,host:'192.168.254.135:27002'},{_id:2,host:'192.168.254.135:27003'}]};
>rs.initiate(cfg)


操作如下命令,如上图运行结果。分片到不同的副本集中。取值范围如图所示
>mongos 192.168.254.135:30000
>sh.addShard("shard002/192.168.209.128:27001");
>sh.addShard("shard001/192.168.209.128:27017");#shard001、shard002 表示 replica set 的名字 当把主节点添加到 shard 以后,会自动找到 set里的主,备,决策节点
>use testdb
>sh.enableSharding("testdb")
>sh.shardCollection("testdb.testdb",{"name":"hashed"}});#切开
>for(var i=0;i<100;i++)db.testdb.insert({name:"testdb",age:i});#插入数据,分片到不同的副本集。如上图所示。






