阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB集群架构之分片+副本集架构

459次阅读
没有评论

共计 4435 个字符,预计需要花费 12 分钟才能阅读完成。

在热门的 NoSQL 数据库 MongoDB 中,还支持一种分片 + 副本集架构的集群。本文将介绍分片 + 副本集架构的集群的相关概念以及环境搭建工作,同时介绍了标签分片在这种架构中的应用。

1. 分片 + 副本集架构相关概念

在 Mongodb 分片架构中提到了单纯的分片架构中存在单点故障问题,这里将给出一种解决办法。

解决这个问题的办法就是使用 Mongodb 的分片 + 副本集架构来实现这种架构方式。目前的架构的三种类型的服务器节点中,配置节点和路由节点都各自有三个,因此没有单点故障问题。只有分片节点具有单点故障问题,因此可以为每个分片节点部署一个独立的副本集架构,这样每一个分片节点就不存在单点故障问题。在目前的单纯的分片架构中,新增 6 个分片节点,总共 9 个分片节点组成三个独立的副本集集群。新的分片 + 副本集架构中,总共有 12 个节点组成。

相对于 MySQL 数据库而言,Mongodb 的这种内置的分片功能和副本集功能,使得部署较大规模的 Mongodb 集群变得比较容易。

2. 分片 + 副本集环境搭建

分片 + 副本集架构除了每个分片节点扩充为一个独立的副本集之外,其它节点情况跟单纯的分片架构相同。为了节省篇幅,此处仅仅列出不同的地方,其它节点按照分片架构搭建即可。

集群目标:总共由 15 个节点组成的分片 + 副本集集群。

配置节点。共 3 个节点。

 27117,27118,27119 三个节点组成一个副本集 config。

分片节点。共 9 个节点。

27017,27317,27417 三个节点组成一个副本集 shard27017。

  27018,27318,27418 三个节点组成一个副本集 shard27018。

  27019,27319,27419 三个节点组成一个副本集 shard27019。

路由节点。共 3 个节点。

  27217,27218,27219 三个节点为 3 个独立的路由节点。

初始化目录结构。

[root@coe2coe data]# tree -d -L 4 .

.

├── config

│   ├── 27117

│   │   ├── data

│   │   └── log

│   ├── 27118

│   │   ├── data

│   │   └── log

│   └── 27119

│       ├── data

│       └── log

├── route

│   ├── 27217

│   │   ├── data

│   │   └── log

│   ├── 27218

│   │   ├── data

│   │   └── log

│   └── 27219

│       ├── data

│       └── log

└── shard

    ├── shard27017

    │   ├── 27017

    │   │   ├── data

    │   │   └── log

    │   ├── 27317

    │   │   ├── data

    │   │   └── log

    │   └── 27417

    │       ├── data

    │       └── log

    ├── shard27018

    │   ├── 27018

    │   │   ├── data

    │   │   └── log

    │   ├── 27318

    │   │   ├── data

    │   │   └── log

    │   └── 27418

    │       ├── data

    │       └── log

    └── shard27019

        ├── 27019

        │   ├── data

        │   └── log

        ├── 27319

        │   ├── data

        │   └── log

        └── 27419

            ├── data

            └── log

配置节点启动脚本。

跟单纯分片架构相同,不再赘述。

(3)分片节点启动脚本。

主要是在分片架构的相关脚本的基础上,为每个分片节点配置了一个副本集。

分片节点 27017 的副本集:名称 shard27017

27017:主节点  27317:从节点 27417:从节点

分片节点 27018 的副本集:名称 shard27018

27018:主节点  27318:从节点 27418:从节点

分片节点 27019 的副本集:名称 shard27019

27019:主节点  27319:从节点 27419:从节点

分片节点的启动脚本如下:

MongoDB 集群架构之分片 + 副本集架构

图 1

分片节点启动之后需要分别初始化 3 个副本集,初始化方法不再赘述。

路由节点启动脚本。

脚本跟单纯的分片架构相同,不再赘述。

路由节点启动后,需要添加分片节点到路由中,添加的方法跟单纯副本集方式有所不同。

MongoDB 集群架构之分片 + 副本集架构

图 2

至此分片 + 副本集架构的 Mongodb 集群环境搭建完毕。

3. 分片 + 副本集的总控脚本

为了测试方便,编写了总控脚本。总控脚本需要启动三种类型共 15 个节点。

[root@coe2coe data]# cat cluster.sh

#!/bin/bash

##################################################################

#   FileName:startcluster.sh

#   Author      : coe2coe@qq.com

#   Created:2018-10-02

#   Description:http://www.cnblogs.com/coe2coe/

#################################################################

start()

