华为云用户手册

  • RDS for SQL Server 2017 企业版主备实例的登录名权限如何同步到只读实例 主实例创建的登录名(Login Name)会每分钟自动同步到只读实例,需要等待1分钟,同步完成后只读实例上才可以使用创建的登录名(Login Name)或修改密码权限。 在只读实例上可以添加、删除、修改登录名(Login Name)权限,因为主实例创建的登录名(Login Name)会每分钟自动同步到只读实例,所以只读实例上多余登录名(Login Name)以及多余的权限将不会完全删除,可以在只读实例上移除多余的登录名(Login Name)权限。 只读实例上的账号如果在主实例上存在,主实例的密码会同步到只读实例,在只读实例上修改这类登录名(Login Name)的密码将不会生效。 父主题: 数据库权限
  • 场景排查 弹性云服务器能否ping通华为云关系型数据库实例。 如果ping不通,可以查看弹性云服务器和华为云关系型数据库实例是否处于同一个虚拟私有云内,是否使用同一个安全组。 内网连接方式下,弹性云服务器与云数据库RDS实例必须处于同一虚拟私有云内,且只能通过弹性云服务器连接。公网连接方式下,该弹性云服务器可以与目标实例不在同一个虚拟私有云内。 检查连接IP和端口号是否正确。 注意IP和端口号之间使用“逗号”隔开。 检查华为云关系型数据库服务的运行状态是否异常。 查看用户名密码是否正确,尝试重置密码。 尝试重启华为云关系型数据库实例,检查是否改善。
  • RDS跨地域内网能访问吗 跨地域内网默认不能访问,不同区域的云服务之间内网互不相通。您可以通过公网访问,或者通过云连接/VPN打通网络实现内网访问。 弹性公网IP:不能通过内网IP地址访问RDS实例时,可以使用公网访问。 对于RDS for MySQL实例,请参见使用MySQL命令行公网连接实例。 对于RDS for PostgreSQL实例,请参见通过psql命令行公网连接实例。 对于RDS for SQL Server实例,请参见通过公网连接SQL Server实例。 云连接:对于不同区域的VPC,不区分是否同一账号,都可以互连,跨区域连接实现全球云上网络。具体请参见跨区域VPC互连。 虚拟专用网络 VPN:基于Internet使用加密隧道将不同区域的VPC连接起来。具备成本低、配置简单、即开即用等优点。但它的网络质量依赖Internet。具体请参见通过VPN连接VPC。 父主题: 数据库连接
  • 购买实例后如何创建账号和数据库 云数据库RDS实例创建成功后,系统默认同步创建root用户,您可以根据业务需求通过RDS或者DAS创建账号。 RDS for MySQL实例创建账号的约束限制和方法请参见创建帐号。 RDS for MariaDB实例创建账号的约束限制和方法请参见创建帐号。 RDS for PostgreSQL实例创建账号的约束限制和方法请参见创建帐号。 RDS for SQL Server实例创建账号的约束限制和方法请参见创建帐号。 云数据库RDS实例创建成功后,您可以根据业务需求通过RDS或者DAS创建数据库。 RDS for MySQL实例创建数据库的约束限制和方法请参见创建数据库。 RDS for MariaDB实例创建数据库的约束限制和方法请参见创建数据库。 RDS for PostgreSQL实例创建数据库的约束限制和方法请参见创建数据库。 RDS for SQL Server实例创建数据库的约束限制和方法请参见创建数据库。 父主题: 数据库权限
  • 操作步骤 本章使用Windows server 2012 r2搭建域服务器。 创建加域实例的时候,用户的域控服务器不能配置域级别的组策略对象(GPO,Group Policy Object),或者域级别GPO要禁用掉,否则用户创建加域实例将会失败。 如果需要应用域级别的GPO,需要另外购买E CS 搭建新的域控服务器,并且该域控服务器不能设置应用域级别的GPO,然后创建加入该域的实例,将用户侧域控服务器和新的域控服务器建立信任关系即可使用RDS for SQL Server加域实例。 安装AD域控制器。 打开服务管理器,单击“添加角色和功能”。 单击“下一步”,直到“选择服务器角色”页面,勾选“Active Directory域服务”选项,并在弹框中单击“确认添加”。 单击“下一步”,直到“安装”页面,单击“安装”,启动角色安装流程。 成功安装之后,如下图所示会有一个黄色三角提示标,单击“将此服务器提升为域服务器”,进入Active Directory域服务配置向导。 在“部署配置”页面,选择“添加新林”,并设置域名(如:newrds. com)。 单击“下一步”,配置域服务器参数,输入DSRM的密码(非域用户)。 单击“下一步”,直到“安装”页面,单击“安装”,开始安装AD域服务器,安装完成后会自动重启。 修改网络接口中的DNS配置。将主DNS服务器设置为自己的IP地址。(如:192.168.0.133) 创建并添加域账号。 打开“Active Directory用户和计算机”,右键单击“新建”,选择“用户”。输入用户名称,单击“下一步”。 输入“名称”、“姓氏”和“用户登录名”。(如:luna@newrds.com) 填写域账号密码和确认密码。取消所有勾选框的检查(第一次登录时不要更改密码)。 添加成功后如下图所示。可以将域账号添加到用户组中进行权限控制。 对于需要登录RDS实例的域账号,请将用户添加至AD Admin组中。 将RDS云实例加入域中。 仅需要在正常实例创建页面,单击“现在配置”。单击“立即购买”后,实例会去进行加域操作,创建成功后即可使用。 表1 AD域参数配置 参数 说明 目录地址 支持Active Directory域服务的弹性云服务器所在IP地址。 示例:192.168.x.x。 说明: 请确认该IP地址可以成功连接云数据库RDS实例。如遇到网络问题请联系客服人员。 域名 一个完全限定域名,示例:DBStest.com,域名有如下限制: 该域名必须和用户设置的华为云弹性云服务器的域名保持一致。 域名长度不超过48个字符。 域名只能包含:字母、数字、中划线和英文句点。 域名必须包含扩展名,且扩展名长度大于等于2个字符,不能包含数字,例如.com。 域账号名称 建议设置为域管理员账号。 域账号密码 您所设置的域账号密码。 请妥善管理您的密码,因为系统将无法获取您的密码信息。
  • 解决方法 使用root用户登录数据库,并执行如下授权语句,即可迁移成功。 grant USAGE on schema public to root; grant SELECT,REFEREN CES ,TRIGGER on all tables in schema public to root; grant EXECUTE on ALL FUNCTIONS IN SCHEMA public to root; 迁移完成后再回收权限。 revoke USAGE schema public from root; revoke SELECT,REFERENCES,TRIGGER on all tables in schema public from root; revoke EXECUTE on ALL FUNCTIONS IN SCHEMA public from root; root用户执行授权命令需要内核版本为支持root提权的版本,支持root提权版本情况见root用户权限说明。
  • 操作步骤 将需要访问实例的IP地址或者IP段加入华为云关系型数据库的公网白名单。 使用MySQL客户端连接RDS for MySQL实例。 mysql -h host_name -P port -u username -p 出现如下提示时,输入数据库账号对应的密码: Enter password: 使用root用户连接数据库实例,示例如下: mysql -h 192.168.0.1 -P 3306 -u root -p Enter password: 查询进程信息。 show processlist 查询结果如图1所示,进程中Info字段为show processlist的行对应的Host,就是您的出口IP地址。 图1 IP查询结果 如果已经开启SQL审计日志,可通过审计日志查看历史的连接来源。 如果以前没有开启,则无法查看历史记录,SQL审计日志从开启后才会记录。
  • RDS实例内能运行多少个数据库 云数据库RDS服务没有强制限制在一个RDS实例内能运行多少个数据库,这取决于数据库引擎自身设置。 如果CPU、内存和磁盘大小均满足的情况下,实例允许数据库数量没有限制。数据库中表的数量会影响备份速度。表数量超过50万,备份将会失败。 RDS for MySQL创建的数据库、表数量没有限制。这取决于MySQL自身,详情请查看MySQL官方文档。 RDS for MariaDB创建的数据库、表数量没有限制。但是受限于磁盘大小、文件系统特性等因素,综合考虑实例的性能和稳定性,建议数据库中表的总数不超过2000张。 RDS for PostgreSQL可创建无限个数据库、无限个数据库账号。 RDS for SQL Server可创建100个数据库、无限个数据库账号。 父主题: 产品咨询
  • 删除实例后为什么不能立即删除关联的安全组 创建实例的时候,必须选择安全组,如果不创建安全组或没有可选的安全组,云数据库RDS服务默认为您分配安全组资源。 当删除实例后,默认会将实例加入回收站管理,回收站默认保留7天。可通过设置回收站策略修改回收站保留天数。 删除后的实例不会立即从安全组中移除,需要等回收站中保留的实例删除后,才会将关联信息从安全组中移除。删除安全组之前,必须确保安全组中没有关联任何实例,查询安全组中关联的实例,请参见如何查看安全组关联了哪些实例。 父主题: 网络安全
  • 方案架构 中软国际 数据治理 专业服务解决方案,承载帮助企业实现数字化转型能,具备“方法论+数据平台+数据应用+行业场景”所需的全套能力体系,从咨询规划设计、交付实施落地、定制开发,到后期的数据运维运营,为客户量身定制一站式数据治理服务解决方案;帮助企业从多角度、多层次、多粒度挖掘数据价值,实现数据驱动运营,完成数字化转型。 数据治理专业服务解决方案,以数据治理为基础,数据智能为动力,驱动企业加速发展,主要由5个核心服务组成: 数据治理咨询服务:帮助客户了解什么是数据治理,数据治理如何实施,是否需要做数据治理,同行企业如何做数据治理,能为企业带来哪些价值。 数据治理实施服务:帮助企业将结构化数据、非结构化数据,通过数据集成服务采集到数仓、 数据湖 里,通过数据治理平台完成数治理,最后将数据以API形式开放。 定制开发服务:帮助企业定制开发报表、大屏、应用。 数据运维服务:帮助企业数据运维。包括日常的数据作业监控管理、云上资源环境监控、数据日常维护、日常告警处理等。 数据运营服务:帮助企业数据资产运营。包括数据发布审批、新数据的接入、新数据API接口开放需求处理,数据需求管理等。 图1 业务架构图 方案采用云服务的方式部署交付,整体部署架构如下: 图2 部署架构图 架构描述: 本架构基于某客户数据治理项目实践输出,作为最佳实践案例,不代表数据治理的完整集成架构。客户作为零售服务企业,零售数据来源多个POS平台以及APP和小程序,平台应用由不同的软件厂商提供,导致数据标准不统一,和银行方、渠道方对账错误频发,且无法追溯。本方案架构旨在梳理并打通客户数据的汇聚、数据存储、数据治理、数据分类、数据推送等通路,构建数据质量管理体系,实现专题数据自动对账、自动入账、 数据可视化 。其中数据集成,主要通过 数据复制服务 DRS、 云数据迁移 CDM,将数据采集,根据数据类型分类,其中事务数据存入云数据库RDS中,分析型数据存入数仓DWS中。在 数据治理中心 DataArts Studio中进行数据治理作业,最后通过应用与 数据集成平台 ROMAConnect开放接口,提供数据给第三方综合结算系统。
  • 方案优势 依托华为云大数据产品,结合中软国际数据治理专业服务能力,为企业数字化转型奠定数据基础。该方案具备以下几个优势: 一站式数据治理专业服务解决方案 为客户提供咨询服务、交付实施、定制开发、数据运维运营一站式数据治理服务。 安全可靠云大数据产品 云上大数据产品,可以降低企业的运营成本,提升企业的运维效率,提高数据的安全性,减少企业的空间占用。 深耕多年行业经验案例 在政府、航空、能源行业,深耕多年,有着丰富的行业经验 和 N个标杆级成功案例,包括智慧城市、机场、电网等。
  • 应用场景 中软国际数据治理专业服务解决方案,旨在基于 华为云计算 底座,通过 DataArts Studio 等大数据相关产品,为企业提供数据治理服务。 在数字政府行业,帮助政府建设数据专区,通过数据开发利用,实现数据分析决策。丰富的数据应用场景,让数据在应用中发挥作用,提升政府行政执法效率;激活政府数据资产,让数据在决策中呈现价值,帮助政府了解营商数据,更好的招商引资。 在数字航空行业,帮助企业构建数据治理标准体系,构建统一的数仓,推动航班运行控制智能决策。通过一站式的大数据平台和数据治理服务为客户搭建数据底座,并以数据服务、指标、算法、报表、可视化等多种方式,对业务系统进行数据赋能。 在数字能源行业,帮助企业打通数据壁垒,建设统一的数据标准质量,将各类数据指标通过大屏展示。通过数据使能构建,各类报表大屏定制化开发,帮助企业领导决策。
  • 数据治理实施 本实施方案基于某客户数据治理项目实践输出,作为最佳实践案例,不代表数据治理实施完整方案。 数据治理方案设计 数据指标分析与设计 数据整合流程设计 数据治理实施服务流程 服务阶段 里程碑说明 启动阶段 1、组织项目开工会,组建项目团队; 2、与相关干系人沟通,明确项目目标与验收标准,基线化文档; 3、制定项目组织架构与运作机制; 4、制定SOW与项目计划。 方案阶段 1、获取数据治理需求,识别遗漏和不完整需求,定义需求类型; 2、通过数据指标、数据调研、数据分析、功能匹配等方法进行需求分析; 3、对需求已明确的数据指标要求展开方案设计。目的是综合运用各种数据治理方法和手段,依据设计原则及质量安全设计确定数治理架构、技术架构、数据流架构、云上部署架构等; 4、在方案选择建议的基础上,采用选定的设计方法和技术,基于需求规格进行概要设计,其中必须包含数仓分层设计、数据模型设计、数据采集设计、数据标准设计等,输出设计方案,必要时进行同行评审,经确认完成后基线并文档化。 准备阶段 1、按照方案设计,协助客户购买相关云上大数据产品。 2、协助可以配置大数据产品网络、安全等。 实施阶段 1、在项目方案的基础上,实施工程师针对需求,采用选定的设计方法和技术及相关技术、安全等规范,进行详细设计; 2、实施工程师按照数据开发规范、安全规范进行数据治理及配套文档; 3、按定义的工作任务,对治理作业实施单元测试,并完成缺陷记录和修复,达到质量要求后结束; 4、组织QC组,对治理作业及配套文档进行评审; 5、根据项目计划制定项目测试计划,包括测试方案、时间计划、测试轮次等等,输出项目测试计划; 6、依据需求规格、项目方案,必要时参考数据治理方案设计,设计集成验证场景与用例。 验证阶段 1、组织用户及相关参与人员对平台、数据进行验证,确认平台、数据是否符合业务要求; 2、登记并验证缺陷修复情况; 3、输出验证测试报告。 试运行阶段 1、组织制定试运行计划,并于业务相关方沟通确认; 2、组织试运行; 3、编制试运行报告。 关闭阶段 1、试运行结束后创建项目满意度调查问卷,项目经理收集调查名单后组织完成满意度调查; 2、项目经理负责按照项目总结报告模板要求完成项目总结报告编制; 3、项目经理召集项目关闭会议,将项目数据、文档等归档,并释放资源,如果涉及资源采购,则此活动完成人员退场;对于涉及区域的项目,区域IT代表.负责项目经验共享,收集项目文档及总结报告并在区域内共享; 4、根据项目相关活动及交付情况,进行完成情况审视; 5、发布项目关闭信息。
  • 定制开发服务 定制开发服务分类 大屏、报表定制设计开发:根据客户报表需求,设计报表,并定制开发。 移动端、PC端应用设计开发:按照第三方对账系统要求,开放接口,并提供数据对接测试。 定制开发服务流程 服务阶段 里程碑说明 启动阶段 1、组织项目开工会,组建项目团队; 2、与相关干系人沟通,明确项目目标与验收标准,基线化文档; 3、制定项目组织架构与运作机制; 4、制定SOW与项目计划。 方案阶段 1、获取业务需求,识别遗漏和不完整需求,定义需求类型; 2、通过原型、业务调研、差异分析、功能匹配等方法进行需求分析; 3、对需求已明确的新开发系统展开架构设计。目的是综合运用各种设计方法和手段,依据设计原则及质量安全设计确定产品应用架构、技术架构、数据架构、集成架构、物理部署架构,合理分配被开发系统的内外部需求到各子系统或模块; 4、在方案选择建议的基础上,采用选定的设计方法和技术,基于需求规格进行概要设计,其中必须包含数据模型设计,输出项目方案,必要时进行同行评审,经确认完成后基线并文档化。 实施阶段 1、在项目方案的基础上,实施工程师针对需求,采用选定的设计方法和技术及相关技术、安全等规范,进行详细设计; 2、实施工程师按照开发规范、安全规范编写代码及配套文档; 3、按定义的工作任务,对开发单元、软件包配置和构建实施单元测试,并完成缺陷记录和修复,达到质量要求后结束; 4、组织QC组,对代码及配套文档、实施指南、用户手册、运维手册进行同行评审; 5、根据项目计划制定项目测试计划,包括测试方案、时间计划、测试轮次等等,输出项目测试计划; 6、依据需求规格、项目方案,必要时参考产品架构设计,设计集成验证场景与用例。 验证阶段 1、组织用户及相关参与人员对应用进行验证,确认应用是否符合业务要求; 2、登记并验证缺陷修复情况; 3、输出验证测试报告。 部署阶段 1、协助客户购买云上计算、存储、网络等资源 2、在云上部署应用 试运行阶段 1、组织制定试运行计划,并于业务相关方沟通确认; 2、组织试运行; 3、编制试运行报告。 关闭阶段 1、试运行结束后创建项目满意度调查问卷,项目经理收集调查名单后组织完成满意度调查; 2、项目经理负责按照项目总结报告模板要求完成项目总结报告编制; 3、项目经理召集项目关闭会议,将项目数据、文档等归档,并释放资源,如果涉及资源采购,则此活动完成人员退场;对于涉及区域的项目,区域IT代表.负责项目经验共享,收集项目文档及总结报告并在区域内共享; 4、根据项目相关活动及交付情况,进行完成情况审视; 5、发布项目关闭信息。
  • 数据治理诊断 企业现状调研 了解客户的核心业务流程、需求、挑战和目标。分析客户的核心业务流程和组织结构,理解客户的业务模式。识别业务中的关键挑战和机会,为业务优化提供方向。明确业务目标和战略方向,为业务增长提供支持。采用访谈交流、现场观察、市场分析和竞争对手研究等多种方法进行业务调研。 执行步骤如下: 调查问卷。要求企业按调查问卷要求填写信息。 高层访谈。对企业高层CEO、CIO、CTO面对面访谈,了解高层对数据的诉求。 业务部门访谈。对企业各个业务部门主管面对面访谈,了解业务部门对数据诉求。 调研数据汇总。将问卷信息、访谈信息汇总,提炼、总结,编写诊断报告。 调研总结会议。展示调研内容、过程、结果。 数据现状调研 数据调研,目的在于了解客户当前数据的质量、一致性、可信度和可用性。 了解客户整体数据资产及其关系:通过调研,可以深入探究客户不同业务系统间的数据资产,并揭示数据之间的相关性和相互影响。 识别并改进数据质量问题:调研过程能够识别客户的数据质量问题,包括数据准确性、完整性、时效性等,并针对这些问题提出具体的改进措施。 评估数据治理成熟度:通过对组织的数据治理能力进行深入评估,确保公司的数据管理能力符合不断复杂化和快速变化的市场需求,以及相关的法律法规要求。 明确数据治理的目标与策略:通过数据调研,帮助确定客户的数据治理目标和策略,涵盖数据采集、处理、存储、分析等各个方面的具体需求和目标。 调研的方式涵盖访谈交流、数据探查、实地考察、集体研讨等多种方法。 执行步骤如下: 业务系统识别:根据数据指标,识别需要调研哪些业务系统。 业务部门访谈:根据数据指标,调研业务系统数据情况,包括数据位置、数据库、数据质量情况等。 制定数据标准:根据调研情况,结合公司业务,制定数据质量标准。 数据库表整理 通过对客户业务系统数据库表整理,了解客户的数据资产,知道有哪些数据库、表、字段。分析数据库表的结构、属性、关系等,可以了解数据的完整性、一致性。初步评估数据的质量,识别缺失和错误的数据。确定最佳的数据库整合和数据迁移方案,以实现数据的同源共享。
  • 华为云数据治理平台 数据治理总体架构 数据治理中心 DataArtsStudio https://support.huaweicloud.com/dataartsstudio/index.html 数据湖探索 DLI https://support.huaweicloud.com/dli/index.html 数据仓库 服务DWS https://support.huaweicloud.com/dws/index.html 数据复制服务 DRS https://support.huaweicloud.com/function-drs/index.html 云数据迁移 CDM https://support.huaweicloud.com/cdm/ 应用与数据集成平台 ROMAConnect https://support.huaweicloud.com/roma/index.html 父主题: 实施步骤
  • 资源和成本规划 以某行业客户为例,客户的需求为构建全公司统一的数据平台,在数据平台中对数据进行治理,并支撑上层的数据应用。 根据客户现有数据量,以及考虑到增量的数据集成方式、数据入湖入仓的膨胀系数、以及客户对平台性能的要求,设计了以下的资源与成本清单。实际收费应以账单为准: 资源与成本清单 表1 云服务清单 云资源 规格 数量 数据治理中心(DataArts Studio) 企业版,cdm.medium,4核 8 GB,作业并发数8,作业节点调度次数5,000次/天,技术资产数量5,000,数据模型数量100 1 云数据迁移(CDM: Cloud Data Migration) cdm.xlarge,16核 32GB,并发作业数32 1 数据复制服务(DRS: Data Replication Service) / 1 数据湖探索(DLI: Data Lake Insight) 通用队列,512CUs 1 数据仓库服务(DWS: Data Warehouse Service) X86 | dwsx3.32U128G.32DPU | 32 vCPUs | 128 GB 1 应用与数据集成平台 ROMAConnect X86 2RCU可支持API转发 2000 TPS,或可支持托管API数量 200 个 1 表2 专业服务清单 类别 报价项 量纲 数据治理咨询服务 数据治理诊断 30人天 数据治理实施服务 数据集成 20人天 数据架构 15人天 数据开发 30人天 数据质量 15人天 数据资产 10人天 数据服务 10人天 数据安全 5人天 定制开发服务 报表设计开发(定制) 50人天 PC端应用设计开发 15人天 合计: 200人天
  • 订阅顺序消息 只需要在订阅普通消息的代码基础上增加orderly=True,参考如下示例代码(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 import time from rocketmq.client import PushConsumer, ConsumeStatus def callback(msg): print(msg.id, msg.body, msg.get_property('property')) return ConsumeStatus.CONSUME_SUCCESS def start_consume_message(): consumer = PushConsumer('consumer_group', orderly=True) consumer.set_name_server_address('192.168.0.1:8100') consumer.subscribe('TopicTest', callback) print('start consume message') consumer.start() while True: time.sleep(3600) if __name__ == '__main__': start_consume_message() 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 consumer_group:表示消费组名称。 192.168.0.1:8100:表示实例连接地址和端口。 TopicTest:表示Topic名称。
  • 发送顺序消息 参考如下示例代码(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 from rocketmq.client import Producer, Message topic = 'TopicTest' gid = 'test' name_srv = '192.168.0.1:8100' def create_message(): msg = Message(topic) msg.set_keys('XXX') msg.set_tags('XXX') msg.set_property('property', 'test') msg.set_body('message body') return msg def send_orderly_with_sharding_key(): producer = Producer(gid, True) producer.set_name_server_address(name_srv) producer.start() msg = create_message() ret = producer.send_orderly_with_sharding_key(msg, 'orderId') print('send message status: ' + str(ret.status) + ' msgId: ' + ret.msg_id) producer.shutdown() if __name__ == '__main__': send_orderly_with_sharding_key()
  • 发送事务消息 参考如下示例代码(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 import time from rocketmq.client import Message, TransactionMQProducer, TransactionStatus topic = 'TopicTest' gid = 'test' name_srv = '192.168.0.1:8100' def create_message(): msg = Message(topic) msg.set_keys('XXX') msg.set_tags('XXX') msg.set_property('property', 'test') msg.set_body('message body') return msg def check_callback(msg): print('check: ' + msg.body.decode('utf-8')) return TransactionStatus.COMMIT def local_execute(msg, user_args): print('local: ' + msg.body.decode('utf-8')) return TransactionStatus.UNKNOWN def send_transaction_message(count): producer = TransactionMQProducer(gid, check_callback) producer.set_name_server_address(name_srv) producer.start() for n in range(count): msg = create_message() ret = producer.send_message_in_transaction(msg, local_execute, None) print('send message status: ' + str(ret.status) + ' msgId: ' + ret.msg_id) print('send transaction message done') while True: time.sleep(3600) if __name__ == '__main__': send_transaction_message(10)
  • 订阅普通消息 参考如下示例代码(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 import time from rocketmq.client import PushConsumer, ConsumeStatus def callback(msg): print(msg.id, msg.body, msg.get_property('property')) return ConsumeStatus.CONSUME_SUCCESS def start_consume_message(): consumer = PushConsumer('consumer_group') consumer.set_name_server_address('192.168.0.1:8100') consumer.subscribe('TopicTest', callback) print('start consume message') consumer.start() while True: time.sleep(3600) if __name__ == '__main__': start_consume_message() 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 consumer_group:表示消费组名称。 192.168.0.1:8100:表示实例连接地址和端口。 TopicTest:表示Topic名称。
  • 同步发送 同步发送是指消息发送方发出一条消息到服务端,服务端接收并处理消息,然后返回响应给发送方,发送方收到响应后才会发送下一条消息的通讯方式。 参考如下示例代码(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 from rocketmq.client import Producer, Message topic = 'TopicTest' gid = 'test' name_srv = '192.168.0.1:8100' def create_message(): msg = Message(topic) msg.set_keys('XXX') msg.set_tags('XXX') msg.set_property('property', 'test') msg.set_body('message body') return msg def send_message_sync(): producer = Producer(gid) producer.set_name_server_address(name_srv) producer.start() msg = create_message() ret = producer.send_sync(msg) print('send message status: ' + str(ret.status) + ' msgId: ' + ret.msg_id) producer.shutdown() if __name__ == '__main__': send_message_sync() 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 topic:表示Topic名称。 gid:表示生产者组名称,请根据业务实际情况输入生产者组名称。 name_srv:表示实例连接地址和端口。
  • 消费者增加用户认证信息 无论是普通消息、顺序消息、定时消息,还是事务消息,都参考如下代码。以下加粗内容需要替换为实例自有信息,请根据实际情况替换。 import time from rocketmq.client import PushConsumer, ConsumeStatus def callback(msg): print(msg.id, msg.body, msg.get_property('property')) return ConsumeStatus.CONSUME_SUCCESS def start_consume_message(): consumer = PushConsumer('consumer_group') consumer.set_name_server_address('192.168.0.1:8100') consumer.set_session_credentials("access_key", "secret_key", "") consumer.subscribe('TopicTest', callback) print('start consume message') consumer.start() while True: time.sleep(3600) if __name__ == '__main__': start_consume_message() 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 consumer_group:表示消费组名称。 192.168.0.1:8100:表示实例连接地址和端口。 access_key:表示用户名。创建用户的步骤,请参见创建用户。 secret_key:表示用户的密钥。 TopicTest:表示Topic名称。
  • 生产者增加用户认证信息 普通消息、顺序消息和定时消息,参考如下代码。以下加粗内容需要替换为实例自有信息,请根据实际情况替换。 from rocketmq.client import Producer, Message topic = 'TopicTest' gid = 'test' name_srv = '192.168.0.1:8100' def create_message(): msg = Message(topic) msg.set_keys('XXX') msg.set_tags('XXX') msg.set_property('property', 'test') msg.set_body('message body') return msg def send_message_sync(): producer = Producer(gid) producer.set_name_server_address(name_srv) producer.set_session_credentials("access_key", "secret_key", "") producer.start() msg = create_message() ret = producer.send_sync(msg) print('send message status: ' + str(ret.status) + ' msgId: ' + ret.msg_id) producer.shutdown() if __name__ == '__main__': send_message_sync() 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 topic:表示Topic名称。 gid:表示生产者组名称,请根据业务实际情况输入生产者组名称。 name_srv:表示实例连接地址和端口。 access_key:表示用户名。创建用户的步骤,请参见创建用户。 secret_key:表示用户的密钥。 事务消息,参考如下代码。以下加粗内容需要替换为实例自有信息,请根据实际情况替换。 import time from rocketmq.client import Message, TransactionMQProducer, TransactionStatus topic = 'TopicTest' gid = 'test' name_srv = '192.168.0.1:8100' def create_message(): msg = Message(topic) msg.set_keys('XXX') msg.set_tags('XXX') msg.set_property('property', 'test') msg.set_body('message body') return msg def check_callback(msg): print('check: ' + msg.body.decode('utf-8')) return TransactionStatus.COMMIT def local_execute(msg, user_args): print('local: ' + msg.body.decode('utf-8')) return TransactionStatus.UNKNOWN def send_transaction_message(count): producer = TransactionMQProducer(gid, check_callback) producer.set_name_server_address(name_srv) producer.set_session_credentials("access_key", "secret_key", "") producer.start() for n in range(count): msg = create_message() ret = producer.send_message_in_transaction(msg, local_execute, None) print('send message status: ' + str(ret.status) + ' msgId: ' + ret.msg_id) print('send transaction message done') while True: time.sleep(3600) if __name__ == '__main__': send_transaction_message(10) 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 topic:表示Topic名称。 gid:表示生产者组名称,请根据业务实际情况输入生产者组名称。 name_srv:表示实例连接地址和端口。 access_key:表示用户名。创建用户的步骤,请参见创建用户。 secret_key:表示用户的密钥。
  • 发送定时消息 发送定时消息的示例代码如下(以下加粗内容需要替换为实例自有信息,请根据实际情况替换)。 import time from rocketmq.client import Producer, Message topic = 'TopicTest' gid = 'test' name_srv = '192.168.0.1:8100' def create_message(): msg = Message(topic) msg.set_keys('XXX') msg.set_tags('XXX') msg.set_property('property', 'test') msg.set_body('message body') return msg def send_delay_message(): producer = Producer(gid) producer.set_name_server_address(name_srv) producer.start() msg = create_message() msg.set_property('__STARTDELIVERTIME', str(int(round((time.time() + 3) * 1000)))) ret = producer.send_sync(msg) print('send message status: ' + str(ret.status) + ' msgId: ' + ret.msg_id) producer.shutdown() if __name__ == '__main__': send_delay_message() 示例代码中的参数说明如下,请参考收集连接信息获取参数值。 topic:表示Topic名称。 gid:表示生产者组名称,请根据业务实际情况输入生产者组名称。 name_srv:表示实例连接地址和端口。
  • 注意事项 定时消息的最大延迟时间为1年,延迟超过1年的消息将会发送失败。 定时消息的定时时间如果被设置成当前时间戳之前的某个时刻,消息将立刻投递给消费者。 在理想情况下,定时消息设定的时间与实际发送时间的误差在0.1s以内。但在定时消息投递压力过大时,会触发定时消息投递流控机制,精度会变差。 在0.1s的精度内,不保证消息投递的顺序性。即如果两条定时消息的定时时间差距小于0.1s,他们投递的顺序与他们发送的顺序无法确保一致。 无法确保定时消息仅投递一次,定时消息可能会重复投递。 定时消息的定时时间是服务端开始向消费端投递的时间。如果消费者当前有消息堆积,那么定时消息会排在堆积消息后面,将不能严格按照配置的时间进行投递。 由于客户端和服务端可能存在时间差,消息的实际投递时间与客户端设置的投递时间之间可能存在偏差,以服务端时间为准。 设置定时消息的投递时间后,依然受消息老化时间限制,默认消息老化时间为2天。例如,设置定时消息5天后才能被消费,如果第5天后一直没被消费,那么这条消息将在第7天被删除。 定时消息将占用普通消息约3倍的存储空间,大量使用定时消息时需要注意存储空间占用。
  • 约束与限制 本章主要为您介绍分布式消息服务RocketMQ版使用过程中的一些限制。 表1 分布式消息服务RocketMQ版使用限制明细 限制项 约束与限制 创建Topic的数量 Topic的数量根据实例规格确定,不支持修改。 当Topic的数量达到上限后,您无法继续创建Topic。 创建消费组的数量 消费组的数量根据实例规格确定,不支持修改。 当消费组的数量达到上限后,您无法继续创建消费组。 消息大小 生产消息的最大长度为4MB,其中,消息属性大小均不能超过16KB。消息大小不支持修改。 消息大小超过限制会导致消息发送失败。 消息存储时长 消息默认保留时间为48小时,支持修改,最大存储时长为720小时,超过保留时间会被自动删除。 消费位点重置 支持重置消费2天内任意时间点的消息。 定时消息的延时时长 最大延时时长为1年,不支持修改。 支持1年内任意时间的定时消息。 Request-Reply机制 不支持此机制 修改配置参数 不支持调用开源接口修改配置参数
  • 前提条件 在执行本章操作前,请确认您注册华为帐号并完成实名认证。 国际站用户在以下情况下需要进行帐号实名认证。 根据中国大陆相关法规要求,购买和使用中国大陆节点云产品服务的用户需要实名认证。 购买云产品服务时,如果您选择的区域包含中国大陆,您需要实名认证。 您需要先购买流量包或者帐号余额超过999元才能开通CDN服务,请确保您的账户中有足够的余额。您可以在费用中心页面,对账户进行充值。 V0、V1的用户默认开通“流量计费”,如需开通“峰值带宽计费”,请提交工单申请。
  • 本地测试加速域名(可选) 添加加速域名后,为保证顺利切换不影响业务,建议先做测试再切换DNS解析。 ping添加域名生成的CNAME,得到ping的IP地址。 示例:添加的加速域名为www.example.com,生成的CNAME地址为www.example.com.c.cdnhwc1.com,ping www.example.com.c.cdnhwc1.com得到IP地址为10.0.0.0。 在本地电脑绑定hosts文件测试。 示例:如果您使用windows系统,在C:\Windows\System32\drivers\etc\hosts文件中添加加速域名www.example.com和IP地址10.0.0.0的绑定关系。如图1所示。 图1 测试加速域名 在本地访问加速域名测试业务,如果测试符合预期,说明配置正确。 测试成功后,在DNS域名提供商修改解析记录,配置CDN提供的CNAME。详情请参见配置CNAME。
  • 注意事项 为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考DRS预检查项一览表。除了预检查项目之外,您还需要注意的事情如表4所示 表4 注意事项 类型名称 使用和操作限制 源数据库限制 源库不支持阿里云RDS的只读副本。 如果源数据库为自建库,并且安装了Percona Server for MySQL 5.6.x或Percona Server for MySQL 5.7.x时,内存管理器必须使用Jemalloc库,以避免因系统表频繁查询带来的内存回收不及时,并最终导致数据库Out of Memory问题。 源数据库不支持mysql binlog dump命令。 源数据库不支持reset master或reset master to命令,可能会导致DRS任务失败或者数据不一致。 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。 不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。 由于MySQL本身限制,若源库的一次性事件(EVENT)设定的触发时间在迁移开始前,该事件(EVENT)不会迁移到目标库。 使用限制 通用: 整个迁移过程中,不建议修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。 整个迁移过程中,不允许对正在迁移中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。 整个迁移过程中,不允许源库写入binlog格式为statement的数据。 整个迁移过程中,不允许源库执行清除binlog的操作。 整个迁移过程中,不允许在源库创建库名为ib_logfile的数据库。 整个迁移过程中,不允许修改目标数据库主节点的浮动IP到只读节点。如果进行了修改,数据将会写入到只读节点,导致目标数据库和源数据库数据不一致。 全量迁移阶段: 任务启动和全量数据迁移阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。 增量迁移阶段: 选择表级对象迁移时,增量迁移过程中不支持对表进行重命名操作。 增量迁移阶段,不支持源数据库进行恢复到某个备份点的操作(PITR)。 增量迁移阶段,支持断点续传功能,在主机系统崩溃的情况下,对于非事务性的无主键的表可能会出现重复插入数据的情况。 增量迁移阶段,支持DDL语句。 结束任务: 任务正常结束: 在结束迁移任务时,将进行所选事件(EVENT)和触发器(TRIGGER)的迁移。请确保任务结束前,不要断开源和目标数据库的网络连通性,并在结束任务时关注迁移日志上报的状态,达到数据库完整迁移效果。 任务强制结束: 强制结束将直接释放DRS资源,不会进行触发器、事件的迁移,请参考手工迁移触发器、事件。如果需要DRS进行触发器、事件迁移,请先修复DRS任务,待任务状态正常后,再正常结束任务。 常见故障排查: 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。 其他限制 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建迁移任务。 多对一场景下,创建迁移任务时,目标库读写设置需要跟已有任务设置为一致。 由于无主键表缺乏行的唯一性标志,网络不稳定时涉及少量重试,表数据存在少量不一致的可能性。 对于表中的物理生成列,如果列是根据一个时间类型生成的,会存在此列数据不一致的可能性。 不支持目标数据库恢复到全量迁移时间段范围内的PITR操作。 源库和目标库为RDS for MySQL实例时,不支持带有TDE特性并建立具有加密功能表。 如果源库MySQL不支持TLS1.2协议,或者为版本较低的自建库(低于5.6.46或在5.7.0-5.7.28之间),需提交运维申请才能使用SSL测试连接。 在创建DRS任务之前,如果源或者目标数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。 迁移任务目标数据库可以设置“只读”和“读写”。 只读:目标数据库实例将转化为只读、不可写入的状态,迁移任务结束后恢复可读写状态,此选项可有效的确保数据迁移的完整性和成功率,推荐此选项。 读写:目标数据库可以读写,但需要避免操作或接入应用后会更改迁移中的数据(注意:无业务的程序常常也有微量的数据操作),进而形成数据冲突、任务故障、且无法修复续传,充分了解要点后可选择此选项。
共100000条