前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongodb4.0.2分片集群部署

mongodb4.0.2分片集群部署

作者头像
拓荒者
发布2019-09-18 10:41:23
5340
发布2019-09-18 10:41:23
举报
文章被收录于专栏:运维经验分享运维经验分享

mongodb4.0.2分片集群部署

2018年11月14日 11:05:50 Full Stack Developer 阅读数 331

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

本文链接:https://blog.csdn.net/cron_zzx/article/details/84060221

一、分片集群简介

在之前有说过关于MongoDB的复制集,复制集主要用来实现自动故障转移从而达到高可用的目的,然而,随着业务规模的增长和时间的推移,业务数据量会越来越大,当前业务数据可能只有几百GB不到,一台DB服务器足以搞定所有的工作,而一旦业务数据量扩充大几个TB几百个TB时,就会产生一台服务器无法存储的情况,此时,需要将数据按照一定的规则分配到不同的服务器进行存储、查询等,即为分片集群。分片集群要做到的事情就是数据分布式存储。

集群组建示意图:

MongoDB分片群集主要有如下三个组件:

  •     Shard:分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Peplica   Set 承担,防止主机单点故障。
  •     Config Server:配置服务器,主要是记录shard的配置信息(元信息metadata),如数据存储目录,日志目录,端口号,是否开启了journal等信息,其中包括chunk信息。为了保证config服务器的可用性,也做了复制集处理,注意,一旦配置服务器无法使用,则整个集群就不能使用了,一般是独立的三台服务器实现冗余备份,这三台可能每一台是独立的复制集架构。
  •     Routers:前端路由,负责数据的分片写入。客户端由此接入,且让整个群集看上去像单一数据库,前端应用可以透明使用。应用程序通过驱动程序直接连接router,router启动时从配置服务器复制集中读取shared信息,然后将数据实际写入或读取(路由)到具体的shard中。

二、集群部署

环境准备:

mongodb4.0.2压缩包官网地址 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz

mongo1:192.168.247.141  shard1:27001  shard2:27002  shard3:27003  configs:27018  mongos:27017

mongo2:192.168.247.142  shard1:27001  shard2:27002  shard3:27003  configs:27018  mongos:27017

mongo3:192.168.247.143  shard1:27001  shard2:27002  shard3:27003  configs:27018  mongos:27017

说明:

1、启动顺序:configs---》shard(1,2,3)---》mongos

2、configs和shard1、shard2、shard3由mongod启动和管理,mongos:27017 由mongos启动管理。

部署(在mongo1上安装,然后将安装目录拷贝到其他主机):

