MongoDB分片集群搭建
MongoDB分片集群搭建一、设计集群的架构。节点主机端口副本集配置集节点 ConfigServerlocalhost27019xxconfig路由服务器 Routerlocalhost27017n/a分片0节点0localhost27010xx0分片0节点1localhost27011xx0分片0节点2localhost27012xx0分片1节点0localhost27013xx1分片1节点1l
MongoDB分片集群搭建
一、设计集群的架构。
节点 | 主机 | 端口 | 副本集 |
---|---|---|---|
配置集节点 ConfigServer | localhost | 27019 | xxconfig |
路由服务器 Router | localhost | 27017 | n/a |
分片0节点0 | localhost | 27010 | xx0 |
分片0节点1 | localhost | 27011 | xx0 |
分片0节点2 | localhost | 27012 | xx0 |
分片1节点0 | localhost | 27013 | xx1 |
分片1节点1 | localhost | 27014 | xx1 |
分片1节点2 | localhost | 27015 | xx1 |
根据以上的架构,我们设计两个shard(分片0,分片1),一个config,一个路由节点router。采用PSA的模式,就是一主一从一仲裁的模式。配置集节点 ConfigServer采用单节点配置。下面就开动吧!
二、示意图。
针对以上的框架结构,我简略的画了一下示意图。
大概就是这个样子了,图画的有点丑,哈哈哈。
三、搭建副本集。
一、搭建thc0、thc1。
我是在Windows上面练习搭建的,所以我们首先进入到Windows的环境当中。也就是进入到MongoDB的bin目录下面。
我练习的是把所有的东西弄在一个文件夹shard当中,首先按照上面需求创建好文件目录。
thc0下面创建以下文件夹
thc1下面创建以下文件夹
也可以采用命令创建这些目录:
`mkdir \shard\thc0\thc00\data`
`mkdir \shard\thc0\thc00\log`
`mkdir \shard\thc0\thc01\data`
`mkdir \shard\thc0\thc01\log`
`mkdir \shard\thc0\thc02\data`
`mkdir \shard\thc0\thc02\log`
`mkdir \shard\thc1\thc10\data`
`mkdir \shard\thc1\thc10\log`
`mkdir \shard\thc1\thc11\data`
`mkdir \shard\thc1\thc11\log`
`mkdir \shard\thc1\thc12\data`
`mkdir \shard\thc1\thc12\log`
二、配置文件。
一、配置thc0。
切换到MongoDB的bin目录下面
`cd mongodb\bin`
进行文件配置:
`mongod --dbpath D:\MongoDB\shard\thc0\thc00\data --logpath D:\MongoDB\shard\thc0\thc00\log\log.txt --logappend --port 27010 --replSet thc0 --shardsvr `
`mongod --dbpath D:\MongoDB\shard\thc0\thc01\data --logpath D:\MongoDB\shard\thc0\thc01\log\log.txt --logappend --port 27011 --replSet thc0 --shardsvr`
`mongod --dbpath D:\MongoDB\shard\thc0\thc02\data --logpath D:\MongoDB\shard\thc0\thc02\log\log.txt --logappend --port 27012 --replSet thc0 --shardsvr`
进入到一个节点:
`>mongo localhost:27010`
注册,采用的是PSA模式:
`var rsconf = {
"_id" : "thc0",
"members" : [
{
"_id" : 0,
"host" : "localhost:27010"
},
{
"_id" : 1,
"host" : "localhost:27011"
},
{
"_id" : 2,
"host" : "localhost:27012",
"arbiterOnly" : true,
"priority":0
}
]
}
rs.initiate(rsconf)`
看到这个节点是从节点。按一下回车键会变成主节点,然后连接到从节点,在主节点插入数据,从节点更新数据。
进入从节点我们show dbs时发现会报错,那么就是没有同步:可以执行如下操作
`rs.slaveOk()`
这样子这个副本集就搭好了。
二、配置thc1。
这配置和thc1是同样的操作。
切换到MongoDB的bin目录下面
`cd mongodb\bin`
进行文件配置:
``mongod --dbpath D:\MongoDB\shard\thc1\thc10\data --logpath D:\MongoDB\shard\thc1\thc10\log\log.txt --logappend --port 27013 --replSet thc1 --shardsvr`
``mongod --dbpath D:\MongoDB\shard\thc1\thc11\data --logpath D:\MongoDB\shard\thc1\thc11\log\log.txt --logappend --port 27014 --replSet thc1 --shardsvr`
``mongod --dbpath D:\MongoDB\shard\thc1\thc12\data --logpath D:\MongoDB\shard\thc1\thc12\log\log.txt --logappend --port 27015 --replSet thc1 --shardsvr`
进入到一个节点:
`>mongo localhost:27013`
注册,采用的是PSA模式:
`var rsconf = {
"_id" : "thc1",
"members" : [
{
"_id" : 0,
"host" : "localhost:27013"
},
{
"_id" : 1,
"host" : "localhost:27014"
},
{
"_id" : 2,
"host" : "localhost:27015",
"arbiterOnly" : true,
"priority":0
}
]
}
rs.initiate(rsconf)`
后面可以按照上面thc0的步骤进行验证。
三、配置config。
创建好文件夹
`mkdir \shard\thcconfig\thc10\data`
`mkdir \shard\thcconfig\thc10\log`
切换到MongoDB的bin目录下面
`cd mongodb\bin`
进行文件配置:
`mongod --dbpath D:\MongoDB\shard\thcconfig\config0\data --logpath D:\MongoDB\shard\thcconfig\config0\log\log.txt --logappend --port 27019 --replSet thcconfig --configsvr`
连接到27019
`mongo localhost:27019/admin`
注册:
``var rsconf = {`
`"_id" : "thcconfig",
"members" : [
{
"_id" : 0,`
`"host" : "localhost:27019"`
`},`
``
]
`}`
``rs.initiate(rsconf)``
三、创建路由节点。
新建目录
`mongos --logpath D:\MongoDB\shard\router\log\mongos.log --logappend --port 27017 --configdb "thcconfig\localhost:27019"`
四、进入mongos。
mongo
如果这里不能进去,可能是端口冲突,查看一下端口,杀掉进程后继续就可以了。
如上所示就可以正常启动了。
五、连接到路由服务器mongos节点。添加分片集。
和连接mongod节点一样,我们可以使用mongo程序来连接,由于使用默认的27017作为mongos端口,可以在本机直接使用mongo命令,或者手动指定主机或端口号
四、实验操作。
一、查看当前状态
sh.status()
二、 创建数据库cqust。
`Use cqust`
三、 在数据库cqust中创建students集合
四、 自行选择片键,在cqust.students集合上创建片键索引。
五、开启数据库(db)分片功能
六、 对集合(Collection)执行分片
七、 运行populate_cqust_students.js添加50000条学生数据到cqust.students集合
八、查看数据分片状态
`use cqust`
`sh.status()`
`db.stats()`
`db.students.getShardDistribution()`
更多推荐
所有评论(0)