此文已由作者温正湖授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

MongoDB sharding cluster(分片集群)是MongoDB提供的数据在线水平扩展方案,包括Router(mongos)、Shard和Config Server三种组件,分别提供查询服务、分片服务和配置服务三种功能,其中Config Server 存储分片集群的元数据,元数据保存在config和admin两个数据库中,mongos 是业务/Driver访问分片集群的入口,节点本身不保存数据和元数据,仅在mongos进程启动时动态加载Config Server上的路由表等信息并周期性更新,将业务请求路由到后端对应的 shard 上。每个Shard保存分片集群部分数据,所有Shard上的数据组合成完整的用户数据集。集群通过将数据分散存储到多个Shard上来实现高可扩展性,通过配置多个mongos来实现集群访问高可用和负载均衡。如下图所示:

如果您的业务具有大数据量、高并发度等特点,单个MongoDB复制集实例无法满足需求,那么分片集群是您的正确选择。

超快的部署体验

目前网易云MongoDB已对外提供分片集群服务,您只需在网易云控制台上点点鼠标,即可快速完成一个分片集群实例的搭建:

初始化创建页面的实例名称,并确定所需的mongos、Shard规格和个数等集群参数,点击创建即可飞速完成集群创建。

上图显示完成一个包括2个mongos、2个Shard和1个Config Server的分片集群实例创建的日志,在网易云上,分片集群的Shard和Config Server均为标准的3节点复制集,所以上图所创建的分片集群共有11个节点,从日志界面可以发现仅花费不到90秒的时间,这是网易云MongoDB为您带来的极致部署体验。除了提供快速部署的能力,分片集群云服务还提供了集群的性能监控、实例水平/垂直升级、数据库参数修改、手动/自动备份和备份恢复等丰富的管理功能。

数据一致性备份

大数据时代,数据就是资产,对数据进行备份是平常必不可少的操作。MongoDB分片集群云服务基于LVM Snapshot进行集群数据的物理备份,相比使用mongodump进行数据逻辑备份,具有备份/恢复效率高、对业务热点数据污染小、数据一致性好和操作方便等优点。在网易云上,您只需要在实例控制台点击“手动创建备份”,即可轻松开始整个集群的备份操作。

云服务后台会对Config Server和各Shard并行进行备份,备份所需的时间约等于集群中数据量最多的Shard复制集备份所需的时间。也就是说,虽然分片集群相比复制集实例具有更大数量级的数据量,但备份所需的时间并不需要倍数增长。每个组件均在复制集中数据延迟最小的Secondary上进行备份。相比复制集,分片集群备份更加复杂,这是因为每个Shard的备份都不是独立,而仅仅是分片集群中数据的一部分,分片集群备份需要反映整个集群在某个时刻的数据一致性状态,而不是Config Server或某个Shard的一致性状态。网易云MongoDB分片集群云服务通过创新性设计实现了不依赖oplog的数据一致性备份。

除了支持手动创建备份,网易MongoDB云服务默认开启对分片集群实例进行周期性自动备份,您可以选择关闭自动备份,或者设置备份参数。如下所示:

与复制集实例一样,分片集群实例也支持选择在每周的某几天对实例进行备份操作。支持设置备份的起始时间和持续时间,如果由于业务压力过大等原因导致某次备份失败,那么在持续时间内,会不断进行备份重试。自动备份会过期删除,通过设置最大保留数可以决定备份所需保留时间。

在线升级/扩容

您可以对分片集群实例进行在线升级和扩容操作。比如可以增加mongos或Shard的个数以提高集群所能容纳的数据量或支撑更高的业务并发访问压力。增加mongos和Shard的操作对用户是透明的,只需进入集群设置界面,选择修改后的mongos、Shard个数即可。如下图所示:

若您增加mongos个数,则需更新业务端连接分片集群的URI,将新增的mongos加入到URI中,否则该mongos无法发挥作用。若您增加了Shard,则在成功将Shard加入集群后,Config Server上的balancer线程会将集群中部分chunk迁移到新Shard上,在此过程中会消耗集群部分IO和网络带宽。从安全性考虑,目前网易云MongoDB分片集群暂不对外开放删除Shard的功能,若您有该需求,可联系网易云客服,由专业的技术人员协助您共同完成删除Shard操作。

除了修改mongos和Shard的个数,支持升级集群中每个mongos、Shard的规格,扩展每个Shard的容量,同样的,您也仅需在设置界面选择升级或扩容后的参数即可。如下所示:

