在热门的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:从节点
分片节点的启动脚本如下:
图1
分片节点启动之后需要分别初始化3个副本集,初始化方法不再赘述。
路由节点启动脚本。
脚本跟单纯的分片架构相同,不再赘述。
路由节点启动后,需要添加分片节点到路由中,添加的方法跟单纯副本集方式有所不同。
图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