MongoDB分片集群部署

本文详细介绍了MongoDB分片集群的原理与环境部署步骤,包括分片集群构造、chunk数据分区、chunk大小调整、chunk拆分与平衡。通过3台机器部署MongoDB 4.0.16,涉及config server、分片副本集及mongos的配置与启动,最后通过设置片键和插入数据测试分片效果。
摘要由CSDN通过智能技术生成


MongoDB 3.4 中文社区
http://www.mongoing.com/docs/sharding.html

1 什么是分片技术

分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事。和MySQL分区方案相比,MongoDB的最大区别在于它几乎能自动完成所有事情,只要告诉MongoDB要分配数据,它就能自动维护数据在不同服务器之间的均衡。

1.1 分片集群构造

在这里插入图片描述

  • mongos :mongos充当查询路由器,在客户端应用程序和分片群集之间提供接口。
  • config server:配置服务器存储集群的元数据和配置设置。从MongoDB 3.4开始,配置服务器必须部署为副本集(CSRS)。
  • shard:真正的数据存储位置,以chunk为单位存数据,每个shard都可以部署为副本集。

Mongos本身并不持久化数据,Sharded cluster所有的元数据都会存储到Config Server,而用户的数据会议分散存储到各个shard。Mongos启动后,会从配置服务器加载元数据,开始提供服务,将用户的请求正确路由到对应的碎片。

Mongos的路由功能

  • 当数据写入时,MongoDB Cluster根据分片键设计写入数据。
  • 当外部语句发起数据查询时,MongoDB根据数据分布自动路由至指定节点返回数据。

1.2 使用chunk进行数据分区

MongoDB使用与集合关联的shard key将数据划分为chunk。一个chunk包括分片数据的子集的。每个chunk都有一个基于shard key的上下限范围。
在这里插入图片描述
当MongoDB超出配置的chunk大小时,MongoDB会对其进行拆分。插入和更新都可以触发块拆分。

chunk可以代表的最小范围是单个唯一的分片shard key。仅包含具有单个分片shard key的文档的块无法拆分。

1.3 chunk的大小

MongoDB中的默认chunk大小为64 MB。可以增加或减少chunk的大小。考虑更改默认块大小的含义:

  1. 小的chunk导致更均匀的数据分发,但代价是迁移更加频繁。这会在查询路由(mongos)层产生费用。
  2. 大得到chunk导致更少的迁移。从网络的角度以及在查询路由层的内部开销方面,这都是更有效的。但是,这些效率是以潜在的数据分布不均为代价的。
  3. chunk的大小影响最大数量的文档每块要迁移。
  4. 分片现有集合时,chunk的大小会影响最大集合大小。分片后,chunk大小不会限制集合大小。

对于许多部署而言,避免以频繁分散的数据集为代价,避免频繁的迁移和潜在的虚假迁移。

1.4 chunk分割

拆分是防止chunk增长太大的过程。当某个chunk增长到超过指定的块大小时,或者如果该chunk中的文档数超过了每块要迁移的最大文档数 ,MongoDB将根据该chunk所代表的shard key值拆分该块。必要时可以将一个大的chunk拆分为多个。插入和更新可能会触发拆分。拆分是有效的元数据更改。
在这里插入图片描述

1.5 balancing

平衡器是管理数据块迁移的后台进程。如果最大和最小碎片之间的块数差异超过迁移阈值,则平衡器将开始在整个群集中迁移块,以确保数据的均匀分布。
在这里插入图片描述

2 环境部署(3台机器全部执行)

2.1 MongoDB版本 4.0.16

MongoDB下载地址
官方:
https://www.mongodb.com/download-center#community
百度网盘:
链接:https://pan.baidu.com/s/1gwa6OHJGxoSLDNrpNviuKg 密码:u00s

[root@node3 ~]# mongod -version
db version v4.0.16
git version: 2a5433168a53044cb6b4fa8083e4cfd7ba142221
allocator: tcmalloc
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

2.2 主机分配

node1:192.168.36.150 node2:192.168.36.151 node3:192.168.36.152
shard1 主节点 shard1 副本 shard1 仲裁
shard2 仲裁 shard2 主节点 shard2 副本
shard3 副本 shard3 仲裁 shard3 主节点

2.3 端口分配

mongos config shard1 shard2 shard3
20000 21000 27001 27002 27003

2.4 MongoDB安装

2.4.1yum安装(不推荐)

yum不推荐的原因:

  1. 下载太慢
  2. yum安装的mongodb全用默认路径,按需求配置目录时太麻烦

配置yum源

cat /etc/yum.repos.d/mongodb-org-4.2.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

安装

yum install -y mongodb-org

2.4.2源码安装

源码安装非常简单,只需要解压就可以了,tar包提只供了mongodb的命令,其他的需要自己手动配置

[root@node1 tmp]# tar -zxvf mongodb-linux-x86_64-4.0.16.tgz -C /opt
[root@node1 opt]# mv mongodb-linux-x86_64-4.0.16/ mongodb

2.5 配置环境变量

[root@node1 opt]# tail -2 /etc/profile
export MONGODB_HOME=/opt/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
[root@node1 opt]# source /etc/profile

2.6 创建文件路径

配置文件路径:/etc/mongodb
数据存放路径:/data/mongodb
日志路径:/var/log/mongodb
pid路径:/var/run/mongodb

mkdir /etc/mongodb/
mkdir -p /data/mongodb/mongos/log
mkdir -p /data/mongodb/config/data
mkdir -p /data/mongodb/config/log
mkdir -p /data/mongodb/shard1/data
mkdir -p /data/mongodb/shard1/log
mkdir -p /data/mongodb/shard2/data
mkdir -p /data/mongodb/shard2/log
mkdir -p /data/mongodb/shard3/data
mkdir -p /data/mongodb/shard3/log
mkdir -p /var/log/mongodb
mkdir -p /var/run/mongodb

2.7 config server集群配置

配置config.conf
配置另外两台时注意修改ip

[root@node1 mongodb]# pwd
/etc/mongodb
[root@node1 mongodb]# cat config.conf 
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/config.log
storage:
  #dbPath: /data/mongodb
  dbPath: /data/mongodb/config/data
  journal:
    enabled: true
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/config.pid  # location of pidfile
net:
  port:
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于MongoDB分片集群部署,您可以按照以下步骤进行操作: 1. 部署配置服务器(config server):配置服务器用于存储分片集群的元数据,可以独立部署或与其他组件共享服务器。您可以选择部署多个配置服务器以增加可用性。 2. 启动分片服务器(shard server):分片服务器用于存储数据,您可以选择在不同的物理机器或虚拟机上启动多个分片服务器。每个分片服务器都可以容纳一部分数据。 3. 启动路由器(router):路由器也称为mongos进程,它是应用程序和分片集群之间的中间件。它将客户端请求路由到正确的分片服务器,并协调数据的读写操作。 4. 添加分片:在启动了路由器和分片服务器之后,您需要将分片服务器添加到集群中。使用mongos进程连接到配置服务器,并使用`sh.addShard()`命令添加每个分片服务器。 5. 配置分片键(shard key):分片键用于将数据划分为不同的分片。选择一个适合您数据模式和查询模式的字段作为分片键,并使用`sh.shardCollection()`命令启用分片。 6. 验证部署:您可以使用`sh.status()`命令来验证集群的状态,并确保所有组件都正常工作。 这只是一个简单的概述,实际部署过程可能会更加复杂,并且取决于您的环境和需求。建议您参考MongoDB官方文档中关于分片集群部署的详细指南,以获得更全面的了解和操作指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT民工9727

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值