您的位置:首页 > 数据库 > Mongodb

windows下mongodb分片设置与集群搭建

2016-07-06 20:45 736 查看
这里简单介绍一下windows下mongodb的分片设置和集群搭建,希望能够为迷茫的新手起到一点点作用。其实windows下与linux下思路是一致的,只是绑定时的ip,与端口号不同,linux下可以开三台虚拟机分别设置ip,然后通过端口号设置分片,集群;windows下是通过黑窗口来运行的,当然只有一个本机ip:127.0.0.1,然后通过端口号的不同进行绑定。
分片涉及到相关内容:首先要知道的是几个名称,路由服务器:分配管理数据,应答客户或者称为mongos;分片服务器:用于存储数据;配置服务器:用于存储路由服务器的信息;分片服务器与配置服务器的信息均存储在内存中。
实现描述:首先是要明确是先设置复制集还是分片,根据本人实验结果是先搭建复制集然后将复制集作为分片的分片服务器添加进去,再进行分片的设置。这样就既可以快速读取数据,又可以防止数据丢失。在黑窗口运行时,要保证所要求的不同磁盘下的文件夹存在。


一 复制集

1.片一:副本集 复制集 replcopy1 规划:

集群的IP分别为:127.0.0.1、127.0.0.1、127.0.0.1

集群名字分别为:replcopy1

服务器1111文件地址:d:\mongo\shard1-1\data 端口号为:1111

服务器1112文件地址:d:\mongo\shard1-2\data 端口号为:1112

服务器1113文件地址:d:\mongo\shard1-3\data 端口号为:1113

2.分别启动服务器(黑窗口下运行)

mongod --dbpath d:\mongo\shard1-1\data --port 1111--bind_ip=127.0.0.1 --replSet=replcopy1
mongod --dbpath d:\mongo\shard1-2\data --port 1112 --bind_ip=127.0.0.1 --replSet=replcopy1
mongod --dbpath d:\mongo\shard1-3\data --port 1113 --bind_ip=127.0.0.1 --replSet=replcopy1


3.初始化

mongo 127.0.0.1:1111
(任意选择客户端进入)

config = {
_id:"replcopy1",
members:[{
_id:1,
host:"127.0.0.1:1111"
},{
_id:2,
host:"127.0.0.1:1112"
},{
_id:3,
host:"127.0.0.1:1113"
}]
}


rs.initiate(config)
#初始化

rs.conf()
#查看配置

rs.status()
#查看状态

4.片二:副本集 复制集 replcopy2 规划:

集群的IP分别为:127.0.0.1、127.0.0.1、127.0.0.1

集群名字分别为:replcopy

服务器1111文件地址:e:\mongo\shard2-1\data 端口号为:2222

服务器1112文件地址:e:\mongo\shard2-2\data 端口号为:2223

服务器1113文件地址:e:\mongo\shard2-3\data 端口号为:2224

5.分别启动服务器

mongod --dbpath e:\mongo\shard2-1\data --port 2222 --bind_ip=127.0.0.1 --replSet=replcopy2
mongod --dbpath e:\mongo\shard2-2\data --port 2223 --bind_ip=127.0.0.1 --replSet=replcopy2
mongod --dbpath e:\mongo\shard2-3\data --port 2224 --bind_ip=127.0.0.1 --replSet=replcopy2


6.初始化

mongo 127.0.0.1:2222


config = {
_id:"replcopy2",
members:[{
_id:1,
host:"127.0.0.1:2222"
},{
_id:2,
host:"127.0.0.1:2223"
},{
_id:3,
host:"127.0.0.1:2224"
}]
}


rs.initiate(config)
#初始化

rs.conf()
#查看配置

rs.status()
#查看状态

rs.isMaster()
#查看是否是主节点

7.测试

在主库中插入测试数据

show dbs
show collecti
be4a
ons
db.student.insert({name:"zhangsan"})
show collections


此时在从库中查询报如下错误,这是正常的现象,对于SECONDARY节点(从节点)默认是不可读的。因为SECONDARY是不允许读和写的,在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由SECONDARY来分担读的压力,PRIMARY(主节点)只承担些操作。一般默认首先进行初始化操作的节点为选择的主节点,其余节点暂时为从节点。


8.读写分离的设置

在从结点上设置

rs.slaveOk()
db.getMongo().setSlaveOk()


在主库上插入,即主节点

db.student.insert({name:"lisi"})
#写操作

在从库上查询,即从节点

db.student.find()
#读操作

但是,在从节点上不能插入数据

9.故障转移

断掉主服务器,用ctrl+c断掉

用下面命令查看

rs.status()
#查看状态

rs.isMaster()
#查看是否是主节点

rs.conf()
#查看配置

记录主从配置信息内容:

切换至 use local

show collections
db.system.replset.find()


二 分片系统的实现

启动路由服务器

1集群规划

集群的IP分别为:127.0.0.1、127.0.0.1、127.0.0.1、127.0.0.1

配置服务器端口号:3333 IP:127.0.0.1 路径:d:\mongo\data

路由服务器端口号:4444 IP:127.0.0.1

分片服务器1的端口号为: 1111 IP:127.0.0.1 路径:e:\mongo\data

分片服务器2的端口号为: 2222 IP: 127.0.0.1路径: f:\mongo\data

2.开启配置服务器

mongod --dbpath d:\mongo\config\data --logpath d:\mongo\config\3333.log --port 3333 --bind_ip=127.0.0.1 --journal


3.开启路由服务器 mongos服务器

mongos --port 4444 --bind_ip=127.0.0.1 --configdb 127.0.0.1:3333


4.启动mongod分片服务器(上面已经启动过这里不必再启动)

mongod --dbpath d:\mongo\shard1-1\data --logpath d:\mongo\shard1-1\shard1-1.log --port 1111 --bind_ip=127.0.0.1


mongod --dbpath e:\mongo\shard2-1\data --logpath e:\mongo\shard2-1\shard2-1.log --port 2222 --bind_ip=127.0.0.1


5服务器配置

client直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将1111,2222的mongod交给mongos,添加分片也就是addshard()

mongo 127.0.0.1:4444/admin
必须是在admin下执行此操作

db.runCommand({addshard:"replcopy1/127.0.0.1:1111",allowLocal:true})
db.runCommand({addshard:"replcopy2/127.0.0.1:2222",allowLocal:true})


6.查看整个集群分片机制

在路由服务器中执行

show dbs
use config
show collections
db.shards.find()


7.设置片键

片已经集群了,但是mongos不知道该如何切分数据,也就是我们先前所说的片键,在mongodb中设置片键要做两步

a.开数据分片功能,为数据库test打开分片功能

use admin
db.runCommand({"enablesharding":"test"})


b.对集合进行分片(片键即key决定了你的分片服务器的数据分配,一般以_id为片键,1表示升序)

db.runCommand({"shardcollection":"test.goods","key":{"_id":1}})


8.测试,观察效果

mongo 127.0.0.1:4444
use test


a.插入50W行数据

for(var i=0;i<500000;i++){
db.goods.insert({id:i,name:"goods"+i})
}
db.goods.find()


b.分别在不同的库中,观察分片的集合的内容

mongo 127.0.0.1:1111


mongo 127.0.0.1:2222


use test
db.goods.find().count()
db.goods.stats()


c.查看配置库对于分片服务器的配置存储

在路由服务器中执行

db.printShardingStatus()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息