网易云 MongoDB 分片集群服务已上线
Posted 网易云基础服务
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网易云 MongoDB 分片集群服务已上线相关的知识,希望对你有一定的参考价值。
如果企业业务具有大数据量、高并发度等特点,单个 MongoDB 复制集实例会无法满足需求,那么分片集群会是一个很好的选择。
MongoDB sharding cluster(分片集群)是 MongoDB 提供的数据在线水平扩展方案,包括 Router(mongos)、Shard 和 Config Server 三种组件,分别提供查询服务、分片服务和配置服务三种功能。
其中,Config Server 存储分片集群的元数据,元数据保存在 config 和 admin 两个数据库中;mongos 是业务 /Driver 访问分片集群的入口,节点本身不保存数据和元数据,仅在 mongos 进程启动时动态加载 Config Server 上的路由表等信息并周期性更新,将业务请求路由到后端对应的 Shard 上。每个 Shard 保存分片集群部分数据,所有 Shard 上的数据组合成完整的用户数据集。集群通过将数据分散存储到多个 Shard 上来实现高可扩展性,通过配置多个 mongos 来实现集群访问高可用和负载均衡。
1
超快的部署体验
目前网易云 MongoDB 已对外提供分片集群服务,在控制台用户可快速完成一个分片集群实例的搭建:
初始化创建页面的实例名称,并确定所需的 mongos、Shard 规格和个数等集群参数,点击创建便可快速完成(集群创建)。
上图显示的是完成一个包括 2 个 mongos、2 个 Shard 和 1 个 Config Server 的分片集群实例创建所产生的日志。在网易云,分片集群的 Shard 和 Config Server 均为标准的 3 节点复制集,所以上图所创建的分片集群共有 11 个节点,从日志界面可以发现整个流程仅花费不到 90 秒的时间。
除了提供快速部署的能力,分片集群云服务还提供了集群的性能监控、实例水平/垂直升级、数据库参数修改、手动/自动备份和备份恢复等丰富的管理功能及服务。
2
数据一致性备份
大数据时代,数据就是资产,对数据进行备份是企业必不可少的操作。
MongoDB 分片集群云服务基于 LVM Snapshot 进行集群数据的物理备份,相比于使用 mongodump 进行数据逻辑备份,具有备份/恢复效率高、对业务热点数据污染小、数据一致性好和操作方便等优点。在网易云上,用户只需在实例控制台点击 “手动创建备份”,即可轻松开展整个集群的备份操作。
云服务后台会对 Config Server 和各 Shard 并行进行备份,备份所需时间约等于集群中数据量最多的 Shard 复制集备份所需的时间。也就是说,虽然分片集群相比复制集实例具有更大数量级的数据量,但备份所需的时间并不需要倍数增长。
每个组件均在复制集中数据延迟最小的 Secondary 上进行备份。相比复制集,分片集群备份更加复杂,这是因为每个 Shard 的备份都不是独立的,而仅仅是分片集群中数据的一部分,分片集群备份需要反映整个集群在某个时刻的数据一致性状态,而不是 Config Server 或某个 Shard 的一致性状态。
网易云 MongoDB 分片集群云服务通过创新性设计实现了不依赖 oplog 的数据一致性备份。
除了支持手动创建备份,网易云 MongoDB 服务默认开启对分片集群实例进行周期性自动备份,用户可以选择关闭自动备份,或者设置备份参数。如下所示:
与复制集实例一样,分片集群实例也支持选择在每周的某几天对实例进行备份的操作。支持设置备份的起始时间和持续时间,如果由于业务压力过大等原因导致某次备份失败,那么在持续时间内,会不断进行备份重试。自动备份会过期删除,通过设置最大保留数可以决定备份所需保留时间。
3
在线升级/扩容
用户可以对分片集群实例进行在线升级和扩容操作。比如,可以增加 mongos 或 Shard 的个数以提高集群所能容纳的数据量或支撑更高的业务并发访问压力。
增加 mongos 和 Shard 的操作对用户是透明的,只需进入集群设置界面,选择修改后的 mongos、Shard 个数即可。
若用户增加 mongos 个数,则需更新业务端连接分片集群的 URI,将新增的 mongos 加入到 URI 中,否则该 mongos 无法发挥作用。若用户增加了 Shard,则在成功将 Shard 加入集群后,Config Server 上的 balancer 线程会将集群中部分 chunk 迁移到新 Shard 上,在此过程中会消耗集群部分 IO 和网络带宽。
同样,用户也可在设置界面选择升级或扩容后的参数。
分片集群实例的每个组件都配置了浮动 IP,在修改 mongos 时,系统会分配一台指定规格的新云主机。完成 mongos 配置初始化加入分片集群后,将该 mongos 的浮动 IP 切换到新 mongos 上,删除旧的云主机节点。也就是说虽然 mongos 是单节点非高可用的,但修改操作是在线的,期间仅需秒级断连完成浮动 IP 切换。
同样的,对于修改 Shard,根据修改项的不同云服务内部会进行优化处理以期达到最小化业务影响的目的。如果是修改 Shard 规格,则只需要为 Shard 复制集的每个节点更换云主机即可,仍采用节点原有的数据盘,无需进行数据重同步,大大缩短了修改所需时间。
如果是对 Shard 数据盘进行扩容,则采用先完成 Shard 复制集 2 个 Secondary 节点,再进行主从切换将 Primary 降为 Secondary 完成最后一个节点修改,修改示例图如下所示:
由于新节点进行数据初始同步需要较长时间,所以在这期间,老节点仍保留在复制集中,这样复制集一直处于 3 节点稳定状态,服务的高可用不受任何影响。新节点初始化完成,状态变为 Secondary 后,将老节点 remove 掉并将新节点的属性设置为普通节点属性。
4
Shard 数据库参数调优
相比目前大多数 MongoDB 云服务,网易云 MongoDB 还提供了复制集参数查看和修改功能。用户可以在服务控制台上直观地查看 mongod 进程参数:
图中包括了各参数名称,参数建议值以及目前该参数运行值。用户可以根据需要调整部分参数,如 WiredTiger 内部缓存大小 CacheSizeGB、复制集 oplog 集合大小 oplogSizeMB 以及慢日志记录阈值 slowOpThreadsHoldMs 等,以适配不同的业务负载。系统根据节点的规格和容量等信息确定了参数建议值及其可取值的范围,一般情况下,这些参数采用系统的建议值即可,用户无需做出修改。修改界面如下:
5
分片集群故障和修复
如前所述,分片集群包括了 3 种组件,至少 11 台云主机,是一个复杂的分布式系统。如何让集群处于正常工作状态是一个需要考虑的关键问题。
在网易云 MongoDB 服务中,采用分层处理的方式,高效解决了该问题,Config Server 和各 Shard 配置为 3 节点复制集模式,故障处理和自动修复复用复制集实例的处理流程。Config Server 配置了浮动 IP,发生宕机或主从切换后,浮动 IP 会飘到复制集新 Primary 上,确保 mongos 连接到 Config Server 的 IP 不变。mongos 的故障修复前后对外 IP 保持不变,确保业务访问分片集群的 URI 不受影响。如下所示:
6
分片集群性能监控
对分片集群及其各组件进行性能监控,是集群日常运维很重要的方面。分片集群实例支持对 mongos、Shard 组件以及集群进行监控。Shard 的监控项可定制,非常灵活和智能。可在集群控制台选择查看某个组件的监控。
在 mongos 监控界面,可以查看集群整体状态信息,如数据库总数、启用分片数据库数、集群 chunk 数和各 Shard 的 chunk 数等等。
若要查看 Shard 组件 Secondary 的监控数据,可进入集群信息页面,选择想看的 Shard 的 “性能监控” 即可:
与复制集实例一样,分片集群实例也提供了系统资源、数据库资源、性能、复制集、日志等监控集,用户可以为 Shard 定制监控项,并保存为监控视图:
7
连接和使用分片集群
最后一点,也是非常重要的一点,就是业务如何连接到集群中进行 CRUD 等各种操作,用户如何对集群进行管理?分片集群通过 mongos 来访问集群,用于驱动连接的 URI 格式可参考集群的详情界面:
通过上图所示 URI 连接分片集群时,驱动会自动将请求分散到多个 mongos 上,实现负载均衡;当 URI 中有 mongos 出现故障时,客户端能自动进行故障切换,将请求都分散到状态正常的 mongos 上。
若分片集群承载了多种业务,可以将集群的 mongos 节点进行分组,每组至少 2 个节点,确保每个业务访问集群相对独立的同时实现高可用;
在使用 URI 连接分片集群时,还可以在 URI 中设置读写行为参数,包括 readPreference 和 writeConcern 等,mongos 会将这些参数透传到各 Shard 上。
分片集群实例默认为用户提供 root 账号,默认账号权限满足绝大部分用户的需求,若有其他特殊的权限需求,请提工单联系客服添加。用户可以通过分片集群实例控制台创建 root 账号或修改账号密码:
除了可以设置分片集群的账号外,用户还可以为集群下的每个 Shard 单独设置账号用于访问某个 Shard。设置方式是选择集群实例控制台的集群信息栏,点击 Shard 名称进入 Shard 控制台,对信息相应设置。
与分片集群账号不同,对 Shard 所设置的账号仅具有只读权限。无法执行数据插入、删除和更新等操作。
以上就是对分片集群服务的简单说明,具体使用指南请参考官网的用户手册。最后,欢迎大家使用网易云 MongoDB 分片集群服务,使用过程中有任何问题或疑问,可提工单联系客服人员进行处理。
-END-
精彩文章回顾
点击图片轻松阅读
MongoDB 安全事件的防范与反思
以上是关于网易云 MongoDB 分片集群服务已上线的主要内容,如果未能解决你的问题,请参考以下文章
2020年MongoDB 企业应用实战 基础 复制集 分片集群
2020年MongoDB 企业应用实战 基础 复制集 分片集群