前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB4.0搭建分布式集群

MongoDB4.0搭建分布式集群

作者头像
拓荒者
发布2019-09-08 16:58:29
8080
发布2019-09-08 16:58:29
举报
文章被收录于专栏:运维经验分享运维经验分享

撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>>

MongoDB4.0搭建分布式集群

2018年09月15日 11:11:42 Calon Mo 阅读数 3994

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/kevinmcy/article/details/82712074

搭建之前先了解一下MongoDB分片群集主要有如下三个组件:

  • Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Peplica Set 承担,防止主机单点故障。
  • Config Server:配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。
  • Routers:前端路由,客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。

系统环境

Centos7.5、MongoDB4.0.2、关闭防火墙。

IP

路由服务端口

配置服务端口

分片1端口

分片2端口

分片3端口

10.211.55.3

27017

27018

27001

27002

27003

10.211.55.4

27017

27018

27001

27002

27003

10.211.55.5

27017

27018

27001

27002

27003

三台机器的配置服务(27018)形成复制集,分片1、2、3也在各机器都部署一个实例,它们之间形成复制集,客户端直接连接3个路由服务与之交互,配置服务和分片服务对客户端是透明的。

服务器的安装及配置(3台服务器执行相同操作)

1、下载解压MongoDB

到MongoDB官网下载:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz

解压到/home/mongodb,设置环境变量:

代码语言:javascript
复制
export PATH=$PATH:/home/mongodb/bin

保存后执行:

代码语言:javascript
复制
srouce /etc/profile

2、创建路由、配置、分片等的相关目录与文件

  1. 启动配置文件存放的文件夹:mkdir -p /home/mongodb/conf
  2. 配置服务数据存放目录:mkdir -p /home/mongodb/data/config
  3. 分片1服务数据存放目录:mkdir -p /home/mongodb/data/shard1
  4. 分片2服务数据存放目录:mkdir -p /home/mongodb/data/shard2
  5. 分片3服务数据存放目录:mkdir -p /home/mongodb/data/shard3
  6. 配置服务日志存放文件:mkdir -p /home/mongodb/log/config.log
  7. 路由服务日志存放文件:mkdir -p /home/mongodb/log/mongos.log
  8. 分片1服务日志存放文件:mkdir -p /home/mongodb/log/shard1.log
  9. 分片2服务日志存放文件:mkdir -p /home/mongodb/log/shard2.log
  10. 分片3服务日志存放文件:mkdir -p /home/mongodb/log/shard3.log

配置服务器部署(3台服务器执行相同操作)

1、在/home/mongodb/conf目录创建config.conf:

  1. dbpath=/home/mongodb/data/config
  2. logpath=/home/mongodb/log/config.log
  3. port=27018
  4. logappend=true
  5. fork=true
  6. maxConns=5000
  7. #复制集名称
  8. replSet=configs
  9. #置参数为true
  10. configsvr=true
  11. #允许任意机器连接
  12. bind_ip=0.0.0.0

2、配置复制集

分别启动三台服务器的配置服务: 

代码语言:javascript
复制
mongod -f /home/mongodb/conf/config.conf

连接mongo,只需在任意一台机器执行即可:

代码语言:javascript
复制
mongo --host 10.211.55.3 --port 27018

切换数据库:

代码语言:javascript
复制
use admin

初始化复制集:

代码语言:javascript
复制
rs.initiate({_id:"configs",members:[{_id:0,host:"10.211.55.3:27018"},{_id:1,host:"10.211.55.4:27018"}, {_id:2,host:"10.211.55.5:27018"}]})

其中_id:"configs"的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。

查看状态:

代码语言:javascript
复制
rs.status()

等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他2台为SECONDARY。

分片服务部署(3台服务器执行相同操作)

1、在/home/mongodb/conf目录创建shard1.conf、shard2.conf、shard3.conf,内容如下:

  1. dbpath=/home/mongodb/data/shard1 #其他2个分片对应修改为shard2、shard3文件夹
  2. logpath=/home/mongodb/log/shard1.log #其他2个分片对应修改为shard2.log、shard3.log
  3. port=27001 #其他2个分片对应修改为27002、27003
  4. logappend=true
  5. fork=true
  6. maxConns=5000
  7. storageEngine=mmapv1
  8. shardsvr=true
  9. replSet=shard1 #其他2个分片对应修改为shard2、shard3
  10. bind_ip=0.0.0.0

端口分别是27001、27002、27003,分别对应shard1.conf、shard2.conf、shard3.conf。

还有数据存放目录、日志文件这几个地方都需要对应修改。

在3台机器的相同端口形成一个分片的复制集,由于3台机器都需要这3个文件,所以根据这9个配置文件分别启动分片服务:

代码语言:javascript
复制
mongod -f /home/mongodb/conf/shard{1/2/3}.conf

2、将分片配置为复制集

连接mongo,只需在任意一台机器执行即可:

代码语言:javascript
复制
mongo --host 10.211.55.3 --port 27001 //这里以shard1为例,其他两个分片则再需对应连接到27002、27003的端口进行操作即可

切换数据库:

代码语言:javascript
复制
use admin

初始化复制集:

代码语言:javascript
复制
rs.initiate({_id:"shard1",members:[{_id:0,host:"10.211.55.3:27001"},{_id:1,host:"10.211.55.4:27001"},{_id:2,host:"10.211.55.5:27001"}]})

以上是基于分片1来操作,同理,其他2个分片也要连到各自的端口来执行一遍上述的操作,让3个分片各自形成1主2从的复制集,注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式。

路由服务部署(3台服务器执行相同操作)

1、在/home/mongodb/conf目录创建mongos.conf,内容如下:

  1. logpath=/home/mongodb/log/mongos.log
  2. logappend = true
  3. port = 27017
  4. fork = true
  5. configdb = configs/10.211.55.3:27018,10.211.55.4:27018,10.211.55.5:27018
  6. maxConns=20000
  7. bind_ip=0.0.0.0

2、启动mongos

分别在三台服务器启动:

代码语言:javascript
复制
mongos -f /home/mongodb/conf/mongos.conf

3、启动分片功能

连接mongo:

代码语言:javascript
复制
mongo --host 10.211.55.3 --port 27017

切换数据库:

代码语言:javascript
复制
use admin

添加分片,只需在一台机器执行即可:        

  1. sh.addShard("shard1/10.211.55.3:27001,10.211.55.4:27001,10.211.55.5:27001")
  2. sh.addShard("shard2/10.211.55.3:27002,10.211.55.4:27002,10.211.55.5:27002")
  3. sh.addShard("shard3/10.211.55.3:27003,10.211.55.4:27003,10.211.55.5:27003")

查看集群状态:

代码语言:javascript
复制
sh.status()

4、实现分片功能

设置分片chunk大小        

  1. use config
  2. db.setting.save({"_id":"chunksize","value":1}) # 设置块大小为1M是方便实验,不然需要插入海量数据

5、模拟写入数据

  1. use calon
  2. for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"jack"+i})} #模拟往calon数据库的user表写入5万数据

7、启用数据库分片

代码语言:javascript
复制
sh.enableSharding("calon")

8、创建索引,对表进行分片

  1. db.user.createIndex({"id":1}) # 以"id"作为索引
  2. sh.shardCollection(calon.user",{"id":1}) # 根据"id"对user表进行分片
  3. sh.status() # 查看分片情况

到此,MongoDB分布式集群就搭建完毕。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB4.0搭建分布式集群
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档