自建MongoDB实践:MongoDB 分片集群

本文详细介绍了MongoDB分片集群的搭建过程,包括配置服务器、副本集、查询路由器的设置,以及分片的添加和数据均衡。此外,文章讨论了分片集群在操作上的限制,如命令限制和查询优化注意事项。
摘要由CSDN通过智能技术生成

7357d710d92be54233371d71b31d821b.gif

新钛云服已累计为您分享725篇技术干货

9e7dc4ddcd933a91db8c8446eea7972c.gif

9bb03bc642d595d34c2a0776e578da5a.png

接下来的一些列文章会为大家介绍日常工作中常用的 NoSQL 产品 MongoDB。

主要涉及到:

MongoDB 的安装及基本使用

MongoDB 文档查询

MongoDB 复制集

MongoDB 分片集群的介绍及搭建

MongoDB 的备份及恢复

MongoDB 安全加密

MongoDB Change Stream 功能介绍及代码演示

MongoDB 其他

83418a6adbb7fc4d8a7b1b36913d06c3.gif

已发布文章可以点击跳转                                     

我们会用八篇文章近五万字来阐述 MongoDB 运维相关的日常实战事宜。

您当前看到的是系列文章的第四篇:《MongoDB 分片集群的介绍及搭建》

一般来说,在数据库系统和计算系统中,我们有两种方法来提高其性能。第一个是简单地用更强大的服务器取代我们常规的服务器,一般我们称之为垂直扩容(或纵向扩容)。

  ►垂直扩容的主要缺点是它有限制:它不能无限扩大,这取决于多方面的因素。诸如:硬件已达到其物理极限、云提供商不能为我们提供更强大的服务器。

提高性能的第二种方法是使用具有相同容量的服务器并增加其数量,一般我们称之为水平扩容(或横向扩容)。

eadf25df1baf68d34330b42a318499c9.png

当数据量比较大的时候,我们需要把数据分片运行在不同的机器中,以降低 CPU、内存和 IO 的压力,Sharding 就是数据库分片技术。

MongoDB 分片技术类似 MySQL 的水平切分和垂直切分,数据库主要由两种方式做 Sharding:垂直扩展和横向切分。

  • 垂直扩展:添加更多的 CPU,内存,磁盘空间等。

  • 横向切分:则是通过数据分片的方式,通过集群统一提供服务。

一个 MongoDB 分片集群由以下组件组成:

  • shard: 每个分片都包含分片数据的一个子集。每个分片以副本集部署。

  • mongos: Mongos 充当查询路由器,在客户端应用程序和分片集群之间提供接口。从 MongoDB 4.4 开始,mongos 可以支持 hedged 读取,以尽量减少延迟。

  • config servers: 配置服务器存储集群的元数据和配置信息。

bc41049d02f9558bd6c233dcc68df0dc.png

MongoDB 在 Collection 级别进行分片处理,在集群中的分片之间分发这些 Collection 数据。

一个生产环境的集群,请确保数据的冗余性及系统的高可用性。对于一个生产级别的分片集群,需要考虑一下几点:

  • 部署一个 3 成员的复制集作为一个配置中心服务

  • 每个分片部署为一个 3 成员的复制集

  • 部署一个或多个 mongos 路由

fd012ab8a13919594efab6b22ca6d6fb.png

环境准备

  • 开始演示:

主机名

IP

角色

mongo01.tyun.cn

10.20.20.19

mongos1(27017),config1(27000),shard1 primary(27010)

mongo02.tyun.cn

10.20.20.11

mongos2(27017),config2(27000),shard1 secondary(27010)

mongo03.tyun.cn

10.20.20.41

mongos3(27017),config3(27000),shard1 secondary(27010)

mongo04.tyun.cn

10.20.20.14

shard2 primary(27010)

mongo05.tyun.cn

10.20.20.53

shard2 secondary(27010)

mongo06.tyun.cn

10.20.20.61

shard2 secondary(27010)

mongo07.tyun.cn

10.20.20.62

shard3 primary(27010)

mongo08.tyun.cn

10.20.20.89

shard3 secondary(27010)

mongo09.tyun.cn

10.20.20.99

shard3 secondary(27010)

如果大家在演示该文档时,手头上的机器资源不充足的话,可以安排一台多个角色即可(使用不同的端口号),不一定非得一台机器一个角色。

  • 环境拓扑如下:

dc66fae13f86607aa21436ec7f422f6f.png

这里我们使用了静态 DNS 解析,如果有条件,可以用 DNS 服务进行域名的配置解析。/etc/hosts 文件如下:

10.20.20.19 mongo01.tyun.cn cfg1.tyun.cn mongos1.tyun.cn
10.20.20.11 mongo02.tyun.cn cfg2.tyun.cn mongos2.tyun.cn
10.20.20.41 mongo03.tyun.cn cfg3.tyun.cn mongos3.tyun.cn
10.20.20.14 mongo04.tyun.cn
10.20.20.53 mongo05.tyun.cn
10.20.20.61 mongo06.tyun.cn
10.20.20.62 mongo07.tyun.cn
10.20.20.89 mongo08.tyun.cn
10.20.20.99 mongo09.tyun.cn

配置 Config Server

01

准备配置文件

在 3 台配置节点上分别创建配置文件 /etc/mongo-cfg.conf,内容如下:

# cfg1.tyun.cn 的配置文件
(venv36) [root@mongo01 ~]# cat /etc/mongo-cfg.conf 
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongo-cfg.log
storage:
  dbPath: /var/lib/mongocfg
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongo-cfg.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27000
  bindIp: cfg1.tyun.cn
sharding:
  clusterRole: configsvr
replication:
  replSetName: config


# cfg2.tyun.cn 的配置文件
(venv36) [root@mongo02 ~]# cat /etc/mongo-cfg.conf 
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongo-cfg.log
storage:
  dbPath: /var/lib/mongocfg
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongo-cfg.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27000
  bindIp: cfg2.tyun.cn
sharding:
  clusterRole: configsvr
replication:
  replSetName: config


# cfg3.tyun.cn 的配置文件
(venv36) [root@mongo03 ~]# cat /etc/mongo-cfg.conf 
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongo-cfg.log
storage:
  dbPath: /var/lib/mongocfg
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongo-cfg.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27000
  bindIp: cfg3.tyun.cn
sharding:
  clusterRole: configsvr
replication:
  replSetName: config

02

启动 Config Server

在 3 台配置节点上分别执行如下命令:

[root@mongo01 ~]# systemctl start mongocfg


[root@mongo02 ~]# systemctl start mongocfg


[root@mongo03 ~]# systemctl start mongocfg

检查一下进程是否已经启动成功:

(venv36) [root@mongo01 ~]# ansible -i hosts 'cfg' -m shell -a "systemctl status mongocfg" |grep "Active: active (running)"
   Active: active (running) since Fri 2022-08-05 05:24:56 UTC; 1min 4s ago
   Active: active (running) since Fri 2022-08-05 05:25:25 UTC; 35s ago
   Active: active (running) since Fri 2022-08-05 05:25:36 UTC; 24s ago

03

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值