华为云用户手册

  • 添加负载均衡配置 登录CAE控制台。 在左侧导航栏中选择“组件配置”。 在“组件配置”页面上方的下拉框中选择需要操作的组件。 单击“访问方式”模块中的“编辑”。 “从环境外部访问本组件”页面,选择“负载均衡配置”,并单击“添加负载均衡配置”。 在“新增负载均衡配置”页面,参考表1进行参数配置。 表1 负载均衡外网访问配置 参数 参数说明 负载均衡器 支持“独享型”和“内置负载均衡器”。 选择“内置负载均衡器”,只支持基于EIP公网访问。 选择“独享型”时,在下拉框中选择对应负载均衡器。 说明: 如需选择“独享型”负载均衡器,请先添加VPC访问CAE环境配置。 只支持选择环境所属VPC下的负载均衡实例。 可通过将负载均衡器配置弹性公网IP实现外网访问CAE组件。 如果没有可选的负载均衡器,可单击“创建负载均衡器”,跳转至ELB控制台进行创建,具体操作请参考创建独享型负载均衡器。 健康检查 此处健康检查是设置负载均衡的健康检查配置。 不启用:关闭负载均衡健康检查。 启用:启动负载均衡健康检查。默认为“启用”。启用健康检查后,需要单击按钮,配置健康检查参数。 协议 健康检查请求的协议类型。 支持TCP和HTTP协议。默认值为TCP。 说明: 不支持直接切换协议,如需切换,请更新为不启用后再选择其他协议。 检查路径 当健康检查的“协议”选择“HTTP”时,需要配置。 指定健康检查的URL地址。检查路径必须以/开头,长度范围为1-80个字符。 支持使用英文字母、数字和字符‘-’、‘/’、‘.’、‘%’、‘?’、‘&’、‘_’。 检查周期(秒) 发送健康检查请求的时间间隔。 取值范围[1-50]。默认值5秒。 超时时间(秒) 每次健康检查响应的最大超时时间。 取值范围[1-50]。默认值10秒。 最大重试次数 健康检查最大的重试次数。 取值范围[1-10]。默认值3次。 访问控制 主要用来控制访问组件的IP地址,您可以创建访问控制策略,允许/禁止某个IP地址对组件进行访问。支持IP和IP网段。 允许所有IP访问。 白名单。 只允许白名单中放通的IP访问组件。 黑名单。 禁止黑名单中的IP访问组件。 端口配置 协议:支持TCP、UDP协议。 监听端口:组件中程序的监听端口,一般从用户的程序代码中获取。 取值范围[1,65535]。 访问端口:组件提供给外部访问的端口,一般由用户自行设定,端口号唯一,避免冲突。 取值范围[1,65535]。 图1 配置负载均衡参数 图2 配置健康检查 单击“确定”,完成负载均衡配置添加。 (可选)如需添加多条负载均衡配置,请重复执行5~7。 单击“确定”,完成负载均衡配置。 使配置生效。 如已完成组件部署,单击页面上方“生效配置”。在右侧弹框中确认配置信息,并单击“确定”,使配置生效。 如未完成组件部署,单击页面上方“配置并部署组件”,在右侧弹框中单击“确定”待部署执行完成后,配置生效。 以Nginx组件为例,协议选择TCP,监听端口为80,访问端口为8089,则部署成功后。在左侧导航栏中选择“组件列表”,进入“组件列表”页面,单击Nginx组件“访问地址”列的公网访问地址,可查看Nginx静态WEB页面。 如果您配置了访问控制白名单或黑名单,则只有在白名单内或在黑名单外的ip能够访问组件。 图3 外网访问 也可以通过 域名 访问,例如:http://test-test-7.com:8089。前提是已在系统设置中添加域名,并成功绑定,具体操作可参考常见问题:自定义域名如何绑定CAE。 图4 域名配置 图5 通过域名访问 图6 不在白名单内的ip访问
  • 其他相关操作 组件创建或部署完成后,在“组件列表”页可查看环境ID、应用ID、组件ID、组件名称,代码源、状态、实例个数、创建时间等信息。 在组件列表界面,您可以对已创建或部署的组件进行其他相关操作,具体的操作有: 表1 相关操作 操作 说明 查看环境ID 当鼠标悬停在“环境”时,显示环境名称和环境ID。 查看应用ID 当鼠标悬停在“应用”时,显示应用名称和应用ID。 查看组件ID 当鼠标悬停在“组件”时,显示组件名称、组件版本和组件ID。 搜索组件 在组件列表上方的搜索框,可以通过组件名称来模糊搜索对应组件。 刷新组件列表 单击组件列表右上角的按钮,可刷新组件列表信息。 自定义列表项 单击组件列表右上角的按钮,可对组件的列项设置显示或隐藏。 过滤组件 在组件列表的表头,单击“代码源”或“状态”列的,可按特定类型过滤组件。 切换组件的排序 在组件列表的表头,单击“名称/版本/ID”、“最近一次变更状态/时间”或“创建时间”列的可切换组件的排序。为默认排序,为正序排序,为倒序排序。 组件配置 单击组件右侧的,跳转到组件配置界面,对组件进行相关配置,详情请参考组件配置。 查看组件监控 单击组件右侧的,跳转到组件监控界面查看组件指标,详情请参考查看组件监控。 查看组件日志 单击组件右侧的,跳转到组件日志界面查看详细日志,详情请参考查看组件日志。 查看组件事件 单击组件右侧的,跳转到组件事件界面查看组件的活动,详情请参考查看组件事件。 查看变更详情 单击组件“最近一次变更状态/时间”列的,可以查看组件的变更记录。 父主题: 管理组件
  • 关闭CAE公网功能 用户在CAE配置系统网络时,支持用户关闭环境默认的“CAE环境访问公网”功能和“公网访问CAE环境”功能,提高用户系统网络安全性。 登录CAE控制台。 在左侧导航栏中选择“系统设置”。 单击“系统网络配置”模块中的“编辑”,进入“系统网络配置”页面。 在“系统网络配置”页面关闭CAE公网功能。 关闭“CAE环境访问公网”功能:单击“CAE环境访问公网”右侧的开关,在弹框中单击“确定”。 关闭“公网访问CAE环境”功能:单击“公网访问CAE环境”右侧的开关,在弹框中单击“确定”。 页面提示“修改系统网络配置成功”,系统网络配置完成。 关闭的公网功能支持重新开启。单击“CAE环境访问公网”和“公网访问CAE环境”右侧的开关,开启公网功能,将恢复默认的CAE环境访问公网配置和公网访问CAE环境配置。
  • 新增日志采集 最多支持配置 20 条日志采集路径。 登录CAE控制台。 在左侧导航栏中选择“组件配置”。 在“组件配置”页面上方的下拉框中,选择待操作的组件。 单击“日志采集”模块中的“编辑”。 在右侧弹框中单击“新增日志采集路径”。 在“日志采集路径”下填入需要采集日志的路径。例如:/var/log/springboot.log。 图1 配置自定义日志路径 单击“保存”。 设置高级设置。 系统默认按行采集显示程序打印的日志。在程序打印日志存在一条完整日志跨占多行的情况下,如果需要采集显示整条日志,您可以设置“日志格式”,开启多行日志。 单行日志:系统默认按行采集日志。 多行日志:多行合并为一行,系统按设置的匹配规则采集日志,不满足匹配规则的日志行会与上一次满足匹配规则的日志行合并为一行。 选择“日志时间”表示采用时间匹配方式。 时间通配符:“分行模式”选择“日志时间”时,请输入时间通配符。 例如日志中每条日志发生的时间格式是YYYY-MM-DD hh:mm:ss,则时间通配符按照规则应该填写YYYY-MM-DD hh:mm:ss。 时间通配符填写示例: YY - year (19) YYYY - year (2019) M - month (1) MM - month (01) D - day (1) DD - day (01) hh - hours (23) mm - minutes (59) ss - seconds (59) SSS - millisecond(999) hpm - hours (03PM) h:mmpm - hours:minutes (03:04PM) h:mm:sspm - hours:minutes:seconds (03:04:05PM) hh:mm:ss ZZZZ (16:05:06 +0100) hh:mm:ss ZZZ (16:05:06 CET) hh:mm:ss ZZ (16:05:06 +01:00) 正则模式:“分行模式”选择“正则模式”时,请根据日志中每条日志开头的格式输入相应的正则表达式。 正则模式填写示例: 示例一: 19:41:33.217 [http-nio-8000-exec-1] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException: Cannot invoke "com.example.springboothello.controller.HelloController.write()" because "helloController" is null] with root cause java.lang.NullPointerException: Cannot invoke "com.example.springboothello.controller.HelloController.write()" because "helloController" is null at com.example.springboothello.controller.HelloController.nullPointException(HelloController.java:234) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) 将上述日志合并为一行的正则配置:^\d{2}:\d{2}:\d{2}。 不是以时间开头的所有行合并到上一行。 示例二: Exception in thread "main" java.lang.IllegalStateException: A book has a null property at com.example.myproject.Author.getBookIds(Author.java:38) at com.example.myproject.Bootstrap.main(Bootstrap.java:14) Caused by: java.lang.NullPointerException at com.example.myproject.Book.getId(Book.java:22) at com.example.myproject.Author.getBookIds(Author.java:35) ... 1 more 将上述日志合并为一行的正则配置:^Exception 。 不是以Exception开头的所有行合并到上一行。 页面提供正则式校验功能,将日志复制到“日志样例”栏,填写完成“正则模式”后,单击“校验”按钮,可验证填写的正则表达式是否匹配。 单击“确定”。 使配置生效。 如已完成组件部署,单击页面上方“生效配置”。在右侧弹框中确认配置信息,并单击“确定”,使配置生效。 如未完成组件部署,单击页面上方“配置并部署组件”,在弹框中单击“确定”,待组件部署执行完成后,配置生效。 生效后可在组件日志页面内查看指定路径组件日志。 图2 查看自定义路径下的日志
  • 修改自定义日志路径 登录CAE控制台。 在左侧导航栏中选择“组件配置”。 在“组件配置”页面上方的下拉框中,选择待操作的组件。 单击“日志采集”模块中的“编辑”。 在右侧弹框中选择待修改路径,在“操作”列单击“编辑”。 重新配置日志采集路径,例如:/var/log/CAE/logs/*.out。 图3 修改自定义日志路径 (可选)按需重新配置日志采集格式。 单击“保存”后,单击“确定”。 单击页面上方“生效配置”。在右侧弹框中确认变更信息,并单击“确定”,使配置生效。 查看修改路径后的日志信息。 图4 修改路径后的日志
  • 删除自定义日志路径 登录CAE控制台。 在左侧导航栏中选择“组件配置”。 在“组件配置”页面上方的下拉框中,选择待操作的组件。 单击“日志采集”模块中的“编辑”。 在右侧弹框中选择待删除路径,在“操作”列单击“删除”。 在弹框内单击“是”。删除路径后,单击“确定”。 图5 删除自定义日志路径 单击页面上方“生效配置”。在右侧弹框中确认变更信息,并单击“确定”,使配置生效。 删除路径文件表示不再继续采集指定路径文件的日志,但仍可查看对应日志文件的历史日志信息。
  • 操作步骤 登录CAE控制台。 在左侧导航栏中选择“组件配置”。 在“组件配置”页面上方的下拉框中选择需要操作的组件。 图1 选择组件 单击“健康检查”模块中的“编辑”。 在右侧弹框中可选择配置“存活探针”、“就绪探针”和“启动探针”。目前支持三种探针,可同时开启不同探针。 存活探针:针对应用实例进行健康检查,检测应用实例是否已经启动,此时处于启动过程中。单击“存活探针”后的进行检查方式配置。 就绪探针:针对应用实例进行健康检查,检测应用实例是否完成启动,此时处于可对外提供服务状态。单击“就绪探针”后的进行检查方式配置。本示例需打开就绪探针。 启动探针:针对应用实例进行健康检查,检测应用实例是否稳定运行,此时失败CAE会重启应用实例。单击“启动探针”后的进行检查方式配置。 图2 就绪探针 选择其中一种检查方式,并配置相应的参数,具体参数请参考表1、表2。 HTTP请求检查:通过向实例发送HTTP请求检查健康情况。通过HTTP访问获得的HTTP状态码位于[200,399]之间,则认为访问成功,实例健康;否则认为失败,实例不健康。 TCP端口检查:通过向实例发送一个TCP Socket来检查实例的健康情况。如果可以建立连接,则认为实例健康。 执行命令检查:通过在实例中执行探针检测命令来检查实例的健康情况。如果连接失败,则认为不健康。 表1 检查方式配置项参数 检查方式 配置项参数 参数说明 HTTP请求检查 端口 建立HTTP GET使用的端口。 路径 建立HTTP GET使用的路径。 协议 选择HTTP或HTTPS协议。 请求头 单击“添加请求头”,设置参数名和参数值,自定义请求中的HTTP头。 TCP端口检查 端口 用户指定端口,用于TCP连接。本示例选用TCP端口检查。 执行命令 执行命令 添加执行命令,可单击“添加执行命令”添加多条执行命令。 说明: 添加执行命令时,命令行后不允许有空格。 表2 三种检查方式公共配置参数 配置项参数 参数说明 检测周期 探测时间间隔。 默认值为10秒,最小值为1秒。本示例使用默认值。 延迟时间 最长允许延迟时间。 默认值为0秒,最小值为0秒。本示例使用默认值。 说明: 如果用户在容器启动之前配置健康检查,建议延迟时间增长至3分钟。 超时时间 配置探测的超时时间。 默认值为1秒,最小值为1秒。本示例使用默认值。 成功阈值 探测连续几次成功表示成功。 默认值为1,最小值为1,存活探针和启动探针必须为1。本示例使用默认值。 最大失败次数 探测连续几次失败表示失败。 默认值为3,最小值为1。本示例使用默认值。 单击“确定”完成配置。 使配置生效。 如已完成组件部署,单击页面上方“生效配置”。在右侧弹框中确认配置信息,并单击“确定”,使配置生效。 如未完成组件部署,单击页面上方“配置并部署组件”,在右侧弹框中单击“确定”待部署执行完成后,配置生效。 验证组件健康检查功能:升级组件后,在“组件事件”页面中观察,“组件实例健康”事件为正常,则表示组件升级成功。 图3 组件健康检查
  • 注意事项 单独使用存活探针时,如出现网络波动或程序启动过慢的情况,会导致实例持续被重启,且实例一直处于未就绪的状态。 有如下解决方案: 与启动探针配合使用,具体操作请参见启动探针与存活探针配合工作。 使用时将“最大失败次数”调大,增加容错率,并增大“延迟时间”,保证程序在启动后再接受存活探针的检测。 检查成功:对于在健康检查中设置的请求返回状态码200。 检查失败:对于在健康检查中设置的请求返回状态码非200,且连续失败次数达到设置的“最大失败次数”。
  • 删除负载均衡与路由配置 登录CAE控制台。 在左侧导航栏中选择“组件配置”。 在“组件配置”页面上方的下拉框中选择需要操作的组件。 单击“访问方式”模块中的“编辑”。 “从环境外部访问本组件”页面,选择“负载均衡与路由配置”。 在负载均衡与路由配置列表中选择待操作配置项,单击操作列“删除”。 在弹框中单击“是”,完成负载均衡与路由配置删除。 图4 删除负载均衡与路由配置 单击“确定”,完成访问方式配置确认。 使配置生效。 如已完成组件部署,单击页面上方“生效配置”。在右侧弹框中确认配置信息,并单击“确定”,使配置生效。 如未完成组件部署,单击页面上方“配置并部署组件”,在右侧弹框中单击“确定”待部署执行完成后,配置生效。
  • 修改负载均衡与路由配置 登录CAE控制台。 在左侧导航栏中选择“组件配置”。 在“组件配置”页面上方的下拉框中选择需要操作的组件。 单击“访问方式”模块中的“编辑”。 “从环境外部访问本组件”页面,选择“负载均衡与路由配置”。 在负载均衡与路由配置列表中选择待操作配置项,单击操作列“编辑”。 图3 修改负载均衡与路由配置 参考表2、表3 监听器配置和表4更新参数配置。 单击“确定”,完成负载均衡与路由配置修改。 单击“确定”,完成访问方式配置确认。 使配置生效。 如已完成组件部署,单击页面上方“生效配置”。在右侧弹框中确认配置信息,并单击“确定”,使配置生效。 如未完成组件部署,单击页面上方“配置并部署组件”,在右侧弹框中单击“确定”待部署执行完成后,配置生效。
  • 配置负载均衡与路由 登录CAE控制台。 在左侧导航栏中选择“组件配置”。 在“组件配置”页面上方的下拉框中选择需要操作的组件。 单击“访问方式”模块中的“编辑”。 在“从环境外部访问本组件”页面,选择“负载均衡与路由配置”,并单击“添加负载均衡与路由配置”。 在“新增负载均衡与路由配置”页面,选择负载均衡器并参考表2配置负载均衡策略。 表1 选择负载均衡器 参数 参数说明 负载均衡器 支持“独享型”和“内置负载均衡器”。 选择“内置负载均衡器”,只支持基于EIP公网访问。 选择“独享型”时,在下拉框中选择对应负载均衡器。 说明: 如需选择“独享型”负载均衡器,请先添加VPC访问CAE环境配置。 只支持选择环境所属VPC下的负载均衡实例。 如果没有可选的负载均衡器,可单击“创建负载均衡器”,跳转至ELB控制台进行创建,具体操作请参考创建独享型负载均衡器。 表2 负载均衡策略配置 参数 参数说明 分配策略 可选择加权轮询算法、加权最少连接或源IP算法。 加权轮询算法:根据后端服务器的权重,按顺序依次将请求分发给不同的服务器。它用相应的权重表示服务器的处理性能,按照权重的高低以及轮询方式将请求分配给各服务器,相同权重的服务器处理相同数目的连接数。常用于短连接服务,例如HTTP等服务。 加权最少连接:最少连接是通过当前活跃的连接数来估计服务器负载情况的一种动态调度算法。加权最少连接就是在最少连接数的基础上,根据服务器的不同处理能力,给每个服务器分配不同的权重,使其能够接受相应权值数的服务请求。常用于长连接服务,例如数据库连接等服务。 源IP算法:将请求的源IP地址进行Hash运算,得到一个具体的数值,同时对后端服务器进行编号,按照运算结果将请求分发到对应编号的服务器上。这可以使得对不同源IP的访问进行负载分发,同时使得同一个客户端IP的请求始终被派发至某特定的服务器。该方式适合负载均衡无cookie功能的TCP协议。 会话保持类型 当“分配策略”选择“加权轮询算法”或“加权最少连接”时可见。 不启动:默认不启动。 应用程序cookie:根据客户端第一个请求生成一个cookie,后续所有包含这个cookie值的请求都会由同一个后端服务器处理。 健康检查 此处健康检查是设置负载均衡的健康检查配置。 不启动:默认不启动。 HTTP:发起一个HTTP调用请求。 TCP:用户指定端口,用于TCP连接。 参考表3和表4进行路由参数配置。 表3 监听器配置 参数 参数说明 *对外协议 支持HTTP、HTTPS协议。 默认值:HTTPS。 *访问端口 HTTPS默认值为443,HTTP默认值为80。 可修改,取值范围[1,65535]。 请确保使用的端口号唯一,避免冲突。 *服务器默认证书 通过下拉表选择已经添加的证书。 “对外协议”选择HTTPS时显示。 如需新增新证书,可在下拉框中单击“配置新证书”进行添加,具体操作请参考添加证书。 域名证书对SNI 单击“添加域名”,在下拉框中选择域名和对应证书。 “对外协议”选择HTTPS时显示。 说明: 当绑定多个域名且需要配置对应证书时,进行“域名证书对”配置。 如果不配置 “域名证书对”,则所有域名使用“服务器默认证书”解析。 安全策略 配置后不可修改。 安全策略 TLS-1-2:支持TLS1.2版本与相关加密套件, 兼容性较好,安全性很高。 安全策略 TLS-1-0:支持TLS1.0、TLS1.1及TLS1.2版本与相关加密套件,兼容性最好,安全性一般。 安全策略 TLS-1-1:支持TLS1.1及TLS1.2版本与相关加密套件,兼容性较好,安全性较好。 安全策略 TLS-1-2-STRICT:支持TLS1.2版本与相关加密套件,兼容性一般,安全性极高。 说明: 在选择安全策略时,一个环境中的安全策略需要保持一致。 访问控制 “负载均衡器”选择“内置负载均衡器”时可配置。 主要用来控制访问组件的IP地址,您可以创建访问控制策略,允许/禁止某个IP地址对组件进行访问。支持IP和IP网段。 允许所有IP访问。 白名单。 只允许白名单中放通的IP访问组件。 黑名单。 禁止黑名单中的IP访问组件。 说明: 访问方式配置中,同一负载均衡器的同一访问端口,访问控制只能有一种配置,因此需要注意如下事项: “负载均衡器”选择“内置负载均衡器”时,如果同一个端口配置了多条路由规则,请保持这些路由规则访问控制配置一致。 “负载均衡器”选择“独享型”时,不支持在CAE界面配置访问控制。访问方式每配置一个端口,会在所选择的负载均衡器上创建一个监听器,您可以参考访问控制策略,在端口对应的的监听器配置访问控制。 表4 转发策略配置 参数 参数说明 域名 通过下拉表选择已经添加的域名。 说明: 可在下拉框中单击“添加新域名”进行域名添加,具体步骤请参考添加域名。 URL匹配规则 支持前缀匹配、正则匹配和精准匹配。 前缀匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如:/healthz/v1,/healthz/v2。 正则匹配:可设定映射URL规范,例如:规范为/[A-Za-z0-9_.-]+/test。只要符合此规则的URL均可访问,例如:/abcA9/test,/v1-Ab/test。正则匹配规则支持POSIX与Perl两种标准。 精准匹配:表示精准匹配,只有完全匹配上才能生效。例如:映射URL为/healthz,则必须为此URL才能访问。 URL 以/开头,由英文字母、数字或特殊字符_~';@^-%#&$.*+?,=!:|/()[]{}组成,最长支持128个字符。例如:/healthz。 监听端口 取值范围[1,65535]。 图1 负载均衡与路由配置 访问地址由域名和访问端口组成,例如:域名为test-test-16.com,访问端口为13456,则访问地址为http://test-test-16.com:13456/。 单击“确定”,完成负载均衡与路由配置添加。 (可选)如需添加多条负载均衡与路由配置,请重复5~8。 单击“确定”,完成访问方式配置。 使配置生效。 如已完成组件部署,单击页面上方“生效配置”。在右侧弹框中确认配置信息,并单击“确定”,使配置生效。 如未完成组件部署,单击页面上方“配置并部署组件”,在右侧弹框中单击“确定”待部署执行完成后,配置生效。 在左侧导航栏中选择“组件列表”,进入“组件列表”页面,单击对应组件“访问地址”列的ip地址,如:http://test-test-16.com:13456/,即可成功访问组件静态WEB页面。如果您配置了访问控制白名单或黑名单,则只有在白名单内或在黑名单外的ip能够访问组件。 图2 成功访问静态WEB页面
  • 查询重规划的影响 发生重规划时,会在慢日志中看到关键字:replanned:1,这表示数据库无法针对当前查询模式的查询条件提供始终有效的计划。 频繁的查询重新规划(Query Re-Planning)可能带来以下影响: CPU开销增加:频繁的重新规划会消耗更多CPU资源,影响整体性能。 内存消耗增加:频繁重新规划会增加内存使用,可能影响其他操作。 查询延迟增加:每次重新规划都会增加查询执行时间,导致响应变慢。
  • 查询重规划的触发场景 以下是一些常见的查询重规划场景: 索引变化 新增或删除索引:当某个字段的索引发生变化(如新增索引或删除索引)时,DDS可能会重新规划查询执行计划。查询可能会重新评估现有索引的有效性,进而选择新的索引,或决定使用全表扫描。 数据分布变化 如果数据分布发生了变化(例如某个字段的选择性发生显著变化),DDS可能会重新评估查询计划,以确保选择最佳的执行路径。例如,某个字段变得更加稀疏或密集,导致索引的效益变化。 查询条件变化 当查询条件变化时,DDS可能需要重新生成查询计划。例如,某些查询添加了新的筛选条件,或者查询条件中使用了不同的操作符(如从$eq改为$in)。 聚合管道中的变化 在聚合操作中,如果数据量、字段或管道顺序发生变化,DDS可能会重新评估聚合管道的执行计划。尤其是当管道阶段的数据过滤条件发生变化时,DDS可能会重新选择执行路径。 环境资源压力变化 在实例负载发生变化(如节点资源耗尽、硬盘空间不足、或网络延迟增加)时,DDS可能会重新调整查询计划,以便在当前资源条件下优化查询性能。 查询缓存失效 DDS会将之前执行的最优的查询计划缓存,DDS在某些情况下可能会使用查询缓存。随着查询缓存的失效,查询计划可能会被重新生成。
  • 查询计划的概述 查询计划是在执行查询时,DDS查询优化器选择的执行路径。这个执行路径定义了如何扫描数据,是否使用索引,以及如何处理查询的每个阶段。DDS通过以下几个步骤生成查询计划: 解析查询:DDS解析查询条件,识别字段和操作符。 选择索引:基于查询的条件,DDS会检查可用的索引,并选择最适合的索引来加速查询。 评估执行路径:DDS会基于数据量、字段选择性、索引类型等评估可能的执行路径,最终选择最优的执行路径生成新的查询计划。 执行查询:DDS按照选定的查询计划执行查询并返回结果。
  • 查询重规划的处理建议 定期监控查询计划 建议定期监控查询的执行计划,特别是在系统发生变动后,如添加索引、新增数据或调整查询结构。通过以下方式实现: 使用explain()方法分析查询的执行计划。 定期检查慢日志,了解可能的查询计划变化。 观察查询计划变化的原因 当查询重规划发生时,首先要确定是哪些因素导致了查询计划的变化。根据以下几个方面进行排查: 索引变化:使用db.collection.getIndexes()检查现有索引,确认是否有索引的新增或删除。 数据分布:通过统计信息来检查数据是否发生了显著变化。例如使用db.collection.stats()查看集合的统计信息,如文档数、数据大小和索引大小。 查询条件:检查查询条件是否发生了变化,是否增加了新的字段或者修改了查询操作符。 针对查询重规划进行优化 以下是一些优化查询重规划的建议: 【推荐】确保数据库环境有足够的资源(CPU、内存、磁盘等)来处理负载,减少因资源限制导致的查询重规划,升级实例规格以缓解数据库负载压力,具体操作请参考文档变更实例的CPU和内存规格。 【推荐】预估数据分布:在设计索引时,可以使用数据分布的预测来选择合适的字段进行索引,以避免数据分布变化时引发频繁的查询重规划。 【推荐】使用稳定的索引:确保为常用查询提供稳定且合适的索引。特别是在数据量较大时,索引可以有效减少查询重规划的发生。 【推荐】尽量避免频繁变化的查询结构:查询条件的频繁变动可能会导致DDS经常重新生成查询计划。建议根据业务需求,尽量确保查询条件的一致性。 【推荐】聚合优化:如果您的查询涉及复杂的聚合管道,建议定期分析管道的执行计划并进行优化。可以通过$match在聚合管道的早期阶段过滤数据,减少后续阶段的数据处理量。 对发生replan的查询条件使用hint()来指定索引,对查询调用此方法可覆盖DDS的默认索引选择和查询优化过程。示例: db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}) 在发生replan的查询条件使用索引过滤器来限制使用的索引,索引过滤器会覆盖查询计划器正常选择查询计划的行为,当一个查询同时存在Hint和索引过滤器时,索引过滤器会覆盖指定的Hint值,因此,您应当谨慎使用索引过滤器。以下示例为orders集合创建了一个索引筛选器。该筛选器适用于其谓词为item字段的等值匹配的查询,其中仅投影quantity字段,并指定按order_date升序排序。 db.runCommand( { planCacheSetFilter: "orders", query: { item: "ABC" }, projection: { quantity: 1, _id: 0 }, sort: { order_date: 1 }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } ) 对于计划缓存查询结构,查询优化器将仅考虑使用索引{ item: 1, order_date: 1, quantity: 1 }的索引计划。
  • 数据分片与扩展 随着日志数量的激增,日志数据量呈指数级增长,单一数据库节点往往难以应对海量数据的存储和查询需求。DDS(Document Database Service)通过数据分片(Sharding)技术,提供了水平扩展能力,能够有效分担数据存储和查询压力,确保系统的高可用性和高性能。 数据分片原理 数据分片是将数据集分割成多个部分,分别存储在不同的数据库节点(Shard)上。每个Shard存储数据集的一部分,通过Shard Key来确定数据的分布。Shard Key的选择至关重要,它决定了数据的分布模式,影响着写入和查询的性能。
  • 自动删除过期数据 TTL索引:自动删除过期文档,如设置30天后自动删除。 db.eventlog.createIndex( { "timestamp": 1 }, { expireAfterSeconds: 30 * 24 * 60 * 60 } ) Capped集合:限制集合大小,自动删除最旧文档。固定大小集合是大小固定的集合,根据插入顺序插入和检索文档。固定大小集合的工作方式与循环缓冲区类似:一旦一个集合填满了分配的空间,它就会通过覆盖集合中最旧的文档来为新文档腾出空间。 // 创建固定集合需要在创建集合的时候指定 db.getSiblingDB("iot_logs").dropDatabase() db.getSiblingDB("iot_logs").createCollection( "events", { capped: true, size: 5242880 } ) 定期归档:按月归档日志数据,便于历史数据管理和查询。 db.getSiblingDB("iot_logs").events.renameCollection("events202301") 单个实例中,数据库的总的个数不要超过200个,总的集合个数不要超过500个。集合数量过多会导致内存压力变高,并且集合数量多会导致重启以及主备倒换性能变差,影响紧急情况下的高可用性能。建议定期删除不需要的集合。
  • 日志数据的存储策略 在物联网(Internet of Things,简称IoT)领域,设备的日志数据扮演着至关重要的角色,不仅能帮助监控设备的运行状态,还提供了设备使用模式和故障预测的宝贵信息。例如,一个智能家庭安全系统的日志记录,可以包含设备ID、时间戳、事件类型(如“门锁开启”、“运动检测”)、设备状态、以及可能的错误代码等信息。 日志数据示例 一个典型的IoT设备日志条目如下所示: DeviceID: 001, Timestamp: 2023-04-05T14:30:00Z, Event: DoorLockOpened, DeviceStatus: Active, Error: None
  • DDS节点脱节原理和说明 副本集架构由主节点、备节点和隐藏节点组成,DDS自动搭建三节点的副本集供用户使用,节点之间数据自动同步,保证数据的高可靠性。对于需要保证高可用的中小型业务系统,推荐使用副本集。 主节点:即Primary节点,用于读写请求。 备节点:即Secondary节点,用于读请求。 隐藏节点:即Hidden节点,用于业务数据的备份。 用户可以直接操作主节点和备节点。若主节点故障,系统自动分配新的主节点。副本集架构如下图所示。 图1 三节点副本集架构 DDS只能在主节点写入数据,主节点写入数据时,会同时生成oplog,Secondary和Hidden通过从主节点读取oplog进行回放,达到数据的最终一致。 oplog的存储量由oplogSize(默认磁盘容量的10%)决定。 主备时延是如何产生的? 如果主节点写入速度太快,超过备节点oplog的读取回放速度,此时就产生了主备时延。 何时会脱节? 因为oplog存储容量有限,如果到达容量上限,就会淘汰掉最早的oplog。备节点读取oplog,每次都会记录最后一条读取的oplog,如果主备时延达到一定程度,备节点发现上次回放的oplog点位已经被淘汰掉,此时备节点就无法继续读取oplog,说明备节点已经脱节。 如何有效防止备节点脱节? 业务需要设置majority级别的writeConcern写入数据,表示将数据写入到大多数节点。 适当增加oplog的存储空间上限,如需修改,可以通过控制台界面修改参数值oplogSizePercent,具体步骤请参见修改DDS实例参数。 将创建索引等耗时较长的DDL操作,以及数据备份操作放在业务低峰期执行,同时尽可能避免突发大量增删改操作。 如果没有以majority级别的writeConcern写入数据,发生主备倒换时,未同步到备节点的数据有丢失风险。
  • 问题现象 当DDS实例的连接数已满时,新发起的连接请求将无法被响应,从而导致实例连接失败。 使用Mongo Shell连接实例时,出现如下提示,表示当前连接池的连接数已满。 使用Python连接实例时,出现以下提示,表示当前连接池的连接数已满。 pymongo.errors.ServerSelectionTimeoutError: connection closed, connection closed 查看实例监控,发现实例连接数确实被耗尽。
  • 解决方法 经过上述步骤确认为连接数耗尽问题后,需要根据突发流量与长期业务两种情况分别处理。 突发流量造成的连接数满,考虑重启实例或节点释放当前连接。并同时排查客户端连接,是否存在大量重试请求,如果是大量重试请求引起的连接数耗尽,考虑修改客户端参数(修改重试逻辑,增大超时重试时长),从而避免连接数积压。 重启实例的操作会将实例的节点进行轮转重启,每个节点会有30秒左右的闪断,如果集合的数量较多(超过1万),闪断时间也会随之变长,重启前请做好业务安排并确保应用有重连机制。 针对长期业务导致的连接数耗尽,可以适当上调最大连接数(修改“net.maxIncomingConnections”的值,该参数修改后实时生效),保证每次调整幅度在20%以内,调整后观察负载变化。如果发现上调连接数后负载较高,说明实例负载已经达到瓶颈,请及时进行规格扩容。
  • 分析慢日志 除了降低连接数以外,还需要注意单次请求的内存开销,尽量避免查询语句出现全表扫描、内存排序等。 使用慢日志功能,查询当前实例产生的慢日志。 分析慢日志,查找内存升高的原因:下面是某个慢请求日志示例,可查看到该请求进行了全表扫描,扫描了1561632个文档,没有通过索引进行查询。 { "op" : "query", "ns" : "taiyiDatabase.taiyiTables$10002e", "query" : { "find" : "taiyiTables", "filter" : { "filed19" : NumberLong("852605039766") }, "shardVersion" : [ Timestamp(1, 1048673), ObjectId("5da43185267ad9c374a72fd5") ], "chunkId" : "10002e" }, "keysExamined" : 0, "docsExamined" : 1561632, "cursorExhausted" : true, "numYield" : 12335, "locks" : { "Global" : { "acquireCount" : { "r" : NumberLong(24672) } }, "Database" : { "acquireCount" : { "r" : NumberLong(12336) } }, "Collection" : { "acquireCount" : { "r" : NumberLong(12336) } } }, "nreturned" : 0, "responseLength" : 157, "protocol" : "op_command", "millis" : 44480, "planSummary" : "COLLSCAN", "execStats" : { "stage" : "SHARDING_FILTER", [3/1955] "nReturned" : 0, "executionTimeMillisEstimate" : 43701, "works" : 1561634, "advanced" : 0, "needTime" : 1561633, "needYield" : 0, "saveState" : 12335, "restoreState" : 12335, "isEOF" : 1, "invalidates" : 0, "chunkSkips" : 0, "inputStage" : { "stage" : "COLLSCAN", "filter" : { "filed19" : { "$eq" : NumberLong("852605039766") } }, "nReturned" : 0, "executionTimeMillisEstimate" : 43590, "works" : 1561634, "advanced" : 0, "needTime" : 1561633, "needYield" : 0, "saveState" : 12335, "restoreState" : 12335, "isEOF" : 1, "invalidates" : 0, "direction" : "forward", "docsExamined" : 1561632 } }, "ts" : ISODate("2019-10-14T10:49:52.780Z"), "client" : "172.16.36.87", "appName" : "MongoDB Shell", "allUsers" : [ { "user" : "__system", "db" : "local" } ], "user" : "__system@local" } 在慢请求日志中,您需要重点关注以下关键字。 全集合(全表)扫描:COLLSCAN 当一个操作请求(如query、update、delete)需要全表扫描时,将大量占用内存资源。在查看慢请求日志时,发现COLLSCAN关键字,很可能是这些查询占用了内存资源。 如果该类操作请求较为频繁,建议您对查询的字段建立索引进行优化。 全集合(全表)扫描:docsExamined 通过查看参数“docsExamined”的值,可以查看一个查询扫描了多少文档。该值越大,请求的内存使用率越高。 不合理的索引:IXSCAN、keysExamined 大量数据排序:SORT、hasSortStage 当查询请求中包含排序时,参数“hasSortStage”的值为“true”。如果排序无法通过索引实现,将在查询结果中进行排序。由于排序将占用大量内存资源,该场景下,需要通过对经常排序的字段建立索引进行优化。 当您发现SORT关键字时,可以考虑通过索引来优化排序。 索引不是越多越好,过多索引会影响写入和更新的性能。越建议参考ESR原则设计索引,以提高查询效率: 精确(Equal)匹配的字段放最前面。 排序(Sort)条件放中间。 范围(Range)匹配的字段放最后面。
  • 检查角色的合理性 DDS支持“基于角色”的方法授予账号对数据和命令的访问权限。建议管理员结合业务需要,遵从最低授权原则,创建合适的自定义角色,对账号进行授权。如果发现账号权限过大,请结合业务需要,对账号权限进行更新或者删除。 表1 DDS高权限角色的描述 序号 检查项 描述 1 检查在用户表中存在userAdmin角色的用户 当在admin数据库定义了userAdmin角色的用户后,该用户被提供了任何用户的任何权限的能力,即拥有这个角色的用户可以在任何数据库上定义它们自己的权限。 2 检查在用户表中存在userAdminAnyDatabase角色的用户 当定义了userAdminAnyDatabase角色的用户后,该用户被提供了任何用户的任何权限的能力,即拥有这个角色的用户可以在任何数据库上定义它们自己的权限。 3 检查拥有anyAction动作权限的角色 当定义了anyAction动作权限的角色,该角色用户拥有对应数据库的任何操作,不利于权限的管理。 4 检查拥有anyResource动作权限的角色 当定义了anyResource动作权限的角色,该角色用户拥有对应数据库的所有操作资源,不利于权限的管理。 5 检查拥有changeCustomData动作权限的角色 当定义了changeCustomData动作权限的角色,该角色用户拥有对应数据库所有用户自定义信息的更改权限,不利于权限的管理。 6 检查拥有changePassword动作权限的角色 当定义了changePassword动作权限的角色,该角色用户即可拥有对应数据库所有用户密码的更改权限,不利于权限的管理。 7 检查拥有createRole动作权限的角色 当定义了createRole动作权限的角色,该角色用户即可拥有对应数据库中任意创建角色的权限,不利于权限的管理。 8 检查拥有createUser动作权限的角色 当定义了createUser动作权限的角色,该角色用户即可拥有对应数据库中任意创建用户的权限,不利于权限的管理。 9 检查拥有dropRole动作权限的角色 当定义了dropRole动作权限的角色,该角色用户即可拥有对应数据库中删除任意角色的权限,不利于权限的管理。 10 检查拥有dropUser动作权限的角色 当定义了dropUser动作权限的角色,该角色用户即可拥有对应数据库中删除任意用户的权限,不利于权限的管理。 11 检查拥有grantRole动作权限的角色 当定义了grantRole动作权限的角色,该角色用户即可拥有对应数据库中任何用户授予任意角色的权限,不利于权限的管理。 12 检查拥有revokeRole动作权限的角色 当定义了revokeRole动作权限的角色,该角色用户即可拥有对应数据库中任何用户取消任意角色的权限,不利于权限的管理。 13 检查拥有authSchemaUpgrade动作权限的角色 当定义了authSchemaUpgrade动作权限的角色,该角色用户即可拥有执行authschemaupgrade的权限,不利于权限的管理。authschemaupgrade命令可以修改用户认证转换格式。 14 检查拥有closeAllDatabases动作权限的角色 当定义了closeAllDatabases动作权限的角色,该角色用户即可拥有执行closeAllDatabases命令的权限,关闭所有数据库并释放MongoDB占用的内存,不利于权限的管理。 15 检查拥有dropDatabase动作权限的角色 当定义了dropDatabase动作权限的角色,该角色用户即可拥有执行dropDatabase命令的权限,删除任意的数据库,不利于权限的管理。 16 检查拥有getParameter动作权限的角色 当定义了getParameter动作权限的角色,该角色用户即可拥有执行getParameter命令的权限,任意查看命令行选项的值,不利于权限的管理。 17 检查拥有setParameter动作权限的角色 当定义了setParameter动作权限的角色,该角色用户即可拥有执行setParameter命令的权限,任意修改命令行选项的值,不利于权限的管理。 18 检查拥有shutdown动作权限的角色 当定义了shutdown动作权限的角色,该角色用户即可拥有执行shutdown命令的权限,清除所有数据库资源,然后终止进程,不利于权限的管理。 19 检查拥有getCmdLineOpts动作权限的角色 当定义了getCmdLineOpts动作权限的角色,该角色用户即可拥有执行getCmdLineOpts命令的权限,获得argv和parsed两个字段,argv包含用于调用mongod或mongos命令字符串,parsed包含所有运行时选项,不利于权限的管理。 20 检查拥有internal动作权限的角色 当定义了internal动作权限的角色,该角色用户即可拥有对应数据库进行任何操作的权限,不利于权限的管理。 21 检查拥有readWrite角色的用户 当定义了readWrite角色的用户,该角色用户即可拥有对应数据库进行读的权限加上更改数据的权限,不利于权限的管理。 22 检查拥有backup角色的用户 当定义了backup角色的用户,该角色用户即可拥有在admin数据库mms.bak文档中insert、update的权限,不利于权限的管理。 23 检查拥有clusterAdmin角色的用户 当定义了clusterAdmin角色的用户,该角色用户即可拥有最高集群管理的权限,这个角色包括了clusterManager,clusterMonitor,hostManager角色的权限,不利于权限的管理。 24 检查拥有clusterManager角色的用户 当定义了clusterManager角色的用户,在集群上管理和监视操作,该角色用户可以有权管理分别被用来共享、复制的设置本地数据库的权限,不利于权限的管理。 25 检查拥有clusterMonitor角色的用户 当定义了clusterMonitor角色的用户,该角色用户即可拥有为监视工具提供只读的权限,不利于权限的管理。 26 检查拥有dbAdmin角色的用户 当定义了dbAdmin角色的用户,该角色用户即可拥有对应数据库管理员的权限,不利于权限的管理。 27 检查拥有dbAdminAnyDatabase角色的用户 当定义了dbAdminAnyDatabase角色的用户,该角色用户即可拥有和dbAdmin角色一样的权限,除了适用于集群内所有数据库这个特性,这个角色也为整个集群提供listDatabases操作,不利于权限的管理。 28 检查拥有dbOwner角色的用户 当定义了dbOwner角色的用户,该角色用户即可拥有执行数据库所有管理操作的权限,这个角色合并了readWrite,dbAdmin,userAdmin角色的权限,不利于权限的管理。 29 检查拥有hostManager角色的用户 当定义了hostManager角色的用户,该角色用户即可拥有监视和管理服务器的权限,不利于权限的管理。 30 检查拥有readAnyDatabase角色的用户 当定义了readAnyDatabase角色的用户,该角色用户即可拥有读任何数据库的权限,这个角色也为整个集群提供listdatabases操作,不利于权限的管理。 31 检查拥有readWriteAnyDatabase角色的用户 当定义了readWriteAnyDatabase角色的用户,该角色用户即可拥有读写任何数据库的权限,这个角色也为整个集群提供listdatabases操作,不利于权限的管理。 32 检查拥有restore角色的用户 当定义了restore角色的用户,该角色用户即可拥有还原备份所需的权限,不利于权限的管理。 33 检查拥有root角色的用户 当定义了root角色的用户,该角色用户即可拥有所有资源的所有操作,包括readWriteAnyDatabase,dbAdminAnyDatabase,userAdminAnyDatabases,clusterAdmin,restore角色的权限,不利于权限的管理。 34 检查拥有userAdmin角色的用户 当定义了userAdmin角色的用户,该角色用户即可拥有授权任意用户的权限,包括它们自己的,不利于权限的管理。 35 检查拥有userAdminAnyDatabase角色的用户 当定义了userAdminAnyDatabase角色的用户,该角色用户即可拥有授权所有数据库任意用户的权限,包括它们自己的,不利于权限的管理。
  • 关闭脚本运行功能 启用javascriptEnabled选项security.javascriptEnabled,可以在mongod 服务端运行javascript脚本,存在安全风险。禁用javascriptEnabled选项,mapreduce、group命令等将无法使用。如果您的应用中没有mapreduce等操作的需求,为了安全起见,建议关闭javascriptEnabled选项。详情请参见参数调优。
  • 迁移准备 权限准备: 当使用 DRS 将其他云MongoDB数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表2: 表2 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库权限设置: 需要确保源数据库MongoDB的账号权限具备表2的要求。若权限不足,需要在源数据库端开通高权限的账号。 目标数据库权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库需要开放公网访问。 源数据库的网络设置: 源数据库MongoDB实例需要开放公网域名的访问。 目标数据库的网络设置:目标端不需要进行设置。 安全规则准备: 源数据库安全组规则设置: 源数据库MongoDB实例需要将具体的DRS迁移实例的弹性公网IP添加到其网络白名单中,确保源数据库MongoDB实例可以与上述弹性公网IP连通。 在设置网络白名单之前,需要先获取DRS迁移实例的弹性公网IP,具体操作如下: 迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的弹性公网IP。如图4所示: 图4 迁移实例公网弹性IP 以上讲述的是精细配置白名单的方法,还有一种简单设置白名单的方法,在安全允许的情况下,可以将源数据库MongoDB实例的网络白名单设置为0.0.0.0/0,代表允许任何IP地址访问该实例。 上述的网络白名单是为了进行数据迁移设置的,迁移结束后可以删除。 目标数据库安全组规则设置: 目标数据库默认与DRS迁移实例处在同一个VPC,网络是互通的,DRS可以直接写入数据到目标数据库,不需要进行任何设置。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后手动添加到目标DDS中。
  • 资源规划 表1 资源规划 类别 子类 规划 备注 VPC VPC名称 vpc-dds 自定义,易理解可识别。 所属Region 华南-广州 选择和自己业务区最近的Region,减少网络时延。 可用区 可用区一 - 子网网段 10.0.0.0/24 子网选择时建议预留足够的网络资源。 子网名称 subnet-default 自定义,易理解可识别。 其他云MongoDB 数据库版本 MongoDB 4.4 - IP地址 192.168.0.1 仅作为示例。 端口 8635 仅作为示例。 DDS实例 实例名称 dds-test 自定义,易理解可识别。 数据库版本 DDS 4.4 - 可用区类型 单可用区 仅作为示例。 可用区 可用区一 本示例中为可用区一。 性能规格 增强Ⅱ型 4 vCPUs | 16 GB 本示例中选择的规格。实际选择的规格需要结合业务场景选择。 DRS迁移任务 迁移任务名 DRS-test-migrate 自定义。 源数据库引擎 MongoDB - 目标数据库引擎 DDS - 网络类型 公网网络 本示例中采用公网网络。
  • 迁移准备 权限准备: 当使用 DRS 将本地数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表2所示: 表2 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库的权限设置: 需要确保源数据库MongoDB的账号具备表2的权限,若权限不足,需要在源数据库端创建高权限的账号。 目标数据库的权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库的网络设置: 本地MongoDB数据库实时迁移至本云DDS的场景,一般可以使用VPN网络和公网网络两种方式进行迁移,您可以根据实际情况为本地MongoDB数据库开放公网访问或建立VPN访问。一般推荐使用公网网络进行迁移,该方式下的数据迁移过程较为方便和经济。 目标数据库的网络设置: 若通过VPN访问,请先开通VPN服务,确保源数据库和目标DDS网络互通。 若通过公网网络访问,目标DDS不需要进行设置。 安全规则准备: 源数据库的白名单设置: 若通过公网网络进行迁移,源数据库MongoDB实例需要将具体的DRS迁移实例的弹性公网IP添加到其网络白名单中,确保源数据库MongoDB实例可以与上述弹性公网IP连通。在设置网络白名单之前需要获取DRS迁移实例,具体方法如下: 迁移实例创建成功后,可在“源库及目标库”页面获取DRS迁移实例的弹性公网IP。如图4所示: 图4 迁移实例公网弹性IP 以上讲述的是精细配置白名单的方法,还有一种简单设置白名单的方法,在安全允许的情况下,可以将源数据库MongoDB实例的网络白名单设置为0.0.0.0/0,代表允许任何IP地址访问该实例。 若通过VPN网络进行迁移,源库需要将DRS迁移实例的私有IP添加到其网络白名单内,确保源端和目标端网络互通。 上述的网络白名单是为了进行数据迁移设置的,迁移结束后可以删除。 目标数据库安全组规则设置: 目标数据库默认与DRS迁移实例处在同一个VPC,网络是互通的,DRS可以直接写入数据到目标数据库,不需要进行任何设置。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后手动添加到目标DDS中。
  • 资源规划 表1 资源规划 类别 子类 规划 备注 VPC VPC名称 vpc-dds 自定义,易理解可识别。 所属Region 华南-广州 选择和自己业务区最近的Region,减少网络时延。 可用区 可用区一 - 子网网段 10.0.0.0/24 子网选择时建议预留足够的网络资源。 子网名称 subnet-default 自定义,易理解可识别。 本地MongoDB 数据库版本 MongoDB 4.4 自定义,易理解可识别。 DDS DDS 实例名 dds-test 自定义,易理解可识别。 数据库引擎 DDS - 兼容的数据库版本 4.4 - 可用区类型 单可用区 - 可用区 可用区一 - 性能规格 增强Ⅱ型 - CPU架构 X86 8 vCPUs | 32GB - DRS迁移任务 迁移任务名 DRS-dds 自定义。 源数据库引擎 MongoDB 本示例中源数据库为自建MongoDB,即在本地服务器上安装社区版MongoDB。 目标数据库引擎 DDS 本示例中目标数据库为华为云DDS实例。 网络类型 公用网络 本示例中采用公用网络。
  • 迁移准备 权限准备: 当使用 DRS 将E CS 自建MongoDB数据库的数据迁移到本云DDS实例时,在不同迁移类型情况下,对源数据库和目标数据库的账号权限要求如表2: 表2 迁移账号权限 迁移类型 全量迁移 全量+增量迁移 源数据库 副本集:连接源数据库的用户需要对待迁移库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限。 集群:连接源数据库的用户需要对待迁移库有read权限,对config数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 副本集:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 单节点:连接源数据库的用户需要对待迁移库有read权限,对local数据库有read权限。 集群:连接源数据库mongos节点的用户需要对待迁移库有read权限,对config数据库有read权限, 连接源数据库分片节点的用户需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。 如果需要迁移源数据库用户和角色信息,连接源数据库的用户需要对admin数据库的系统表system.users,system.roles有读权限。 目标数据库 连接目标数据库的用户需要对admin数据库有dbAdminAnyDatabase权限,对目标数据库有readWrite权限。对于目标数据库是集群的实例,迁移账号还要有对config数据的读权限 源数据库权限设置: 需要确保源数据库MongoDB的账号权限具备表2的要求。若权限不足,需要在源数据库端开通高权限的账号。 目标数据库权限设置: 本云DDS实例使用初始账号即可。 网络准备: 源数据库所在的region需要和目标DDS所在的region保持一致。 源数据库可以与目标DDS实例在同一个VPC,也可以不在同一个VPC。 当不在同一个VPC的时候,要求源数据库实例和目标端DDS实例所处的子网处于不同网段,此时需要通过建立对等连接实现网络互通。 具体操作请参见《虚拟私有云用户指南》中“VPC对等连接”章节。 当在同一VPC的时候,网络默认是互通的。 安全规则准备: 同一VPC场景下,默认网络是连通的,不需要单独设置安全组。 不同VPC场景下,通过建立对等连接就可以实现网络互通,不需要单独设置安全组。 其他事项准备: 由于迁移过程不会迁移MongoDB数据库的用户信息以及相关参数,需要自行将上述信息导出后,手动添加到目标DDS中。
  • 资源规划 表1 资源规划 类别 子类 规划 备注 VPC VPC名称 vpc-dds 自定义,易理解可识别。 所属Region 华南-广州 选择和自己业务区最近的Region,减少网络时延。 可用区 可用区一 - 子网网段 10.0.0.0/24 子网选择时建议预留足够的网络资源。 子网名称 subnet-default 自定义,易理解可识别。 ECS ECS名称 ecs-mongodb 自定义,易理解可识别。 规格 s6.xlarge.2 4vCPUs|8GiB 本示例中选择的规格。 实际选择的规格需要结合业务场景选择,请参考弹性云服务器的实例规格。 操作系统 CentOS 7.6 64 - 系统盘 通用型SSD 40GiB - 数据盘 超高IO 100GiB - 弹性IP 现在购买 因为迁移任务会选择“公网网络”,因此此处需要购买弹性IP。 DDS DDS 实例名 dds-test 自定义,易理解可识别。 数据库引擎 DDS - 兼容的数据库版本 4.4 - 可用区类型 单可用区 - 可用区 可用区一 - 性能规格 增强Ⅱ型 - CPU架构 X86 8 vCPUs | 32GB - DRS迁移任务 迁移任务名 DRS-dds 自定义。 源数据库引擎 MongoDB 本示例中源数据库为自建MongoDB,即在华为云弹性云服务器上安装社区版MongoDB。 目标数据库引擎 DDS 本示例中目标数据库为华为云DDS实例。 网络类型 公用网络 本示例中采用公用网络。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全