mongodb sharding集群搭建
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb sharding集群搭建相关的知识,希望对你有一定的参考价值。
创建虚拟机,如果是使用copy的方式安装系统,记得修改机器名,否则所有的机器名称都一样,会造成安装失败
同时关闭掉防火墙,将所有的机器的时间调成一致,master和slave的heartbeat间隔不能超过三秒,否则造成启动mongos失败,这个可以查看mongos日志
使用MongoDB 3.02或者后续版本的安装包在D:\mongodb下安装. 如果你是自己通过源代码编译获得的MongoDB的相关程序, 你需要建立D:\mongodb\bin,并把mongod.exe, mongo.exe, mongos.exe拷贝到它下面(PS:为了支持NG全文索引搜索,需要使用编译的v3.0.6版本二进制文件替换mongod.exe,mongo.exe,mongos.exe).
集群监控工具https://cloud.mongodb.com 试用期有30天(个人觉得这个监控工具还是比较好用的)
安装步骤看起来很多,其实很简单,就是步骤多了点,多点耐心就好
1.1.1 准备工作
我们将分别在上述三台机器上分别创建相应目录
将mongodb.zip解压到D:\mongodb下
创建D:\mongodb\cluster\shard1 目录,在其下创建data, log子目录;
创建完成后的目录清单:
D:\mongodb\cluster\shard1\data
D:\mongodb\cluster\shard1\log
D:\mongodb\bin
在192.168.33.92, 192.168.33.93 和192.168.33.94上, 在D:\mongodb\cluster\shard1下创建config.conf文本文件,在文件中放入以下内容,注意缩进只能用空格而不能用tab:
systemLog:
destination: file
path: d:\mongodb\cluster\shard1\log\shard1.log
logAppend: true
logRotate: rename
storage:
dbPath: d:\mongodb\cluster\shard1\data
journal:
enabled: true
directoryPerDB: true
engine: mmapv1
replication:
oplogSizeMB: 10000
replSetName: shard1
sharding:
clusterRole: shardsvr
net:
port: 22001
到此,准备工作完成.
1.1.2 配置replica
在三台机器上通过command line分别启动三个成员实例.
在解压后的D:\mongodb文件夹按住shift然后右键 然后点open command window here 打开dos窗口
d:\mongodb\bin\mongod --config d:\mongodb\cluster\shard1\config.conf
1.1.3 初始化replica set并添加replica set成员, :
使用mongo shell(mongo.exe)或者其他工具登录到192.168.33.92:22001.
D:\Dev\software\mongo-master\bin>mongo 192.168.33.92:22001 //此命令必须在非arbiter 机器上执行
2015-04-29T11:37:58.375-
MongoDB shell version: 3.1.2-pre-
connecting to: 192.168.33.92:22001/test
> use admin
> cfg = { _id:"shard1", members:[
{_id:0,host:"192.168.33.92:22001",priority:1000},
{_id:1,host:"192.168.33.93:22001",priority:999},
{_id:2,host:"192.168.33.94:22001",priority : 800, arbiterOnly: true}
]
}
> rs.initiate(cfg); //此命令必须在非arbiter 机器上执行
2 配置config server:
Config Server是一个特殊的mongod实例, 也是一个数据库, 用来保存cluster的分片信息元数据. Config Server与 cluster中其他的作为数据库服务器的mongod实例没有直接联系, 它里面存储的都是chunk存储和迁移的信息.
我们将分别在上述三台机器上分别创建相应目录
在192.168.33.92, 192.168.33.93, 192.168.33.94进行如下操作
创建D:\mongodb\cluster\configsvr\ 目录,在其下创建data, log子目录;
创建完成后的目录清单:
D:\mongodb\cluster\configsvr\data
D:\mongodb\cluster\configsvr\log
确认mongod.exe在D:\mongodb\bin目录下, 如果你是采用的安装包安装到D:\mongodb目录, mongod.exe应该已经在D:\mongodb\bin了
2.1 编辑配置文件:
在192.168.33.92, 192.168.33.93 , 192.168.33.94上, 在D:\mongodb\cluster\ configsvr下创建config.conf文本文件,在文件中放入以下内容,注意缩进只能用空格而不能用tab:
3.0版本:
systemLog:
destination: file
path: d:\mongodb\cluster\configsvr\log\configsvr.log
logAppend: true
logRotate: rename
storage:
dbPath: d:\mongodb\cluster\configsvr\data
journal:
enabled: true
directoryPerDB: true
engine: mmapv1
sharding:
clusterRole: configsvr
net:
port: 21110
2.2 启动三个config server
在三台机器上通过command line使用如下命令分别启动三个成员的mongo config server实例:
d:\mongodb\bin\mongod --config d:\mongodb\cluster\ configsvr\config.conf
2.3 配置mongos
Mongos实例是应用程序访问cluster的入口. Mongos也可以配置多个来增加系统容错. 如果使用多个mongos, 所有mongos的config server配置项必须完全相同.
本文档中,我们将使用三个mongos实例, 分别置于192.168.33.92:21100, 192.168.33.93:21100 和192.168.33.94:21100
2.4 创建目录
我们将分别在上述三台机器上分别创建相应目录
在192.168.33.92, 192.168.33.93 , 192.168.33.94进行如下操作
创建D:\mongodb\cluster\mongos\ 目录,在其下创建 log子目录;
创建完成后的目录清单:
D:\mongodb\cluster\ mongos \log
确认mongos.exe在D:\mongodb\bin目录下,如果你是采用的安装包安装到D:\mongodb目录, mongos应该已经在D:\mongodb\bin了
2.5 编辑配置文件:
在192.168.33.92, 192.168.33.93 , 192.168.33.94 上, 在D:\mongodb\cluster\ mongos下创建config.conf文本文件,在文件中放入以下内容,注意缩进只能用空格而不能用tab:
对于版本3.0:
#YAML format
systemLog:
destination: file
path: D:\mongodb\cluster\mongos\log\mongos.log
logAppend: true
logRotate: rename
sharding:
configDB: 192.168.33.92:21110,192.168.33.93:21110,192.168.33.94:21110
net:
port: 21100
2.6 启动三个mongos
在三台机器上通过command line使用如下命令分别启动mongos实例.
在192.168.33.92, 192.168.33.93 , 192.168.33.94:
d:\mongodb\bin\mongos --config d:\mongodb\cluster\ mongos\config.conf
3 添加shard节点到cluster中
现在虽然各个应用 (3个shard1 replica set成员, 3 个config server, 3 个mongos) 都在运行,但是cluster还是空的,没有一个数据库server加进来. 也就是说, shard1和 还没有加进 cluster中.
如果使用mongo shell登录到任何一个mongos, 运行sh.status()命令,你会看到如下结果:
D:\Dev\software\mongo-master\bin>mongo 192.168.33.92:21100
2015-05-01T10:47:30.337-0400
MongoDB shell version: 3.1.2-pre-
connecting to: 192.168.33.92:21100/test
mongos> show dbs
admin (empty)
config (empty)
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5542e946bfcdf8ecc8ae22da")
}
shards:
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
mongos>
以上结果中shards为空,表示我们没有任何shard.下面我们把shard1添加到cluster中来.
添加shard1到cluster中
可以使用mongo shell登录任意一个mongos 完成shard添加操作. 这里我们登录192.168.33.92:21100.
sh.addShard( "shard1/192.168.33.92:22001" ). Replica set中的任意一个成员都可以在这里作为种子.
Mongos会自动识别, 搜索并添加所有输入该replica set中的所有成员
至此, cluster 已经建立完成.
3.2 添加新的shard并加入到cluster中
到现在为止我们的cluster中实际上只有一个节点. 一个replica set对于cluster来说算一个节点.因为任意时刻, 只有replica set中的primary可以接受写操作. 所以为了发挥cluster
的作用,我们需要添加多个replica set,这样mongos就可以并行读写多个replica set了.
参照Replica set deployment文档建立你想要的新的replica set并把它按照本文档前面的步骤加入到cluster中来. 在本文档的测试中, 我们加入了shard2,和shard3两个replica set.
如果一个collection已经被分片(执行过shardCollection命令), 添加新的shard的操作会触发数据的迁移.
在3台机器的部署中,我们把shard1的primary放在192.168.33.92:22001, shard2的primary 放在192.168.33.93:22002, shard3的primary放在192.168.33.94:22003.这样三台机器可以并行写入.
如果mongodb中有以下错误log :access control is not enabled and no --bind_ip has been specified.
就是机器的防火墙没有关闭。
以上是关于mongodb sharding集群搭建的主要内容,如果未能解决你的问题,请参考以下文章
搭建 MongoDB分片(sharding) / 分区 / 集群环境