{

IP=$(ip addr |grep inet |grep brd |awk -F’ ‘ ‘{ print $2}’|awk -F’/’ ‘{print $1}’)

if [“$IP” == “”]

then

  echo -e “Failed to get IP on this host.”

  exit 1

fi

CONFIG_PORTS=”27117 27118 27119″

SHARD1_PORTS=”27017 27317 27417″

SHARD2_PORTS=”27018 27318 27418″

SHARD3_PORTS=”27019 27319 27419″

ROUTE_PORTS=”27217 27218 27219″

CONFIG_ADDRESSES=”$IP:27117,$IP:27118,$IP:27119″

echo -e “Starting  mongodb  cluster at {$IP}…..”

echo -e “Starting config nodes @{$CONFIG_PORTS} …” 

/data/mongo/data/config/startconfig.sh  $CONFIG_PORTS 

echo -e “Starting shard nodes shard1:@{${SHARD1_PORTS}}….”

/data/mongo/data/shard/startshard.sh    ${SHARD1_PORTS}

echo -e “Starting shard nodes shard2:@{${SHARD2_PORTS}}….”

/data/mongo/data/shard/startshard.sh    ${SHARD2_PORTS}

echo -e “Starting shard nodes shard3:@{${SHARD3_PORTS}}….”

/data/mongo/data/shard/startshard.sh    ${SHARD3_PORTS}

echo -e “Starting route nodes @{$ROUTE_PORTS} with CONFIG:{$CONFIG_ADDRESSES}….”

/data/mongo/data/route/startroute.sh    $CONFIG_ADDRESSES $ROUTE_PORTS

echo -e “===ALL DONE=====”

}

stop()

{

PIDS=$(pidof mongod mongos 2>/dev/null)

if [“$PIDS” == “”]

then

   echo -e “NO such process found!”

   exit 1

fi

echo -e “Stopping mongod and mongos:{$PIDS} ….”

kill -9 ${PIDS}

exit 0

}

status()

{

  C_PIDS=$(ps -elf |grep mongod |grep configsvr |grep -v grep |awk ‘{print $4}’ |xargs )

  D_PIDS=$(ps -elf |grep mongod |grep shardsvr |grep -v grep |awk ‘{print $4}’ |xargs )

  R_PIDS=$(ps -elf |grep mongos |grep -v grep |awk ‘{print $4}’ |xargs )

  if [“$C_PIDS” == “”]

  then

 C_STATUS=”NOT running”

  else

 C_STATUS=”Running”

  fi

  if [“$D_PIDS” == “”]

  then

 D_STATUS=”NOT running”

  else

 D_STATUS=”Running”

  fi

  if [“$R_PIDS” == “”]

  then

 R_STATUS=”NOT running”

  else

 R_STATUS=”Running”

  fi

  echo -e “config nodes:{$C_PIDS}:{${C_STATUS}}”

  echo -e “shard nodes :{$D_PIDS}:{${D_STATUS}}”

  echo -e “route nodes :{$R_PIDS}:{${R_STATUS}}”

  exit 0 

}

usage()

{

 echo -e “Usage: $0 [start|stop|status]”

 exit 1

}

case  “$1” in

start)

start

;;

stop)

stop

;;

status)

status

;;

*)

usage

;;

esac

4. 分片 + 副本集架构的标签分片

本文仅对标签分片方式进行测试,测试方法跟单纯的副本集架构方式相同。

在路由节点中添加分片。

前面集群创建过程中已经添加了 3 个分片 shard27017,shard27018,shard27019。

在路由节点中为数据库分片使能。

MongoDB 集群架构之分片 + 副本集架构

图 3

在路由节点中为每个分片指定标签。

MongoDB 集群架构之分片 + 副本集架构

图 4

在路由节点中为集合分配标签。

先需要为集合指定分片键。

MongoDB 集群架构之分片 + 副本集架构

图 5

然后为集合分配标签的键范围。

MongoDB 集群架构之分片 + 副本集架构

图 6

至此,数据库 test 中的集合 t1 已经指定了完整的范围标签。下面进行实际测试。

向集合 t1 中插入一些数据。

MongoDB 集群架构之分片 + 副本集架构

图 7

分别连接到几个分片节点中,查看分片中的数据是否符合标签范围条件。

27317 节点:

MongoDB 集群架构之分片 + 副本集架构

图 8

27418 节点:

MongoDB 集群架构之分片 + 副本集架构

图 9

27319 节点:

MongoDB 集群架构之分片 + 副本集架构

图 10

上述几个副本集中的节点的数据都符合分片规则,至此数据分片成功完成。

5. 分片 + 副本集的优点

Mongodb 分片 + 副本集架构的优点如下:

不存在单点故障问题。

配置节点、分片节点、路由节点均有多个节点组成,或者由副本集组成,因此不存在单点故障问题。

6. 分片 + 副本集的缺点

Mongodb 分片 + 副本集架构的缺点如下:

(1)实际应用环境中,配置一个标准的分片 +��本集架构的集群,至少需要 15 个节点,即 15 台服务器。因此配置工作相对比较繁琐,部署成本较高。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4435字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
8000216
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...