代码语言:javascript
复制
tar -xf mongodb-linux-x86_64-4.0.2.tgz
mkdir /usr/local/mongo
mv mongodb-linux-x86_64-4.0.2/* /usr/local/mongo/
echo 'export PATH=$PATH:/usr/local/mongo/bin'    >> /etc/profile
source /etc/profile
cd /usr/local/mongo/
mkdir  conf  log
 mkdir -p  data/config
 mkdir -p  data/shard1
 mkdir -p  data/shard2
 mkdir -p  data/shard3
touch  log/config.log
 touch  log/mongos.log
 touch  log/shard1.log
 touch  log/shard2.log
 touch  log/shard3.log
touch  conf/config.conf
 touch  conf/mongos.conf
 touch  conf/shard1.conf
 touch  conf/shard2.conf
 touch  conf/shard3.conf
vim conf/config.conf
  1. dbpath=/usr/local/mongo/data/config
  2. logpath=/usr/local/mongo/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

vim conf/shard1.conf

  1. dbpath=/usr/local/mongo/data/shard1 #其他2个分片对应修改为shard2、shard3文件夹
  2. logpath=/usr/local/mongo/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

vim conf/shard2.conf

  1. dbpath=/usr/local/mongo/data/shard2
  2. logpath=/usr/local/mongo/log/shard2.log
  3. port=27002
  4. logappend=true
  5. fork=true
  6. maxConns=5000
  7. storageEngine=mmapv1
  8. shardsvr=true
  9. replSet=shard2
  10. bind_ip=0.0.0.0

vim conf/shard3.conf

  1. dbpath=/usr/local/mongo/data/shard3
  2. logpath=/usr/local/mongo/log/shard3.log
  3. port=27003
  4. logappend=true
  5. fork=true
  6. maxConns=5000
  7. storageEngine=mmapv1
  8. shardsvr=true
  9. replSet=shard3
  10. bind_ip=0.0.0.0

 vim conf/mongos.conf

  1. systemLog:
  2. destination: file
  3. logAppend: true
  4. path: /usr/local/mongo/log/mongos.log
  5. processManagement:
  6. fork: true
  7. # pidFilePath: /var/log/nginx/mongodbmongos.pid
  8. # network interfaces
  9. net:
  10. port: 27017
  11. bindIp: 0.0.0.0
  12. #监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
  13. sharding:
  14. configDB: configs/mongo1:27018,mongo2:27018,mongo3:27018

scp /usr/local/mongo/*    mongo2:/usr/local/mongo/

scp /usr/local/mongo/*    mongo3:/usr/local/mongo/

启动服务(所有主机):

启动配置服务器副本集:mongod -f /usr/local/mongo/conf/config.conf

mongo --port 27018

配置副本集:

  1. config = {
  2. _id : "configs",
  3. members : [
  4. {_id : 0, host : "192.168.247.141:27018" },
  5. {_id : 1, host : "192.168.247.142:27018" },
  6. {_id : 2, host : "192.168.247.143:27018" }
  7. ]
  8. }

初始化命令:  rs.initiate(config); 

rs.status()

启动3个分片副本集:

mongod -f /usr/local/mongo/conf/shard1.conf mongo --port 27001

配置副本集:

  1. config = {
  2. _id : "shard1",
  3. members : [
  4. {_id : 0, host : "192.168.247.141:27001" },
  5. {_id : 1, host : "192.168.247.142:27001" },
  6. {_id : 2, host : "192.168.247.143:27001" }
  7. ]
  8. }

mongod -f /usr/local/mongo/conf/shard2.conf mongo --port 27002

配置副本集:

  1. config = {
  2. _id : "shard2",
  3. members : [
  4. {_id : 0, host : "192.168.247.141:27002" },
  5. {_id : 1, host : "192.168.247.142:27002" },
  6. {_id : 2, host : "192.168.247.143:27002" }
  7. ]
  8. }

mongod -f /usr/local/mongo/conf/shard3.conf

mongo --port 27003

配置副本集:

代码语言:javascript
复制
  1. config = {
  2. _id : "shard3",
  3. members : [
  4. {_id : 0, host : "192.168.247.141:27003" },
  5. {_id : 1, host : "192.168.247.142:27003" },
  6. {_id : 2, host : "192.168.247.143:27003" }
  7. ]
  8. }

启动路由服务器副本集:

mongos -f /usr/local/mongo/conf/mongos.conf

mongo --port 27017

启用分片(只需在任意一台执行即可):

use admin

sh.addShard("shard1/192.168.247.141:27001,192.168.247.142:27001,192.168.247.143:27001") sh.addShard("shard2/192.168.247.141:27002,192.168.247.142:27002,192.168.247.143:27002") sh.addShard("shard3/192.168.247.141:27003,192.168.247.142:27003,192.168.247.143:27003")

----------------------------------------------------------

分片功能测试:

设置分片chunk大小       

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

模拟写入数据       

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

7、启用数据库分片

sh.enableSharding("mytest")

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

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongodb4.0.2分片集群部署
  • 一、分片集群简介
    • 集群组建示意图:
    • 二、集群部署
      • 环境准备:
        • 部署(在mongo1上安装,然后将安装目录拷贝到其他主机):
          • 分片功能测试:
          相关产品与服务
          云数据库 MongoDB
          腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档