分片集群实例的每个组件都配置了浮动IP,在修改mongos时,系统会分配一台指定规格的新云主机,完成mongos配置初始化加入分片集群后,将该mongos的浮动IP切换到新mongos上,删除旧的云主机节点。也就是说虽然mongos是单节点非高可用的,但修改操作是在线的,期间仅需秒级断连完成浮动IP切换。同样的,对于修改Shard,根据修改项的不同云服务内部会进行优化处理以期达到最小化业务影响的目的。如果是修改Shard规格,则只需要为Shard复制集的每个节点更换云主机即可,仍采用节点原有的数据盘,无需进行数据重同步,大大缩短了修改所需时间。

如果是对Shard数据盘进行扩容,则采用先完成Shard复制集2个Secondary节点,再进行主从切换将Primary降为Secondary完成最后一个节点修改,修改示例图如下所示:

由于新节点进行数据初始同步需要较长时间,所以在这期间,老节点仍保留在复制集中,这样复制集一直处于3节点稳定状态,服务的高可用不受任何影响。新节点初始化完成,状态变为Secondary后,将老节点remove掉并将新节点的属性设置为普通节点属性。

Shard数据库参数调优

相比目前大多数MongoDB云服务,网易云MongoDB还提供了复制集参数查看和修改功能。您可以在服务控制台上直观得查看mongod进程参数,如下:

图中包括了各参数名称,参数建议值以及目前该参数运行值。您可以根据需要调整部分参数,如WiredTiger内部缓存大小CacheSizeGB、复制集oplog集合大小oplogSizeMB以及慢日志记录阈值slowOpThreadsHoldMs等,以适配不同的业务负载。系统根据节点的规格和容量等信息确定了参数建议值及其可取值的范围,一般情况下,这些参数采用系统的建议值即可,用户无需做出修改。修改界面如下:

分片集群故障和修复

如前所述,分片集群包括了3种组件,至少11台云主机,是一个复杂的分布式系统。如何让集群处于正常工作状态是个需要考虑的关键问题。在网易云MongoDB服务中,采用分层处理的方式,高效解决了该问题,Config Server和各Shard配置为3节点复制集模式,故障处理和自动修复复用复制集实例的处理流程。Config Server配置了浮动IP,发生宕机或主从切换后,浮动IP会飘到复制集新Primary上,确保mongos连接到Config Server的IP不变。mongos的故障修复前后对外IP保持不变,确保业务访问分片集群的URI不受影响。如下所示:

分片集群性能监控

对分片集群及其各组件进行性能监控,是集群日常运维很重要的方面。分片集群实例支持对mongos、Shard组件以及集群进行监控。Shard的监控项可定制,非常灵活和智能。可在集群控制台选择查看某个组件的监控

在mongos监控界面,可以查看集群整体状态信息,如数据库总数、启用分片数据库数、集群chunk数和各Shard的chunk数等等。

若要查看Shard组件Secondary的监控数据,可进入集群信息页面,选择想看的Shard的“性能监控”即可:

与复制集实例一样,分片集群实例也提供了系统资源、数据库资源、性能、复制集、日志等监控集,您可以为Shard定制监控项,并保存为监控视图:

连接和使用分片集群

最后一点,也是非常重要的一点,就是业务如何连接到集群中进行CRUD等各种操作,用户如何对集群进行管理?分片集群通过mongos来访问集群,用于驱动连接的URI格式可参考集群的详情界面,如下:

通过上图所示URI连接分片集群时,驱动会自动将请求分散到多个 mongos 上,实现负载均衡;当URI中有mongos出现故障时,客户端能自动进行故障切换,将请求都分散到状态正常的 mongos 上。需要注意的是:与复制集仅需提供部分复制集节点的地址(Host:Port)作为连接种子不同,驱动使用mongos地址连接到分片集群时,不会获取URI中未加入的其他mongos节点。所以,使用mongos连接分片集群相比复制集更为灵活:1、若分片集群承载了多种业务,可以将集群的mongos节点进行分组,每组至少2个节点,确保每个业务访问集群相对独立的同时实现高可用;2、在使用URI连接分片集群时,还可以在URI中设置读写行为参数,包括readPreference和writeConcern等,mongos会将这些参数透传到各Shard上。

分片集群实例默认为用户提供root账号,默认账号权限满足绝大部分用户的需求,若有其他特殊的权限需求,请提工单联系客服添加。您可以通过分片集群实例控制台创建root账号或修改账号密码:

