云服务器内容精选

  • 使用场景 文档数据库服务按照设置的自动备份策略,对数据库进行自动备份。建议您定期对数据库进行备份,当数据库故障或数据损坏时,可以通过备份恢复数据库,从而保证数据可靠性。 创建文档数据库实例时,默认开启自动备份策略。待实例创建成功后,您可以根据业务需要修改自动备份策略或关闭自动备份策略。 开启自动备份策略后,会立即自动触发一次全量备份。之后会按照自动备份策略中设置的备份时间段和备份周期进行全量备份。实例在执行备份时,会将数据从实例上拷贝并压缩后上传到OBS备份空间,按照自动备份策略中的保留天数进行存放,备份时长和实例的数据量有关,平均备份速率为60MB/s。自动备份策略开启后,副本集实例每五分钟会自动进行一次增量备份,以保证数据的可靠性。集群实例如果使用增量备份功能,则需要手动开启。
  • 数据库连接 使用DDS时,可能会遇到因为Mongod/dds mongos的连接数满了,导致客户端无法连接的问题。在Mongod/dds mongos的服务端,收到一个新的连接由一个单独的线程来处理,每个线程配置了1MB的栈空间,当网络连接数太多时,过多的线程会导致上下文切换开销变大,同时内存开销也会上涨。 客户端连接数据库的时候,要计算业务一共有多少个客户端,每个客户端配置的连接池大小是多少,总的连接数不要超过当前实例能承受的最大连接数的80%。 客户端与数据库的连接应尽量保持相对稳定的状态,每秒新增连接数建议保持在10以下。 建议客户端的连接超时时间至少设置为最大业务执行时长的3倍。 对于副本集实例,客户端需要同时配置主备节点的IP地址;对于集群实例,至少配置两个dds mongos的IP地址。 DDS默认提供rwuser用户,使用rwuser用户登录时认证库必须是admin。
  • 性能相关 规范 业务程序禁止执行全表扫描的查询。 执行查询时,只选择需要返回的字段,不需要的字段不要返回。从而减少网络和进程处理的负载,修改数据时,只修改变化需要修改的字段,不要整个对象直接存储全部修改。 避免使用$not。DDS并不会对缺失的数据进行索引,因此$not的查询条件将会要求在一个结果集中扫描所有记录。如果$not是唯一的查询条件,会对集合执行全表扫描。 用$and时把匹配最少结果的条件放在最前面,用$or时把匹配最多结果的条件放在最前面。 单个实例中,数据库的总的个数不要超过200个,总的集合个数不要超过500个。集合数量过多会导致内存压力变高,并且集合数量多会导致重启以及主备倒换性能变差,影响紧急情况下的高可用性能。 业务上线前,一定要对数据库进行性能压测,评估业务峰值场景下,对数据库的负载情况。 禁止同时执行大量并发事务,且长时间不提交。 业务正式上线前, 所有的查询类别,都应该先执行查询计划检查查询性能。 建议 每个连接在后台都是由一个单独线程处理,每个线程会分配1MB的栈内存。所以连接数不宜过多,否则会占用过多的内存。 使用连接池,避免频繁的建立连接和断开连接,否则会导致CPU过高。 减少磁盘读写:避免使用不必要的upsert命令,避免查询不必要的数据。 优化数据分布:对数据进行分片,同时分散热点数据,均衡地使用实例资源。如何进行数据分片,请参见设置数据分片。 减少锁冲突:避免对同一个Key过于频繁地操作。 减少锁等待:避免前台创建索引。 注意 开发过程中对集合的每一个操作都要通过执行explain()检查其执行计划,如: db.T_DeviceData.find({"deviceId":"ae4b5769-896f"}).explain(); db.T_DeviceData.find({"deviceId":"77557c2-31b4"}).explain("executionStats"); 对于查询而言,因为覆盖查询不需要读取文档,而是直接从索引中返回结果,这样的查询性能好,所以尽可能使用索引覆盖查询。如果explain()的输出显示indexOnly字段为真,则说明这个查询就被一个索引覆盖。 执行计划解析: 看执行时间:executionStats.executionStages.executionTimeMillisEstimate和executionStats.executionStages.inputStage. executionTimeMillisEstimate时间越短越好。 executionStats.executionTimeMillis表示执行计划选择和执行的所有时间。 executionStats.executionStages.executionTimeMillisEstimate表示执行计划的执行完成时间。 executionStats.executionStages.inputStage. executionTimeMillisEstimate表示执行计划下的子阶段执行完成时间。 看扫描条数:三个条目数相同为最佳。 executionStats. nReturned表示匹配查询条件的文档数。 executionStats .totalKeysExamined表示索引扫描条目数。 executionStats .totalDocsExamined表示文档扫描条目数。 看Stage状态,性能较好的Stage状态组合如下。 Fetch+IDHACK Fetch+ixscan Limit+(Fetch+ixscan) PROJECTION+ixscan 表1 状态说明 状态名称 描述 COLLSCAN 全表扫描 SORT 内存中进行排序 IDHACK 根据_id进行查询 TEXT 全文索引 COUNTSCAN 未用索引计数 FETCH 索引扫描 LIMIT 使用Limit限制返回数 SUBPLA 未用索引的$or查询阶段 PROJECTION 限定返回字段时stage的返回 COUNT_SCAN 使用索引计数
  • 分片设计规范 对于使用DDS分片集群,建议尽可能的使用分片集合以充分利用性能,详情请参见设置数据分片以充分利用分片性能。 分片集合使用上建议如下: 对于大数据量(数据量过百万),并有较高读写请求的业务场景,数据量随着业务量增大而增大的,建议采用分片。 对于采用hash分片的集合,需要根据业务后面实际数据量大小,采用预分片,提前预置chunk数量,减少自动均衡和分裂对业务运行造成影响。 对于非空集合开启分片,应将均衡器的开启时间窗放在业务空闲时,避免分片间均衡数据与业务冲突影响性能。设置时间窗口的API接口详情请参见设置集群均衡活动时间窗。 需要基于分片键排序查询且增加数据时可以分布均匀建议使用范围分片,其他使用哈希分片。 合理设计shard key,防止出现大量的数据使用相同shard key,导致出现jumbo chunk。 使用分片集群,执行dropDatabase后,一定要执行flushRouterConfig命令,详情请参见如何规避dds mongos路由缓存缺陷。 业务的update请求需要注意与片键相适配。在使用分片表时,如果出现如下场景则update请求会报错,并返回“An upsert on a sharded collection must contain the shard key and have the simple collation”。 update请求的filter中未携带片键字段且选项multi:false set中未携带片键字段且选项upsert:true
  • 迁移方案概览 DDS提供了多种数据迁移方案,可满足不同业务场景下的MongoDB数据库迁移。 表1 迁移方案 迁移场景 支持的迁移类型 文档链接 使用导出导入工具迁移数据 全量迁移 通过mongoexport和mongoimport工具迁移数据 通过mongodump和mongorestore工具迁移数据 其他云数据库MongoDB迁移至华为云DDS 全量+增量迁移 其他云数据库 MongoDB迁移至华为云DDS 本地自建MongoDB数据库迁移至华为云DDS 全量+增量迁移 本地自建MongoDB数据库迁移至华为云DDS E CS 自建MongoDB数据库迁移至华为云DDS 全量+增量迁移 ECS自建MongoDB数据库迁移至华为云DDS 华为云DDS迁移至用户端MongoDB数据库 全量+增量迁移 华为云DDS迁移至用户端MongoDB数据库 父主题: 数据迁移
  • 备份与恢复方案 表1提供了常见的数据备份和下载备份文件的方法。 支持版本号没有说明的,默认支持全部版本:3.2、3.4、4.0、4.2和4.4版本。 表1 备份方案 任务类型 备份或恢复类型 支持的实例类型和版本 使用场景 数据备份 自动备份 集群 副本集 单节点 您可以通过控制台对DDS进行自动备份。 增量备份 集群(4.0、4.2版本支持) 副本集(4.0、4.2版本支持) 您可以通过控制台对DDS进行增量备份。 跨区域备份 集群 副本集 单节点 您可以通过控制台对DDS进行跨区域备份。 手动备份 集群 副本集 单节点 您可以通过控制台对DDS进行手动备份。 通过mongodump工具备份 集群 副本集 单节点 您可以通过MongoDB客户端自带的备份恢复工具对自建MongoDB或云上MongoDB数据库进行手动备份。 通过mongoexport工具备份 集群 副本集 单节点 您可以通过MongoDB客户端自带的备份恢复工具对自建MongoDB或云上MongoDB数据库进行手动备份。 下载备份文件 使用OBS Browser+下载 集群 副本集 单节点 备份文件大于400MB时,适合使用OBS Browser+下载。 使用浏览器直接下载 副本集 单节点 适合通过浏览器直接下载备份文件。 按地址下载 集群 副本集 单节点 适用于通过浏览器新窗口、迅雷或者wget等方式下载备份文件。 DDS详细的恢复方案请参见恢复方案。
  • 备份原理 集群实例 集群实例由dds mongos(路由)、Config(配置)和Shard(分片)组件构成。其中,Config主要用于存储集群实例的配置信息,Shard节点主要用于存储集群实例的数据信息。所以集群实例在备份时,需要分别备份Config节点和Shard节点上的数据,且Config节点和Shard节点是分开进行备份的。如图1所示,集群实例的备份是由Config节点和Shard节点分别在各自的Hidden节点上进行,备份过程会占用Hidden节点一定的CPU内存资源。因此,在备份期间,实例的Hidden节点的CPU使用率、内存使用率、主备延时指标会有一点升高,属于正常现象。但最终的备份文件将以压缩包的形式存储在 对象存储服务 (OBS)中,不会占用实例的磁盘空间。 图1 集群备份原理图 副本集实例 如图2所示,副本集实例的备份在Hidden节点上进行。备份过程会占用Hidden节点一定的CPU内存资源。因此,在备份期间,实例的Hidden节点的CPU使用率、内存使用率、主备延时指标会有一点升高,属于正常现象。但最终的备份文件将以压缩包的形式存储在对象存储服务(OBS)中,不会占用实例的磁盘空间。 图2 副本集备份原理图 单节点实例 单节点的备份是在仅有的一个节点上进行的,最终的备份文件将以压缩包的形式存储在对象存储服务(OBS)中,不会占用实例的磁盘空间。 单节点的备份基于mongodump实现,备份过程中会额外占用节点的CPU、内存等资源,资源不足时会出现备份失败的情况。建议迁移到副本集实例进行备份。 图3 单节点备份原理图
  • 使用须知 在进行正式维护前,DDS会给华为账号中设置的联系人发送短信和邮件,请注意查收。 在可维护时间段内,实例会发生1到2次连接闪断,请确保应用程序具备重连机制,闪断后,实例即可恢复到正常状态。 实例维护期间,除账号管理、数据库管理和添加安全组外,其他涉及变更类的操作(如升级、重启等)暂时无法使用。当实例处于该状态时,对数据库本身正常的数据访问以及查询类操作不会受到任何影响。 修改可维护时间段,不影响原有可维护时间段内定时任务的执行时间。 目前只有实例重启、规格变更和补丁升级支持可维护时间段。 您可以在任务中心取消待执行的定时任务。 可维护时间段不要和备份的时间冲突,否则可能会导致定时任务失败。 临近可维护时间段结束时下发的任务,有可能扫描不到,取消执行。
  • 事件监控简介 事件监控提供了事件类型数据上报、查询和告警的功能。方便您将业务中的各类重要事件或对云资源的操作事件收集到 云监控服务 ,并在事件发生时进行告警。 事件即 云监控 服务保存并监控的文档数据库DDS资源的关键操作,您可以通过“事件”了解到谁在什么时间对系统哪些资源做了什么操作,如删除只读节点、规格变更等。 事件监控为您提供上报自定义事件的接口,方便您将业务产生的异常事件或重要变更事件采集上报到云监控服务。 事件监控默认开通,您可以在事件监控中查看系统事件和自定义事件的监控详情,目前支持的系统事件请参见事件监控支持的事件说明。 父主题: 事件监控
  • 使用须知 目前集群和副本集支持迁移可用区操作。 跨可用区实例以及IPV6子网创建的实例不支持该操作。 对于副本集实例,如果当前存在只读节点或未激活的备节点,不支持该操作。 对于集群实例,如果当前存在只读节点,不支持该操作。 可用区迁移所需时间和数据量大小有关,整个过程可能耗时1小时,并且会伴随60秒以内的闪断,请在业务低峰期执行迁移可用区操作。建议使用高可用连接进行访问,并且确保应用程序具有重连机制。 迁移的目标可用区和当前实例的可用区处于同一区域。 关于区域和可用区的详情,请参见区域和可用区。 为保证实例稳定运行,请在业务低峰期执行迁移可用区操作。
  • 使用限制 库表恢复与CPU及内存规格相关,恢复单表内数据到指定时间点,最大支持单条数据大小见表1。 库表级恢复失败时,可通过扩容规格或分批次进行库表时间点恢复。 表1 规格信息 CPU类型 规格类型 vCPU(个) 内存(GB) 单集合恢复最大支持单条数据大小 x86 通用型 2 4 400KB 2 8 800KB 4 8 1MB 4 16 1.3MB 8 16 1.3MB 8 32 2MB 增强Ⅱ型 1 8 400KB 2 8 800KB 2 16 800KB 4 16 1.3MB 4 32 1.3MB 8 32 2MB 8 64 3MB 16 64 4MB 16 128 7MB 32 128 7MB 32 256 10MB 64 256 10MB 64 512 16MB 鲲鹏 - 2 4 400KB - 2 8 800KB - 4 8 1MB - 4 16 1.3MB - 8 16 1.3MB - 8 32 2MB - 16 32 2MB - 16 64 4MB
  • 部署架构对比 单可用区 实例选择单可用区部署时,实例下的所有组件均部署在相同的可用区内。单可用区部署会默认配置为反亲和部署。反亲和部署是出于高可用性考虑,将Primary、Secondary和Hidden节点分别创建在不同的物理机上。 多可用区 实例选择多可用区部署时,实例下的组件分别部署在三个不同的可用区内,可实现跨可用区容灾部署能力。 dds mongos节点最少为两个,分别部署在两个可用区中,当增加第三个dds mongos节点时,默认部署在第三个可用区。 每个Shard节点中的Primary节点、Secondary节点与Hidden节点随机均衡的部署在三个可用区中。 图1 多可用区部署
  • 恢复方案 DDS支持多种数据恢复方案,您可以根据业务需要选择合适的恢复方法。 支持版本号没有说明的,默认支持全部版本:3.2、3.4、4.0、4.2和4.4版本。 表1 恢复方案 恢复类型 支持的实例类型和版本 使用场景 恢复备份到新实例 集群 副本集 单节点 使用已有的自动备份文件或手动备份文件恢复实例数据到新建实例。 恢复备份到当前实例 集群 副本集 单节点 使用已有的自动备份文件或手动备份文件恢复实例数据到当前实例。 恢复实例备份到指定时间点 集群(4.0、4.2版本支持) 副本集(4.0、4.2版本支持) 适用于实例级数据恢复场景,将数据还原至某个指定的时间点。 恢复库表到指定时间点 副本集(4.0版本支持) 适用于库表级数据恢复场景,将数据还原至某个指定的时间点。 恢复备份数据到本地自建数据库 集群(3.4、4.0版本支持) 副本集(3.4、4.0版本支持) 单节点(3.4、4.0版本支持) 您可以将DDS的备份文件下载到本地,将数据恢复至本地自建数据库。 通过mongorestore工具恢复数据 集群 副本集 单节点 您可以通过MongoDB客户端自带的备份恢复工具恢复数据。 通过mongoimport工具恢复数据 集群 副本集 单节点 您可以通过MongoDB客户端自带的备份恢复工具恢复数据。 父主题: 数据恢复
  • 使用须知 回收站策略机制默认开启,且不可关闭,默认保留天数为7天,该功能免费。 如果用户同时删除100个实例,且回收站内存放有之前删除的实例,那么这100个实例可以被删除成功,但是只有部分实例能进入回收站。回收站只允许加入100个实例,超过该配额的实例将无法添加至回收站中。 修改回收站保留天数,仅对修改后新进入回收站的实例生效,对于修改前已经存在的实例,仍保持原来的回收策略,请您谨慎操作。 节点脱节状态下无法做回收备份。
  • 使用须知 账户需要有足够的余额,才可进行扩容。 对于集群实例,仅支持对shard节点进行磁盘扩容,dds mongos节点、config节点和只读节点不能进行磁盘扩容。 选择磁盘加密的实例,新扩容的磁盘空间依然会使用原加密密钥进行加密。 实例处于以下状态时不可扩容: 创建中 规格变更中 节点扩容中 删除节点 小版本升级 磁盘扩容期间,服务不中断。DDS服务只支持扩容磁盘存储空间大小,不支持变更存储类型。