华为云用户手册

  • 目标数据库所在安全组 目标数据库所在VPC安全组入方向规则需要放DRS实例IP和目标数据库自身的端口,允许DRS实例通过端口访问。 在RDS的“实例管理”页面,单击目标实例名称。 进入“基本信息”页签,在“连接信息”模块下,单击安全组。 进入安全组基本信息页,选择“入方向规则”页签。 单击“添加规则”进行配置。 目标数据库所在VPC安全组入方向规则需要放DRS实例IP和目标数据库自身的端口(IP地址和端口只要包含DRS的IP和自身的端口即可)。
  • 源数据库所在安全组 源数据库所在VPC安全组入方向规则需要放DRS实例IP和源数据库自身的端口,允许DRS实例通过端口访问。 在RDS的“实例管理”页面,单击目标实例名称。 进入“基本信息”页签,在“连接信息”模块下,单击安全组。 进入安全组基本信息页,选择“入方向规则”页签。 单击“添加规则”进行配置。 源数据库所在VPC安全组入方向规则需要放DRS实例IP和源库自身的端口(IP地址和端口只要包含DRS的IP和自身的端口即可)。
  • DRS实例所在安全组设置 DRS实例所在VPC安全组出方向规则需要放通源数据库和目标数据库的IP、端口,允许DRS实例访问安全组外的数据库。 在任务列表中,单击DRS任务名称。 进入“基本信息”页签,在“实例信息”模块下,单击内网安全组。 进入安全组基本信息页,选择“出方向规则”页签。 单击“添加规则”进行配置。 DRS实例所在VPC安全组出方向规则需要放通源数据库和目标数据库的IP、端口(IP地址和端口只要包含目标数据库和源数据库的IP和端口即可)。
  • DDM灾备任务源库填写说明 DRS支持DDM灾备任务的源端通过输入IP方式进行连接,如图1。DDM灾备的原理是源端和目标端DDM中的DN一一对应灾备,因此需要正确填写源端和目标端的DN的对应关系。关于DDM逻辑库和逻辑库下的DN实例说明可参考DDM产品文档。 在创建DDM灾备任务前,建议在DDM实例目标端的控制台上,导入源端DDM的逻辑库信息,详细操作可参“导入逻辑库”。 DRS页面上“数据库实例”中按照DN对应关系填写DDM的DN信息,也就是挂载在DDM中的RDS for MySQL信息。例如源端DDM1有一个DN节点,挂载的RDS for MySQL实例1,IP为192.168.1.10;目标端DDM2中有一个DN节点,挂载RDS for MySQL实例2 , IP为192.168.6.150,则填写方式如图1,建立DN数据灾备的对应关系。 如果DDM下有多个DN,需要用户确保每个目标端的DN都和源端DN正确对应。 图1 源库信息 父主题: 实时灾备
  • 微调产物说明 模型微调完成后,会得到一个新模型,即微调产物。 在微调大师页面,单击操作列的“查看模型”跳转到微调获得的新模型的详情页面。选择“模型文件”页签可以查看微调产物。各文件说明请参见表3。 图1 微调产物示例 表3 微调产物说明 文件名 文件说明 gallery_train文件夹 自定义模型的模型训练文件,仅当使用自定义模型微调时才会有这个微调产物,内容和预训练模型里的gallery_train文件一致。 training_logs/user_params.json 微调配置参数信息,AI Gallery会自动将微调设置的参数信息记录在此文件下。 “README.md” 模型的基础信息。内容和预训练模型里“模型文件”页签的“README.md”一致。 其他文件 当使用自定义模型微调时,可能还会有一些其他微调产物,这是由自定义模型的训练脚本文件train.py决定的,如果训练脚本定义了归档其他训练产物,就会在此处呈现。
  • 查看训练效果 启动模型微调任务后,在微调大师列表单击操作列的“任务详情”,在弹窗中选择“指标效果”页签,可以查看训练效果。 表2 训练效果的指标介绍 指标名称 指标说明 NPU/GPU利用率 在训练过程中,机器的NPU/GPU占用情况(横坐标时间,纵坐标占用率)。 显存利用率 在训练过程中,机器的显存占用情况(横坐标时间,纵坐标占用率)。 吞吐 在训练过程中,每卡处理tokens数量(tokens/s/p)。每种框架计算方式不一致,例如,ATB可通过“samples per second*seq_lenth/总卡数”得到tokens/s/p,输出给throughout字段,seq_lenth取值在训练脚本中可以查看。 单机8卡吞吐量一般为1650tokens/s/p,双机16卡吞吐量一般为1625tokens/s/p。 说明: 自定义训练或自定义镜像训练,需要提前在训练启动脚本(例如“train.py”)中定义好迭代次数、LOSS和吞吐数据的存放位置,以及存放格式(必须是“迭代次数|loss|吞吐”),才能在此处正常查看吞吐和“训练LOSS”曲线。 训练LOSS 训练阶段的LOSS变化,模型在日志里用LOSS关键词记录数据,按照训练迭代周期记录LOSS值。
  • 选择训练任务类型 选择模型微调的训练任务类型。 当模型的“任务类型”是“文本问答”或“文本生成”时,“训练任务类型”默认和模型“任务类型”一致。“训练任务类型”支持修改,如果模型文件满足自定义模型规范(训练),则“训练任务类型”支持选择“自定义”。 当模型的“任务类型”是除“文本问答”和“文本生成”之外的类型(即自定义模型)时,则“训练任务类型”默认为“自定义”,支持修改为“文本问答”或“文本生成”。 当使用自定义镜像进行模型微调时,“训练任务类型”默认为“自定义”,且不支持修改。
  • 准备AI应用运行文件“app.py” AI应用运行文件“app.py”的代码示例如下。其中,加粗的代码为必须保留的内容。 import gradio as gr import os POD_IP = os.getenv('POD_IP') // 获取容器IP ROOT_PATH = os.getenv('ROOT_PATH') //获取服务根路径 def greet(name): return "Hello " + name + "!" with gr.Blocks() as demo: name = gr.Textbox(label="Name") output = gr.Textbox(label="Output Box") greet_btn = gr.Button("Greet") greet_btn.click( fn=greet, inputs=name, outputs=output, api_name="greet", queue=False) // AI Gallery不支持应用将事件放入队列中,必须将queue设置为false。 demo.launch(server_name=POD_IP, root_path=ROOT_PATH) //指定应用启动路径。
  • 启动AI应用 上传AI应用的运行文件“app.py”。在AI应用详情页,选择“应用文件”页签,单击“添加文件”,进入上传文件页面。 运行文件的开发要求请参见准备AI应用运行文件app.py。 上传单个超过5GB的文件时,请使用Gallery CLI工具。CLI工具的获取和使用请参见Gallery CLI配置工具介绍。 文件合集大小不超过50GB。 文件上传完成前,请不要刷新或关闭上传页面,防止意外终止上传任务,导致数据缺失。 如果上传的文件名称和已有文件重名,系统会自动用新文件内容覆盖已有文件内容。 运行文件上传完成后,在AI应用详情页,选择“设置”页签,在“运行资源设置”处单击“启动”,完成订单信息确认后单击“确定”开始构建AI应用。 当AI应用状态变为“运行中”时,表示启动成功。在AI应用详情页的“应用”页签,可以在线体验应用。
  • 创建AI应用 登录AI Gallery,单击右上角“我的Gallery”进入我的Gallery页面。 单击左上方“创建资产”,选择“AI应用”。 在“创建AI应用”页面配置参数。 表1 创建AI应用 参数 是否必填 说明 AI应用英文名称 是 自定义一个易于分辨的AI应用英文名称。 只能以数字、大小字母、下划线组成,且字符长度在3到90之间。 中文名称 是 自定义一个易于分辨的AI应用中文名称。 字符长度在1到30之间。 许可证 否 选择AI应用遵循的许可证。 计算规格选择 是 按需选择计算规格。单击“选择”,在弹窗中选择资源规格并设置运行时长控制,单击“确定”。 在“所在区”选择计算规格所在的区域。默认显示全部区域的计算规格。 选择计算规格不可用的资源会置灰。右侧“配置信息”区域会显示计算规格的详细数据,AI Gallery会基于资产和资源情况分析该任务是否支持设置“商品数量”,用户可以基于业务需要选择任务所需的资源卡数。 在“运行时长控制”选择是否指定运行时长。 不限时长:不限制作业的运行时长,AI Gallery工具链服务部署完成后将一直处于“运行中”。 指定时长:设置作业运行几小时候后停止,当AI Gallery工具链服务运行时长达到指定时长时,系统将会暂停作业。时长设置不能超过计算资源的剩余额度。 说明: 如果选择付费资源,则请确认账号未欠费,且余额高于所选计算规格的收费标准,否则可能会导致AI Gallery工具链服务异常中断。AI Gallery的计算规格的计费说明请参见计算规格说明。 AI应用封面图 否 上传一张AI应用封面图,AI应用创建后,将作为AI应用页签的背景图展示在AI应用列表。建议使用16:9的图片,且大小不超过7MB。 如果未上传图片,AI Gallery会为AI应用自动生成封面。 应用描述 否 输入AI应用的功能介绍,AI应用创建后,将展示在AI应用页签上,方便其他用户了解与使用。 支持0~100个字符。 参数填写完成后,单击“创建”,确认订单信息无误后,单击“确定”跳转至AI应用详情页。 当AI应用的状态变为“待启动”时,表示创建完成。
  • 管理AI应用环境变量 AI应用支持增删改查环境变量,配置好的环境变量可以在运行文件中直接调用。 在AI应用详情页,选择“设置”页签。 在“环境变量管理”处,可以查看、新增、修改、删除环境变量。 最多支持创建100个环境变量。变量名称不可重复,只能由下划线、字母与数字组成且不能以数字开头。 查看环境变量的值:单击,可以查看当前环境变量的值。 新增环境变量:单击“新增”,在编辑环境变量弹窗中配置“变量名称”和“变量值”,单击“确定”完成配置。 修改环境变量:单击,在编辑环境变量弹窗中修改“变量名称”或“变量值”,单击“确定”完成配置。 删除环境变量:单击,确认永久删除环境变量,单击“确定”完成删除。 重启AI应用,使环境变量的新增、修改、删除生效。 当AI应用的状态为“运行中”时,则在“运行资源设置”处,单击“重启”。 当AI应用的状态为非“待启动”时,则环境变量的变更会随应用启动自动生效。
  • 管理AI应用可见范围 创建AI应用时,默认“可见范围”是“私密”,且“仅自己可见”。创建完成后,支持修改可见范围。 “公开”:表示公开资产,所有用户都可以查看该资产。 当选择公开AI应用,系统会自动提交资产公开申请,审核通过之前资产还是私密状态,审核通过后就会变成公开状态。 “私密”:表示仅部分用户可见。 “仅自己可见”:默认状态,表示仅AI应用创建者可见该资产。 “指定用户”:表示AI应用创建者和指定的用户可见该资产。 当指定用户可见时,保存可见用户名单后即可生效。
  • 删除AI应用 当AI应用不再使用时,支持删除,释放AI Gallery仓库的存储空间。 在AI应用详情页,选择“设置”页签。 确认AI应用状态是否为“运行中”。 是,则在“运行资源设置”处,单击“暂停”,停止AI应用再执行下一步。 否,则执行下一步。 在“删除AI应用”处,单击“删除AI应用”按钮,确认后AI应用将被删除。 删除操作不可撤销,执行此操作后该AI应用及相关文件将被永久删除,请谨慎操作。
  • 计费说明 AI Gallery的计费规则如表1所示。 表1 计费说明 规则 说明 话单上报规则 仅当AI Gallery工具链服务创建成功且实际开始运行时,才会上报话单并开始计费,其他状态不上报就不计费,各个服务开始计费的状态如下。 微调大师:“训练中” AI应用:“运行中” 在线推理服务:“运行中” 计费规则 资源整点扣费,按需计费。 计费的最小单位为秒,话单上报后的每一小时对用户账号进行一次扣费。如果使用过程中暂停、终止了消耗资源的AI Gallery工具链服务,即服务不处于计费的状态中,则系统不会立即扣费,依然等到满1小时后再进行扣费,且基于当前1小时内的实际使用时长进行扣费。 实际计费规则 资源按时价扣费,真正计费的价格以实际账单为准。查看账单请参见账单介绍。 用户在创建AI Gallery工具链服务选择付费资源时,可以查看到付费资源的单价,在使用过程中,该资源可能由于平台的折扣优惠变化导致单价发生变化,而云服务是先使用后通过话单进行记录,计费会存在延时,因此,实际价格和折扣优惠可能与当前询价会不完全相同,请以真正计费的价格和优惠为准。 欠费说明 当用户账号余额不足造成扣费失败时,账号将变成欠费状态。 欠费后,按需资源不会立即停止服务,资源进入宽限期。如果在宽限期内仍未支付欠款,那么付费资源(如计算规格、OBS桶)、等都将被冻结,资源进入保留期。保留期的资源不支持任何操作。如果用户在宽限期内充值,则华为云会自动扣取欠费金额(含宽限期内产生的费用) 保留期到期时仍未支付欠款(含宽限期内产生的费用),则付费资源将释放,数据无法恢复。 宽限期和保留期的详细规则请参见宽限期保留期。
  • 管理算力预申请 在“我的算力预申请”页面可以管理已提交预申请,例如编辑预申请信息、撤回预申请等。 编辑预申请信息 当预申请的“审批状态”为“已撤回”和“已拒绝”时,单击操作列的“编辑”进入预购申请页面,修改预购信息后,重新提交申请。 撤回预申请 当预申请的“审批状态”为“待审批”时,单击操作列的“撤销”将预申请变为“已撤销”状态,管理员将无法看到这条申请单,你可以再次编辑预申请信息后再提交。 购买资源 当预申请的“审批状态”为“审批通过”时,单击操作列的“购买”跳转至ModelArts的购买资源池页面(购买专属资源池或创建DevServer),参考购买并访问专属资源池可以购买ModelArts Lite的专属资源池。
  • URI URI格式 DELETE https://{Endpoint}/v3/{project_id}/instances/{instance_id}/kill-op-rule URI样例 https://dds.cn-north-1.myhuaweicloud.com/v3/2900b7b8d03e4619b8db8d43bc6234ee/instances/6390733773d64a748f3a7bc88df22384in02/kill-op-rule 表1 请求参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 从IAM服务获取的用户Token。请参考认证鉴权。 project_id 是 String 租户在某一Region下的项目ID。请参考获取项目ID章节获取项目编号。 instance_id 是 String 实例ID,可以调用“查询实例列表和详情”接口获取。如果未申请实例,可以调用“创建实例”接口创建。
  • 请求消息 参数说明 表2 请求Body参数 参数 是否必选 参数类型 描述 ids 是 Array of strings killOp规则ID列表。 action 是 String 启用/禁用 killOp规则。 enable,启用killOp规则。 disable,禁用killOp规则。 请求示例 { "ids" : [ "7d2f36b4-6edb-4093-8c78-810b30232943" ], "action" : "enable" }
  • URI URI格式 PUT https://{Endpoint}/v3/{project_id}/instances/{instance_id}/kill-op-rule URI样例 https://dds.cn-north-1.myhuaweicloud.com/v3/2900b7b8d03e4619b8db8d43bc6234ee/instances/6390733773d64a748f3a7bc88df22384in02/kill-op-rule 表1 请求参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 从IAM服务获取的用户Token。请参考认证鉴权。 project_id 是 String 租户在某一Region下的项目ID。请参考获取项目ID章节获取项目编号。 instance_id 是 String 实例ID,可以调用“查询实例列表和详情”接口获取。如果未申请实例,可以调用“创建实例”接口创建。
  • URI URI格式 GET https://{Endpoint}/v3/{project_id}/instances/{instance_id}/kill-op-rule URI样例 https://dds.cn-north-1.myhuaweicloud.com/v3/2900b7b8d03e4619b8db8d43bc6234ee/instances/70ddf44609734098a8d333f25a368976in02/kill-op-rule?namespaces=test.ym&plan_summary=COLLSCAN 表1 请求参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 从IAM服务获取的用户Token。请参考认证鉴权。 project_id 是 String 租户在某一Region下的项目ID。请参考获取项目ID章节获取项目编号。 instance_id 是 String 实例ID,可以调用“查询实例列表和详情”接口获取。如果未申请实例,可以调用“创建实例”接口创建。 表2 Query参数 参数 是否必选 参数类型 描述 operation_types 否 String Sql语句操作类型。 insert,表示插入语句。 update,表示更新语句。 query,表示查询语句。 command,表示命令语句。 remove,表示删除语句。 getmore,表示获取更多数据语句。 namespaces 否 String 表命名空间。取值格式:库名或者库名.表名。 可为空,表示不做限制。 单独库名,表示对某个库下的所有集合生效。 库名.表名,表示对具体库下的具体的集合生效。 status 否 String killOp规则状态。 ENABLED,规则生效中。 DISABLED,规则禁用中。 plan_summary 否 String 执行计划。默认值空,表示不做限制。 COLLSCAN SORT_KEY_GENERATOR SKIP LIMIT GEO_NEAR_2DSPHERE GEO_NEAR_2D AGGREGATE OR offset 否 Integer 索引位置,偏移量。 从第一条数据偏移offset条数据后开始查询,默认为0(偏移0条数据,表示从第一条数据开始查询)。取值必须为数字,不能为负数。 limit 否 Integer 查询个数上限值。 取值范围: 1~100。 不传该参数时,默认查询前100条信息。
  • 响应消息 参数说明 表3 响应Body参数 参数 参数类型 说明 rules Array of 表4 列表。 total_count Integer 总数。 表4 KillOpRule参数 参数 参数类型 说明 id String killOp规则ID。 operation_types String Sql语句操作类型。最多支持同时选择6种语句类型。同时选择多种类型时,匹配任意一种类型时规则生效。 insert,表示插入语句。 update,表示更新语句。 query,表示查询语句。 command,表示命令语句。 remove,表示删除语句。 getmore,表示获取更多数据语句。 status String killOp规则状态。 ENABLED,规则生效中。 DISABLED,规则禁用中。 namespaces String 表命名空间。取值格式:库名或者库名.表名。同时配置多组信息时,匹配任意一组信息时规则生效。 目前仅支持配置一组信息 可为空,表示不做限制。 单独库名,表示对某个库下的所有集合生效。 库名.表名,表示对具体库下的具体的集合生效。 client_ips String 客户端连接IP。 只支持IPV4。 可为空,表示不做限制。 最多支持配置5个IP,同时配置多个IP时,匹配任意一个IP时规则生效。 plan_summary String 执行计划。默认值空,表示不做限制。 COLLSCAN SORT_KEY_GENERATOR SKIP LIMIT GEO_NEAR_2DSPHERE GEO_NEAR_2D AGGREGATE OR max_concurrency Integer 最大并发数。 取值:不能为负数,可为空,默认为0,表示不做限制,最小值为1,最大值为100000。 secs_running Integer 单条操作最大运行时长。 取值:不能为负数,可为空,默认为0,表示不做限制。单位:s。最小值为2,最大值为86400。 node_type String 节点类型。 mongos_shard,表示同时在mongos和shard节点生效。 mongos,表示只在集群mongos节点生效。 shard,表示只在集群shard节点生效。 replica,表示只在副本集节点生效。 响应示例 killOp规则列表: { "rules" : [ { "operation_types" : [ "query", "insert" ], "namespaces" : [ "db.collections" ], "client_ips" : [ "172.168.201.144" ], "status" : "ENABLED", "id" : "f6f2cea4-ce40-4d4c-9d2f-61253d215811", "plan_summary" : "COLLSCAN", "max_concurrency" : 0, "secs_running" : 5, "node_type" : "replica" } ], "total_count" : 1 }
  • URI URI格式 POST https://{Endpoint}/v3/{project_id}/instances/{instance_id}/nodes/{node_id}/primary URI样例 https://dds.ap-southeast-1.myhuaweicloud.com/v3/2900b7b8d03e4619b8db8d43bc6234ee/instances/b54ea2b393034728b8582e1c4b5b4c88in02/nodes/639371286e95457394914f734e1ed6feno02/primary 表1 请求参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 从IAM服务获取的用户Token。请参考认证鉴权。 project_id 是 String 租户在某一Region下的项目ID。请参考获取项目ID章节获取项目编号。 instance_id 是 String 实例ID,可以调用“查询实例列表和详情”接口获取。如果未申请实例,可以调用“创建实例”接口创建。 node_id 是 String 备节点ID。
  • URI URI格式 GET https://{Endpoint}/v3/{project_id}/backups/download-file?instance_id={instance_id}&backup_id={backup_id} URI样例 https://dds.cn-north-1.myhuaweicloud.com/v3/97b026aa9cc4417888c14c84a1ad9860/backups/download-file?instance_id=befb1cfe1f96403780396b0c54f85d11in02&backup_id=bd062e1af2d248b3bb4cd3dbb4183888br02 backup_id可以通过查询备份列表获取。
  • 请求消息 参数说明 表1 请求参数 名称 类型 IN 是否必选 描述 X-Auth-Token String header 是 从IAM服务获取的用户Token。请参考认证鉴权。 X-Language String header 否 语言。 project_id String path 是 项目ID。请参考获取项目ID章节获取项目编号。 instance_id String path 是 实例ID,可以调用“查询实例列表和详情”接口获取。如果未申请实例,可以调用“创建实例”接口创建。 backup_id String query 是 备份ID。
  • 响应消息 参数说明 表2 参数说明 名称 参数类型 是否必选 说明 files Array of objects 是 备份包含的文件列表。 详情请参见表3。 bucket String 是 文件所在的桶名。 表3 files字段数据结构说明 名称 参数类型 是否必选 说明 name String 是 文件名。 size Long 是 文件大小,单位:KB。 download_link String 是 文件下载链接。 link_expired_time String 是 下载链接过期时间,格式为“yyyy-mm-ddThh:mm:ssZ”。其中,T指某个时间的开始,Z指时区偏移量,例如UTC时间偏移显示为+0000。 响应示例 { "files": [ { "name": "43e4feaab48f11e89039fa163ebaa7e4br02.xxx", "size": 2803, "download_link":"https://obs.domainname.com/rdsbucket.username.1/xxxxxx", "link_expired_time":"2018-08-016T10:15:14+0000" } ], "bucket": "rdsbucket.bucketname" }
  • 请求消息 参数说明 表2 Query参数 参数 是否必选 参数类型 描述 operation_types 是 Array of strings Sql语句操作类型。最多支持同时选择6种语句类型。同时选择多种类型时,匹配任意一种类型时规则生效。 insert,表示插入语句。 update,表示更新语句。 query,表示查询语句。 command,表示命令语句。 remove,表示删除语句。 getmore,表示获取更多数据语句。 namespaces 否 Array of strings 表命名空间。取值格式:库名或者库名.表名。同时配置多组信息时,匹配任意一组信息时规则生效。 目前仅支持配置一组信息 可为空,表示不做限制。 单独库名,表示对某个库下的所有集合生效。 库名.表名,表示对具体库下的具体的集合生效。 client_ips 否 Array of strings 客户端连接IP。 只支持IPV4。 可为空,表示不做限制。 最多支持配置5个IP,同时配置多个IP时,匹配任意一个IP时规则生效。 plan_summary 否 String 执行计划。默认值空,表示不做限制。 COLLSCAN SORT_KEY_GENERATOR SKIP LIMIT GEO_NEAR_2DSPHERE GEO_NEAR_2D AGGREGATE OR max_concurrency 否 Integer 最大并发数。 取值:不能为负数,可为空,默认为0,表示不做限制,最小值为1,最大值为100000。 max_concurrency和secs_running不可同时为0。 secs_running 否 Integer 单条操作最大运行时长。 可为空,默认为0,表示不做限制。单位:s。最小值为2,最大值为86400。 secs_running和max_concurrency不可同时为0。 node_type 是 String 节点类型。 mongos_shard,表示同时在mongos和shard节点生效。 mongos,表示只在集群mongos节点生效。 shard,表示只在集群shard节点生效。 replica,表示只在副本集节点生效。 请求示例 { "operation_types" : [ "query", "insert" ], "namespaces" : [ "db.collections" ], "client_ips" : [ "172.168.201.144" ], "plan_summary" : "COLLSCAN", "max_concurrency" : 0, "secs_running" : 5, "node_type" : "replica" }
  • URI URI格式 POST https://{Endpoint}/v3/{project_id}/instances/{instance_id}/kill-op-rule URI样例 https://dds.cn-north-1.myhuaweicloud.com/v3/2900b7b8d03e4619b8db8d43bc6234ee/instances/6390733773d64a748f3a7bc88df22384in02/kill-op-rule 表1 请求参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 从IAM服务获取的用户Token。请参考认证鉴权。 project_id 是 String 租户在某一Region下的项目ID。请参考获取项目ID章节获取项目编号。 instance_id 是 String 实例ID,可以调用“查询实例列表和详情”接口获取。如果未申请实例,可以调用“创建实例”接口创建。
  • java mongo客户端 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 参考MongoDB兼容性列表,下载兼容数据库实例版本的mongo jar包。 在弹性云服务器上安装jdk。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。 连接代码 用keytool工具手动生成trustStore: // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String password = System.getenv("EXAMPLE_PASSWORD_ENV"); keytool -import -file /var/chroot/mongodb/CA/ca.crt -keystore /home/Mike/jdk1.8.0_112/jre/lib/security/mongostore -storetype pkcs12 -storepass ${password} “/var/chroot/mongodb/CA/ca.crt”为根证书路径。 “/home/Mike/jdk1.8.0_112/jre/lib/security/mongostore”为生成的trustStore的路径。 SSL开启 import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoCollection; import com.mongodb.MongoClientURI; import com.mongodb.MongoClientOptions; public class MongoDBJDBC { public static void main(String[] args){ try { System.setProperty("javax.net.ssl.trustStore", "/home/Mike/jdk1.8.0_112/jre/lib/security/mongostore"); // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String password = System.getenv("EXAMPLE_PASSWORD_ENV"); System.setProperty("javax.net.ssl.trustStorePassword", password); ServerAddress serverAddress = new ServerAddress("ip", port); List addrs = new ArrayList(); addrs.add(serverAddress); // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV"); MongoCredential credential = MongoCredential.createScramSha1Credential("rwuser", "admin", rwuserPassword.toCharArray()); List credentials = new ArrayList(); credentials.add(credential); MongoClientOptions opts= MongoClientOptions.builder() .sslEnabled(true) .sslInvalidHostNameAllowed(true) .build(); MongoClient mongoClient = new MongoClient(addrs,credentials,opts); MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb"); MongoCollection collection = mongoDatabase.getCollection("testCollection"); Document document = new Document("title", "MongoDB"). append("description", "database"). append("likes", 100). append("by", "Fly"); List documents = new ArrayList(); documents.add(document); collection.insertMany(documents); System.out.println("Connect to database successfully"); } catch (Exception e) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } } } 样例代码: javac -cp .:mongo-java-driver-3.2.0.jar MongoDBJDBC.java java -cp .:mongo-java-driver-3.2.0.jar MongoDBJDBC SSL关闭 import java.util.ArrayList; import java.util.List; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoCollection; import com.mongodb.MongoClientURI; import com.mongodb.MongoClientOptions; public class MongoDBJDBC { public static void main(String[] args){ try { ServerAddress serverAddress = new ServerAddress("ip", port); List addrs = new ArrayList(); addrs.add(serverAddress); // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV"); MongoCredential credential = MongoCredential.createScramSha1Credential("rwuser", "admin", rwuserPassword.toCharArray()); List credentials = new ArrayList(); credentials.add(credential); MongoClient mongoClient = new MongoClient(addrs,credentials); MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb"); MongoCollection collection = mongoDatabase.getCollection("testCollection"); Document document = new Document("title", "MongoDB"). append("description", "database"). append("likes", 100). append("by", "Fly"); List documents = new ArrayList(); documents.add(document); collection.insertMany(documents); System.out.println("Connect to database successfully"); } catch (Exception e) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } } }
  • 规避建议 MongoDB官方建议:在每次删除数据库或集合后,在所有mongos节点上,通过命令db.adminCommand("flushRouterConfig"),刷新路由。 参考链接: https://docs.mongodb.com/manual/reference/method/db.dropDatabase/index.html#replica-set-and-sharded-clusters https://jira.mongodb.org/browse/SERVER-17397 其他规避建议: 对于集群模式,建议开启数据库的分片功能,再对其中的集合进行分片。 对于未开启分片功能的数据库。在删除数据库或集合之后,不建议创建同名的数据库或集合。 如果因业务需求,需要创建同名的数据库或集合,请在删除数据库或集合之后,创建同名的数据库或集合之前,登录到所有的mongos节点上,执行刷新路由表的操作。
  • 使用场景 当未对数据进行分片时,若系统中存在多个dds mongos,通过不同的dds mongos进行数据访问时,可能出现不同dds mongos上本地缓存的路由信息不一致的情况。场景示例: 通过mongos1创建A数据库,未开启分片。写入数据1后,数据1被全部分到shard server1上存储。然后,在mongos2上对数据进行查询。此时,mongos1和mongos2上,均存在缓存的A数据库的路由信息。 通过mongos2执行了A数据库的删除操作。此时,config server和shard server1中的A数据库信息都被删掉。而mongos1无法识别数据1已经被删除。 通过mongos1向A数据库中写入数据2时,由于存在缓存,所以无法识别A数据库已经被删除的场景。参照已经存在的路由信息,数据2被存储到shard server1上。然后,通过mongos2向A数据库中写入数据3时,由于能够识别出A数据库已经被删除,所以会在config server和shard server2中生成新的A数据库的信息。 此时,mongos1和mongos2中缓存的路由信息不一致,关联不同的shard server,且仅能看到部分数据,导致数据异常。 图2 mongos缓存缺陷的场景 客户端通过不同mongos,所查询到的数据不同: mongos1:可以查到数据2,无法查询到数据3。 mongos2:可以查询到数据3,无法查询到数据2。
  • 分片概念 分片是指将一个集合的数据,根据指定的shard key,相对均匀地分布保存在多个shard server上。这种指定了shard key的集合,称为分片集合。但是,如果并未对集合进行分片,则该集合的数据,只会全部存储在某一个shard server上。DDS集群模式允许分片集合和未分片集合在数据库中同时存在。 未分片的集合可以通过命令sh.shardCollection转为分片集合。对集合进行分片之前,需确保集合所属的数据库开启了分片功能,您可以通过命令sh.enableSharding开启分片功能。
共100000条