除了可以设置分片集群的账号外,您还可以为集群下的每个Shard单独设置账号用于访问某个Shard。设置方式是选择集群实例控制台的集群信息栏,点击Shard名称进入Shard控制台,并信息相应设置。

与分片集群账号不同,对Shard所设置的账号仅具有只读权限。无法执行数据插入、删除和更新等操作。

网易云MongoDB 服务为开发者提供了一站式的 MongoDB 云端解决方案,包括提供三节点复制集的高可用架构,故障切换,并提供专业的备份、监控以及性能优化方案,彻底免除开发者的运维烦恼,点击可免费试用

网易云免费体验馆,0成本体验20+款云产品!

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 如何有效的杜绝“羊毛党“的薅羊毛行为?
【推荐】 考拉Android统一弹框

网易云MongoDB分片集群(Sharding)服务已上线的更多相关文章

  1. TiDB和MongoDB分片集群架构比较

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近阅读了TiDB源码的说明文档,跟MongoDB的分片集群做了下简单对比. 首先展示TiDB的整体架构 M ...

  2. MongoDB 分片集群实战

    背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...

  3. CentOS7+Docker+MangoDB下部署简单的MongoDB分片集群

    简单的在Docker上快速部署MongoDB分片集群 前言 文中使用的环境如下 OS:CentOS Linux release 7.5.1804 (Core) Docker:Docker versio ...

  4. 分布式文档存储数据库之MongoDB分片集群

    前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...

  5. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

  6. Windows 搭建MongoDB分片集群(一)

    一.角色说明 要构建一个MongoDB分片集群,需要三个角色: shard server  即存储实际数据得分片,每个shard 可以是一个Mongod实例,也可以是一组mongod实例构成得Repl ...

  7. mongodb分片集群

    第一章 1.mongodb 分片集群解释和目的 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 第二章 1. ...

  8. 搭建MongoDB分片集群

    在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...

  9. Windows 搭建MongoDB分片集群(二)

    在本篇博客中我们主要讲描述分片集群的搭建过程.配置分片集群主要有两个步骤,第一启动所有需要的mongod和mongos进程.第二步就是启动一个mongos与集群通信.下面我们一步步来描述集群的搭建过程 ...

随机推荐

  1. 【转载】javascript中的函数对象

    原文地址:http://www.cnblogs.com/phpzxh/archive/2009/09/16/1568137.html[侵删] 在javascript中函数的申明方式有四种 下面代码中一 ...

  2. ***ps -ef |grep 输出的具体含义是什么?

    Q: 比如:[root@localhost ~]# ps -ef | grep ApacheJetspeedroot 18887 18828 0 08:09 pts/0 00:00:00 grep A ...

  3. Junit中Assert.assertEquals()和Assert.assertSame方法有什么异同

    1)提供的接口数量不完全相同.assertEquals支持boolean,long,int等等java primitiveType变量.assertSame只支持Object. 2)比较的逻辑不同,结 ...

  4. 【scrapy】创建第一个项目

    1)创建项目命令: scrapy startproject tutorial 该命令将在当前目录下创建tutorial文件夹 2)定义Item Items are containers that wi ...

  5. 报错** is not accessible due to restriction on required library

    报错: Description Resource Path Location TypeAccess restriction: The type Map<String,Object> is ...

  6. [Unit Testing] Mock an HTTP request using Nock while unit testing

    When testing functions that make HTTP requests, it's not preferable for those requests to actually r ...

  7. Xpath—解决这个问题的良药

    何为良药? 因为在XML中存在一些问题和缺陷,针对这些问题就产生了响应的解决方式.如: getElementById方法在解析XML时因为一些原因适不适合的: 首先XML中每一个元素节点不一定有id属 ...

  8. DosBox 报错 this program requires dosxnt.exe to be in your path

    也就是少了dosxnt.exe文件,能够上网搜索下载,把dosxnt 拷贝到你挂截文件夹下就能够执行 Dosxnt文件下载

  9. 使用vscode 编译 sass

    由于我在工作中用的编辑器是 vscode ,所以记录一下vscode 编译sass 的配置 vs code 编译saass 1.在扩展里搜索“easy sass”,直接进行安装即可 2.安装后默认已经 ...

  10. oracle 10g 实例用localhost无法访问的处理

    我在笔记本上安装了一个Oracle10g,安装好了之后,查看E:\oracle\product\10.2.0\db_1\network\ADMIN\tnsnames.ora文件,发现SID对应的IP地 ...