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.

就是机器的防火墙没有关闭。

时间: 2024-10-11 00:47:53

mongodb sharding集群搭建的相关文章

mongoDB3.4的sharding集群搭建及JavaAPI的简易使用

第一部分 在搭建mongoDB之前,我们要考虑几个小问题: 1.我们搭建集群的目的是什么?是多备份提高容错和系统可用性还是横向拓展存储大规模数据还是两者兼有? 如果是为了多备份那么选择replication集群搭建即可,如果是为了处理大数据则需要搭建sharding集群,如果两者兼有需要对每个shardsvr创建replica. 2.什么是sharding?和replication有什么不同? 简单而言,replica是mongo提供服务的一个基本单位,单机系统和replication集群对用户

如何使用容器实现生产级别的MongoDB sharding集群的一键交付

作者介绍 魏世江 希云联合创始人.CTO,负责基于Docker的自动化服务管理平台的后端研发工作.擅长Docker相关技术.PasS平台架构及企业自动化运维系统的设计及开发.创业之前在新浪SAE平台任技术经理,从09年SAE立项至13年下半年的四年多时间里,一直负责SAEPasS平台各种基于Web的服务管理系统的设计及开发,在DevOps方面积累了丰富的经验.Docker引擎代码贡献者,在Docker开源项目中代码贡献量全球排名50名左右. 开篇 Mongo在很早就支持了replication

MongoDB分片集群搭建及扩容

### 实验:分片集群搭建及扩容#### 实验目标及流程 * 目标:学习如何搭建一个两分片的分片集群 * 环境:3台Linux虚拟机器,4Core 8GB * 步骤: * 配置域名解析 * 准备分片目录 * 创建第一个分片复制集并初始化 * 初始化分片集群,加入第一个分片 * 创建分片表 * 加入第二个分片#### 实验架构 ``` demo1 shard1(Primary|27017) shard2(Primary|27011) Config1(27019) mongos(27017) ```

mongodb副本集群搭建

一.搭建环境: mongodb版本:mongodb-linux-x86_64-3.0.6.gz linux版本:CentOS 7 x64 服务器:(端口:27000) 192.168.1.201 数据库服务器.192.168.1.202 数据库服务器.192.168.1.203 仲裁服务器 (每个服务器防火墙开启27000端口iptables -I INPUT -p tcp --dport 27000 -j ACCEPT) 二.201和202配置数据库并启动(集群名字:daxiong)命令: b

高可用mongodb集群的学习记录(四mongodb分片集群搭建)

无论oracle还是mysql数据库都有分区的概念,即同一张表物理上不在同一台机器上,有效缓解了表都集中存在一台机器的压力.当然,mongodb也有类似的机制,即是分片.具体理论知识大家可以参考网上文档,我这里只记录下具体操作步骤 参考网络上一个图.我选用的是2个副本集+1个仲裁.实际上我这里分片集群需要3个mongos,3个config server,数据分片3个shard server,对应着还有3个副本,3个仲裁节点,总共需要15个实例.因为我资源确实紧张,又不想影响实验效果.冥思苦想了一

elasticsearch与mongodb分布式集群环境下数据同步

1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索的存储库).ElasticSearch为应用程序提供搜索算法和相关的基础架构,用户只需要将应用程序中的数据上载到ElasticSearch数据存储中,就可以通过RESTful URL与其交互.ElasticSearch的架构明显不同于它之前的其他搜索引擎架构,因为它是通过水平伸缩的方式来构建的.不同

MongoDB 分片集群实战

背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁盘,此种方法虽然成本很高,但是实现比较简单,维护起来也比较方便. 水平扩展:通过使用更多配置一般的服务器来共同承担工作负载,此种方法很灵活,可以根据工作负载的大小动态增减服务器的数量,但是实现比较复杂,得有专门的人员来运维. Databases for MongoDB 试用 IBM Cloud 上提

Mongo 3.6.1版本Sharding集群配置

Mongo低版本和高版本的sharding集群配置,细节不太一样.目前网上的配置文档大都是针对低版本的.本人在配置3.6.1版本的mongosharding集群的过程中,碰到不少问题,官方文档没有直观的示例,参考起来有点一头雾水.特整理记录下自己的测试环境sharding集群配置过程,供大家参考. Mongo sharding集群由config server,mongos(路由)及shards服务器组成.他们的关系及扮演的角色,网上到处都是,不再详细介绍. 最开始,打算将config.mongo

Mongodb中Sharding集群

随着mongodb数据量的增多,可能会达到单个节点的存储能力限制,以及application较大的访问量也会导致单个节点无法承担,所以此时需要构建集群环境,并通过sharding方案将整个数据集拆分成多个更小的chunk,并分布在集群中多个mongod节点上,最终达到存储和负载能力扩容.压力分流的作用.在sharding架构中,每个负责存储一部分数据的mongod节点称为shard(分片),shard上分布的数据块称为chunk,collections可以根据“shard key”(称为分片键)