网易云MongoDB分片集群(Sharding)服务已上线

时间:2022-04-20 05:27:01

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

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

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

网易云MongoDB分片集群(Sharding)服务已上线

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

超快的部署体验

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

网易云MongoDB分片集群(Sharding)服务已上线

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

网易云MongoDB分片集群(Sharding)服务已上线

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

数据一致性备份

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

网易云MongoDB分片集群(Sharding)服务已上线

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

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

网易云MongoDB分片集群(Sharding)服务已上线

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

在线升级/扩容

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

网易云MongoDB分片集群(Sharding)服务已上线

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

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

网易云MongoDB分片集群(Sharding)服务已上线

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

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

网易云MongoDB分片集群(Sharding)服务已上线

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

Shard数据库参数调优

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

网易云MongoDB分片集群(Sharding)服务已上线

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

网易云MongoDB分片集群(Sharding)服务已上线

分片集群故障和修复

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

网易云MongoDB分片集群(Sharding)服务已上线

分片集群性能监控

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

网易云MongoDB分片集群(Sharding)服务已上线

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

网易云MongoDB分片集群(Sharding)服务已上线

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

网易云MongoDB分片集群(Sharding)服务已上线

网易云MongoDB分片集群(Sharding)服务已上线

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

网易云MongoDB分片集群(Sharding)服务已上线

连接和使用分片集群

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

网易云MongoDB分片集群(Sharding)服务已上线

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

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

网易云MongoDB分片集群(Sharding)服务已上线

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

网易云MongoDB分片集群(Sharding)服务已上线

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

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

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

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

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