MongoDB-集群搭建
前言
搭建一个MongoDB的集群,这个环境只是内网的一个测试环境,分片没有使用副本集,配置并分配好端口后,开启集群的身份验证功能,在开启集群权限时,有些注意事项,在搭建过程中会着重标出。
一、集群规划
首先有三台服务器分别为192.168.0.230,192.168.0.232,192.168.0.234。集群规划如下:3个 用来分片,3个 mongos路由服务,3个 config配置服务器。
注意:保证三台服务器的端口是通的。
1.1端口分配
端口号分配情况,所有的分片都使用27017端口,所有的配置都使用20000端口,所有的mongos路由服务都使用30000端口,每个服务器具体信息如下:
表1-1 端口号分配表
|
192.168.0.230 |
192.168.0.232 |
192.168.0.234 |
|
|
mongos |
30000 |
30000 |
30000 |
|
config |
20000 |
20000 |
20000 |
|
sharing |
27017 |
27017 |
27017 |
1.2集群整体规划图

二、集群启动和配置
2.1 启动集群服务器
2.1.1 创建数据文件目录
230服务器分片1 # mkdir –p /data/mongodb/config /data/mongodb/shard1_1 232服务器分片2 # mkdir –p /data/mongodb/config /data/mongodb/shard1_2 234服务器分片3 # mkdir –p /data/mongodb/config /data/mongodb/shard1_3
然后按照顺序启动,分片服务器,配置服务器和路由服务器:
2.1.2 启动分片服务
230服务器: mongod --shardsvr --port --dbpath /data/mongodb/shard1_1 --logpath /data/mongodb/shard1_1/rs0.log --logappend --directoryperdb --fork 232服务器: mongod --shardsvr --port --dbpath /data/mongodb/shard1_2 --logpath /data/mongodb/shard1_2/rs0.log --logappend --directoryperdb --fork 234服务器: mongod --shardsvr --port --dbpath /data/mongodb/shard1_3 --logpath /data/mongodb/shard1_3/rs0.log --logappend --directoryperdb --fork
然后在三台服务器上各自启动配置服务器和路由服务器:
2.1.3 启动配置服务器
三台服务器分别执行:
mongod --configsvr --port --dbpath /data/mongodb/config --logpath /data/mongodb/config.log --logappend --directoryperdb –fork
2.1.4 启动路由服务
三台服务器分别执行:
mongos --configdb , , --port= --chunkSize= --logpath=/data/mongogdb/mongos.log --logappend --fork
注意:这里指定了—chunkSize分片块大小为1M,默认为64M,是为了能够更快的实现分片。
2.2 配置集群服务器
2.2.1 配置分片
连接到任意服务器的路由服务30000端口,把三个分片服务器添加到集群配置中去:
添加分片服务器
# mongo –port
mongos> use admin
switched to db admin
mongos> db.runCommand({"addshard":"192.168.0.230:27017"})
mongos> db.runCommand({"addshard":"192.168.0.232:27017"})
mongos> db.runCommand({"addshard":"192.168.0.234:27017"})
现在执行sh.status()就能看到集群的分片情况。分片环境已经配置完成,但还没开启集合的分片,接下来测试一个集合的分片功能。
2.2.2 激活并验证分片功能
集合开启分片之前,需要选择一个片键来指定分片规则,片键的选择直接影响数据分发的效果,关于片键的选择策略,具体问题具体分析,后续会简单整理一下。
注意:分片片键必须是索引
激活数据库foo的分片功能,并把其中的bar集合按照timestamp升序片键开启分片,操作如下:
# mongo –port
mongos> sh.enableSharding("foo")
{ }
mongos> })
{ }
这时使用sh.status()命令,就可以看到相应的集合已经开启了分片
mongos> for(var i=1; i<=500000; i++){ db.bar.insert({"inc":i, "timestamp":new Date()}) }
往数据库中插入50万数据,使用sh.status()查看数据已经均匀分布在各个分片上。
三、开启集群身份验证
默认情况下,MongoDB是不启动访问控制的,对于单机模式下,只需在启动mongod服务时添加--auth参数即可。但是在分片集群下只能使用keyfile的方式启动访问控制。
首先,生成一个keyfile文件,并把这个文件复制到其他服务器上。
# openssl rand -base64 > /data/mongodb/mongodb-keyfile # mongodb-keyfile 重要
注意:在启用访问控制之前,要保证路由服务和每个分片服务器已经存在一个管理员用户,用于添加用户和关闭集群使用。
添加用户也很简单,分别连到3000和27017端口在admin数据库执行以下命令:
mongos> use admin
switched to db admin
mongos> db.createUser({user:", roles:[{role: "root", db: "admin" }]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
接下来开启集群的访问控制,这里我讲keyfile文件拷贝到了/data/mongodb/keyfile目录下,在启动每个服务时(分片服务,配置服务,路由服务)添加--keyFile /data/mongodb/keyfile参数即可。
, , --port= --chunkSize= --logpath=/data/mongogdb/mongos.log --logappend –fork --keyFile /data/mongodb/keyfile
之后在连接到集群时,操作之前就需要验证用户身份了,其中验证有两种方式:
一是在连接时进行验证:
mongo --port -u " --authenticationDatabase "admin"
二是在连接后进行验证:
# mongo --port
mongos> use admin
switched to db admin
mongos> db.auth(")
验证成功后就可以进行相应的操作了。
四、集群中一些问题
1 关闭集群服务器
关闭顺序按照路由服务,配置服务,分片服务,分别连接到对应端口的admin数据库,使用db.shutdownServer()关闭服务。如果开启了身份验证,这里就用到了预先建好的admin用户
2 集群某个服务起不来
比如配置服务或分片服务启动错误,可能是上次退出不正常,这是可以选择修复数据,也可直接把数据文件中的mongod.lock文件删除。
3 数据没分片
首先保证集合开启了分片,然后查看一下config配置数据库中配置的chunkSize是多少,是不是数据不够大,最后查看一下服务器的时间,如果服务器的时间相差比较大,也会导致分片失败,服务器时间差最好保持在30秒以内。
MongoDB-集群搭建的更多相关文章
- Mongodb 集群搭建以及常见错误
Mongodb 集群搭建以及常见错误 1 关于Replica Sets +Sharding(主从复制加分片)搭建,不这详细去说,网上有很多,大部分的例子就三台服务器之间做主从复制,分2个shard,架 ...
- MongoDB集群搭建-副本集
MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: 一.Master-Slave方案: 主从: 二.Replica Set方案: 副本集: 步骤:(只要按步骤操作,100%成功) 1 ...
- Mongodb集群搭建之 Replica Set
Mongodb集群搭建之 Replica Set Replica Set 中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了, ...
- MongoDB集群搭建-分片
MongoDB集群搭建-分片 一.场景: 1,机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2,单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...
- mongodb集群搭建过程记录
mongodb集群搭建花费比较长的时间,在此记录下过程,方便以后使用 一 软件环境 系统:ubuntu 18.04,mongodb 社区版4.2 https://docs.mongodb.com/ma ...
- Mongodb集群搭建的三种方式
转自:http://blog.csdn.net/luonanqin/article/details/8497860 MongoDB是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key- ...
- Mongodb集群搭建
搭建高可用Mongodb集群 http://www.lanceyan.com/category/tech/mongodb/page/2 再看MongoDB副本集 http://blog.itpub. ...
- Mongodb集群搭建之 Sharding+ Replica Sets集群架构(2)
参考http://blog.51cto.com/kaliarch/2047358 一.概述 1.1 背景 为解决mongodb在replica set每个从节点上面的数据库均是对数据库的全量拷贝,从节 ...
- windows下mongodb集群搭建
本文介绍在windows环境下如何搭建一个高可用性的mongodb集群.系统环境为win7,mongodb版本为3.6.3. 本文采用的是分片+副本集的方式搭建集群,将分别介绍如何使用副本集和分片来提 ...
- mongodb集群搭建(分片+副本)
原文地址:https://www.cnblogs.com/ityouknow/p/7344005.html 相关概念 先来看一张图: 从图中可以看到有四个组件:mongos.config server ...
随机推荐
- .NET框架体系结构
刚开始接触.NET很疑惑,看完视频也不是太懂,通过总结和反复,从概括和概念入手,慢慢变得清晰了.这篇博客主要是我对.NET基础知识的了解,算作积累吧. .NET框架体系结构 由四个主要部分组成 ...
- JPA一对多循环引用的解决
说是解决,其实不是很完美的解决的,写出来只是想记录一下这个问题或者看一下有没有哪位仁兄会的,能否知道一二. 下面说说出现问题: 问题是这样的,当我查询一个一对多的实体的时候,工具直接就爆了,差不多我就 ...
- 一个java实习生两周八次的面试经历
以前从来没有因为求职出去面试过,一直觉得面试很可怕,没想到最近两周我也成为了面霸,两周面试八次,我的找工作之路就这样开始了!大概两个星期之前,我看着自己在招聘网站上写好的简历连投出去的勇气都没有,战战 ...
- python 颜色定义
1.颜色定义说明格式:\033[显示方式;前景色;背景色m前景色 背景色 颜色---------------------------------------30 40 黑色31 41 红色32 42 ...
- spring入门(二)【加载properties文件】
在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spri ...
- 用SQL语句添加删除修改字段_常用SQL
1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME DROP COLUMNc ...
- Django 模版语言详解
一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...
- Nuget很慢,我们该怎么办
在VS中给项目添加程序已经采用NuGet 十分方便 不过很多时候速度很慢,一直显示“正在检索信息” 其实直接使用程序包管理控制台,速度就会好很多 如果命令不太会写,安装包名不是确认,可以先登录 htt ...
- Asp.net 实现Session分布式储存(Redis,Mongodb,Mysql等) sessionState Custom
对于asp.net 程序员来说,Session的存储方式有InProc.StateServer.SQLServer和Custom,但是Custom确很少有人提及.但Custom确实最好用,目前最实用和 ...
- 设计人员应该看的15个很酷的 iOS 8 设计
苹果新一代智能手机 iPhone 6 发布已经有一段时间了,一些创意设计师已经开始在设计中采用 iOS 8 设计理念.当然,其中有些是对于未来的展望和大胆的设计.我在这里收集了15个很酷的 iOS 8 ...