华为云用户手册

  • RocketMQ元数据迁移概述 RocketMQ元数据包括Topic和消费组信息,但不包括Topic和消费组生产消息、消费消息的记录。当您需要使用相同的Topic和消费组时,可通过元数据迁移操作将已有的Topic和消费组信息迁移到指定的RocketMQ实例中,无需再手动创建。 RocketMQ业务迁移主要涉及以下场景: 迁移其他RocketMQ的元数据到华为云上RocketMQ实例。其他RocketMQ元数据包括如下内容: 其他厂商的RocketMQ元数据 自建RocketMQ实例的元数据 华为云上另一个RocketMQ实例的元数据 迁移RabbitMQ的元数据到华为云上RocketMQ实例。 父主题: 迁移元数据
  • 测试结果参考 表4 测试结果参考 性能指标 rocketmq.4u8g.cluster.small rocketmq.4u8g.cluster rocketmq.8u16g.cluster rocketmq.12u24g.cluster 消息生产速率 56532 个/秒 62443 个/秒 92476 个/秒 138369 个/秒 消息消费速率 53793 个/秒 60106 个/秒 90563 个/秒 116154 个/秒 网络入流量 91 MB/s 99.64 MB/s 143.64 MB/s 238.19 MB/s 网络出流量 223 MB/s 314 MB/s 451 MB/s 674 MB/s CPU使用率 86% 90% 81% 81% CPU核均负载 2.77 3.03 1.73 1.73 内存使用率 63% 55% 49% 47%
  • 测试命令 生产命令: sh producer.sh -n "${连接地址}" -t ${Topic名称} -s ${消息大小} -w ${生产者线程数} 连接地址:购买RocketMQ实例后,获取实例的连接地址。 Topic名称:创建Topic时设置的Topic名称。 消息大小:1KB 生产者线程数:测试rocketmq.4u8g.cluster.small、rocketmq.4u8g.cluster和rocketmq.8u16g.cluster时,生产者线程数输入256,测试rocketmq.12u24g.cluster时,生产者线程数输入640。 消费命令: sh consumer.sh -n "${连接地址}" -t ${Topic名称} -g ${消费组名称} 连接地址:购买RocketMQ实例后,获取实例的连接地址。 Topic名称:创建Topic时设置的Topic名称。 消费组名称:创建消费组时设置的消费组名称。
  • 测试环境 进行测试前,您需要先构建如下的测试环境: 购买如表1所示实例,购买步骤请参考购买实例。 表1 实例参数 名称 规格 代理数量 存储空间 ACL访问 公网访问 rocketmq-01 rocketmq.4u8g.cluster.small 1 高I/O 300GB 关闭 关闭 rocketmq-02 rocketmq.4u8g.cluster 1 高I/O 300GB 关闭 关闭 rocketmq-03 rocketmq.8u16g.cluster 1 高I/O 300GB 关闭 关闭 rocketmq-04 rocketmq.12u24g.cluster 1 高I/O 300GB 关闭 关闭 创建如表2所示Topic,创建步骤请参考创建Topic。 表2 Topic参数 名称 权限 关联代理 队列个数 topic-01 发布+订阅 broker-0 8 创建如表3所示消费组,创建步骤请参考创建消费组。 表3 消费组参数 名称 关联代理 最大重试次数 是否允许以广播模式消费 group-01 broker-0 16 否 购买1台E CS 服务器(区域、可用区、虚拟私有云、子网、安全组与RocketMQ实例保持一致,Linux系统),具体步骤请参考购买弹性云服务器。 在ECS中安装Java JDK,并配置JAVA_HOME与PATH环境变量。 export JAVA_HOME=/root/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH 下载测试工具。 wget https://dist.apache.org/repos/dist/release/rocketmq/5.1.4/rocketmq-all-5.1.4-bin-release.zip 解压测试工具。 unzip rocketmq-all-5.1.4-bin-release.zip
  • 前提条件 已创建RocketMQ实例和消费组。 如果通过按Message ID查询,需要提前获取消息所在的消费组名称和消息的Message ID。 Message ID为生产消息后返回的MsgId,如6中返回的内容,也可先通过Topic查询消息,记录Message ID。 如果通过按Message Key查询,需要提前获取消息所在的消费组名称和消息的Message Key。 Message Key为7中配置的消息Key,也可先通过Topic查询消息,记录Message Key。
  • 测试环境 进行测试前,您需要先构建如下的测试环境: 购买如表1所示实例,购买步骤请参考购买实例。 表1 实例参数 名称 规格 存储空间 ACL访问 公网访问 rocketmq-01 rocketmq.b2.large.4 超高I/O 300GB 关闭 关闭 rocketmq-02 rocketmq.b2.large.8 超高I/O 300GB 关闭 关闭 rocketmq-03 rocketmq.b2.large.12 超高I/O 300GB 关闭 关闭 创建如表2所示Topic,创建步骤请参考创建Topic。 表2 Topic参数 名称 消息类型 topic-01 普通 创建如表3所示消费组,创建步骤请参考创建消费组。 表3 消费组参数 名称 最大重试次数 是否允许以广播模式消费 是否顺序消费 group-01 16 否 否 购买1台ECS服务器(区域、可用区、虚拟私有云、子网、安全组与RocketMQ实例保持一致,Linux系统),具体步骤请参考购买弹性云服务器。 在ECS中安装Java JDK,并配置JAVA_HOME与PATH环境变量。 export JAVA_HOME=/root/jdk1.8.0_231 export PATH=$JAVA_HOME/bin:$PATH 下载测试工具。 wget https://dms-demos.obs.cn-north-1.myhuaweicloud.com/rocketmq-tutorial.zip 解压测试工具。 unzip rocketmq-tutorial.zip
  • 测试结果参考 表4 测试结果参考 性能指标 rocketmq.b2.large.4 rocketmq.b2.large.8 rocketmq.b2.large.12 实例生产速率 1008.500 Count/s 2019.710 Count/s 3011.640 Count/s 实例消费速率 1008.520 Count/s 2019.710 Count/s 3010.590 Count/s 平均生产时延 26.336 ms 8.788 ms 5.876 ms
  • 测试命令 生产命令: sh producer.sh -n "${连接地址}" -t ${Topic名称} -s ${消息大小} -w ${生产者线程数} 连接地址:购买RocketMQ实例后,获取实例的连接地址。 Topic名称:创建Topic时设置的Topic名称。 消息大小:1KB 生产者线程数:256 消费命令: sh consumer.sh -n "${连接地址}" -t ${Topic名称} -g ${消费组名称} 连接地址:购买RocketMQ实例后,获取实例的连接地址。 Topic名称:创建Topic时设置的Topic名称。 消费组名称:创建消费组时设置的消费组名称。
  • 支持的消息类型 分布式消息服务RocketMQ版支持4种消息类型。 普通消息:没有特殊功能的消息,区别于延迟消息、顺序消息和事务消息。 延迟消息/定时消息:生产者生产消息到分布式消息服务RocketMQ版后,消息不会立即被消费,而是延迟到特定时间后才会发送给消费者进行消费。 顺序消息:消费者按照消息发送的顺序来消费消息。 事务消息:提供类似X/Open XA的分布事务功能,通过事务消息能达到分布式事务的最终一致。
  • 支持的高级特性 分布式消息服务RocketMQ版支持4种高级特性。 消息过滤:消费者根据分布式消息服务RocketMQ版设置的标签对已订阅Topic中的消息进行过滤,达到只消费需要的消息的目的。 消息重试:消费者消费某条消息失败后,分布式消息服务RocketMQ版根据重试机制将消息重新发送给消费者进行消费。如果重试次数到达设定的最大值时,消息尚未被成功消费,此消息将被发送到死信队列。 分布式消息服务RocketMQ版的重试机制如表1所示。 表1 消息重试机制 消费类型 重试时间间隔 最大重试次数 顺序消费 通过suspendTimeMillis设置重试时间间隔。 默认值为1000ms,即1s。 通过消费者的setMaxReconsumeTimes函数配置最大重试次数。若未设置参数值,默认为无限重试。 普通消费 重试时间间隔根据重试次数阶梯变化,如表2所示。 创建消费组时设置。 取值范围:1-16。 表2 普通消费重试时间间隔 重试次数 与上次的间隔时间 重试次数 与上次的间隔时间 1 10s 9 7min 2 30s 10 8min 3 1min 11 9min 4 2min 12 10min 5 3min 13 20min 6 4min 14 30min 7 5min 15 1h 8 6min 16 2h 延时消息:生产者生产消息到分布式消息服务RocketMQ版后,消息不会立即被消费,而是延迟固定时间后才会发送给消费者进行消费。生产者可以指定18个延时等级,每个延时等级对应的时间如表3所示。 表3 延时等级 延时等级 延时时间 延时等级 延时时间 1 1s 10 6min 2 5s 11 7min 3 10s 12 8min 4 30s 13 9min 5 1min 14 10min 6 2min 15 20min 7 3min 16 30min 8 4min 17 1h 9 5min 18 2h 定时消息:生产者生产消息到分布式消息服务RocketMQ版后,消息不会立即被消费,而是延迟到设定的时间点后才会发送给消费者进行消费。分布式消息服务RocketMQ版支持任意时间的定时消息,最大推迟时间可达到1年。同时也支持定时消息的取消。 2022年3月30日及以后购买的实例支持定时消息功能,在此之前购买的实例不支持此功能。
  • 产品架构 图1 产品架构示意图 示意图说明: Broker:负责接收和存储Producer发送的消息,或者转发消息到Consumer。一个Broker由一个主节点和两个备节点组成。 NameServer:负责接收和存储Broker中的元数据。 Producer:从NameServer获取元数据,然后将消息发送到Broker。 Consumer:从NameServer获取元数据,然后从Broker拉取消息。
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的 云安全 挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的IaaS、PaaS和SaaS类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。华为云租户的安全责任在于对使用的IaaS、PaaS和SaaS类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、 虚拟主机 和访客虚拟机的操作系统,虚拟防火墙、API网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 细粒度授权 使用自定义细粒度策略,请使用管理员用户登录 IAM 控制台,按需选择DMS的细粒度权限进行授权操作。DMS for RocketMQ细粒度权限依赖说明请参见表3。 表3 DMS for RocketMQ细粒度权限依赖说明 权限名称 权限描述 权限依赖 dms:instance:list 查看实例列表 无 dms:instance:get 查看实例详情信息 无 dms:instance:create 创建实例 vpc:vpcs:get vpc:ports:create vpc:securityGroups:get vpc:ports:get vpc:subnets:get vpc:vpcs:list vpc:publicIps:get vpc:publicIps:list vpc:ports:update vpc:publicIps:update vpc:ports:delete dms:instance:getBackgroundTask 查看实例后台任务详情 无 dms:instance:deleteBackgroundTask 删除实例后台任务 无 dms:instance:modify 修改实例 vpc:vpcs:get vpc:ports:create vpc:securityGroups:get vpc:ports:get vpc:subnets:get vpc:vpcs:list vpc:publicIps:get vpc:publicIps:list vpc:ports:update vpc:publicIps:update vpc:ports:delete dms:instance:delete 删除实例 无
  • DMS for RocketMQ权限 默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 DMS for RocketMQ部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问DMS for RocketMQ时,需要先切换至授权区域。 权限根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对DMS for RocketMQ服务,管理员能够控制IAM用户仅能对实例进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,DMS for RocketMQ支持的API授权项请参见细粒度策略支持的授权项。 如表1所示,包括了DMS for RocketMQ的所有系统权限。 表1 DMS for RocketMQ系统权限 系统角色/策略名称 描述 类别 依赖关系 DMS FullAccess 分布式消息服务管理员权限,拥有该权限的用户可以操作所有分布式消息服务的功能。 系统策略 无 DMS UserAccess 分布式消息服务普通用户权限(没有实例创建、修改、删除、扩容)。 系统策略 无 DMS ReadOnlyAccess 分布式消息服务的只读权限,拥有该权限的用户仅能查看分布式消息服务数据。 系统策略 无 DMS VPCAccess 分布式消息服务租户委托时需要授权的VPC操作权限。 系统策略 无 DMS KMSAccess 分布式消息服务租户委托时需要授权的KMS操作权限。 系统策略 无 DMS Administrator 分布式消息服务的管理员权限。 系统角色 依赖Tenant Guest和VPC Administrator。 表2列出了DMS for RocketMQ常用操作与系统策略的授权关系,您可以参照该表选择合适的系统策略。 表2 常用操作与系统策略的关系 操作 DMS FullAccess DMS UserAccess DMS ReadOnlyAccess DMS VPCAccess DMS KMSAccess 创建实例 √ × × × × 修改实例 √ × × × × 删除实例 √ × × × × 变更实例规格 √ × × × × 查询实例信息 √ √ √ × ×
  • 与开源RocketMQ的差异 分布式消息服务RocketMQ版在兼容开源RocketMQ基础上,对版本特性做了一定程度的定制和增强。 表1 分布式消息服务RocketMQ版与开源RocketMQ的差异说明 功能项 分布式消息服务RocketMQ版 开源RocketMQ 延迟消息/定时消息 延迟消息:支持18个固定延迟时长,最长延迟2小时。 定时消息:支持任意延迟时长,最长延迟1年。 仅支持18个固定延迟时长,最长延迟2小时。 顺序消息 支持 支持 消息重试 支持 支持 死信消息 支持 支持 集群消费 支持 支持 广播消费 支持 支持 死信队列 支持 支持 消费重置 支持 支持 消息查询 支持 支持 加密传输 支持 支持 消息轨迹 支持 支持 事务消息 支持,事务消息大量堆积时,性能提升10倍 支持,事务消息大量堆积时,性能较差 死信导出 支持 不支持 数据转储 待规划 不支持 实例诊断 一键诊断消费问题 不支持 实例监控 支持以图表形式查看历史值,18+监控项 仅支持查看当前监控值,不支持CPU、内存等监控指标。 ACL访问控制 灵活配置,一键生效 配置复杂 运维扩容 极速扩容,一键生效 手动扩容,操作复杂
  • 背景信息 强制跳转HTTPS:配置HTTPS后,开启强制跳转HTTPS,若用户发起HTTP请求,服务端会返回302重定向响应,原来的HTTP请求将会被强制重定向为HTTPS请求。 相比HTTP协议,HTTPS具有如下优势: HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。 在HTTPS协议中,会对用户的关键信息进行加密,避免Session ID或Cookie内容被攻击者捕获,导致敏感信息泄露。
  • 创建 TICS 服务时依赖的IEF权限 如果您需要授予IAM用户基于“边缘节点部署”购买TICS服务的权限,则您需要为用户组配置IEF服务的自定义策略tics-ief-iam-min和系统角色IEF Administrator。 创建自定义策略tics-ief-iam-min,主要内容为创建IEF所需的iam权限。 图3 创建自定义策略 策略内容如下: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "iam:agencies:listAgencies", "iam:permissions:listRolesForAgency", "iam:roles:getRole" ] } ] } 图4 策略内容 创建用户组tics_ief_min。 图5 创建用户组 为用户组授权。 单击用户组后的“授权”后进入选择策略界面,选择自定义策略tics-ief-iam-min和IEF Administrator系统角色完成授权。 图6 授权 将所需授权的用户加入用户组tics_ief_min,即可为用户授予相关权限。
  • 创建TICS服务时依赖的CCE权限 如果您需要授予IAM用户基于“云租户部署”购买TICS服务的权限,则您需要为用户组配置系统角色CCE Administrator和OBS Administrator。 创建用户组tics_cce_min。 图1 创建用户组 为用户组授权。 单击用户组后的“授权”后进入选择策略界面,选择系统角色CCE Administrator和OBS Administrator完成授权。 选择CCE Administrator和OBS Administrator系统角色后,系统会自动勾选其依赖的其他系统角色,因此实际中授权更多的系统角色。 图2 授权 将所需授权的用户加入用户组tics_cce_min,即可为用户授予相关权限。 创建cce类型的计算节点之后,假如需要缩小权限,可自行把子用户从tics_cce_min用户组中删除。
  • 创建IAM用户并授予TICS权限 创建用户组并授权。使用华为账号登录IAM控制台,创建用户组,并授予TICS的普通用户操作权限,如“TICS CommonOperations”。 创建用户组并授权的具体操作,请参见创建用户组并授权。 配置用户组的TICS权限时,注意选择权限的作用范围为“区域级项目”,搜索框中输入权限名“TICS”进行搜索,然后勾选需要授予用户组的权限,如“TICS CommonOperations”。 创建用户并加入用户组。在IAM控制台创建用户,并将其加入步骤1中创建的用户组。 创建用户并加入用户组的具体操作,请参见创建用户并加入用户组。
  • 计算节点部署方式 云租户部署: 数据上云的用户可以选择“云租户部署”。 可信计算 节点部署在华为云租户的 虚拟私有云VPC 中,可信计算节点组件部署在基于华为云CCE服务的容器中。 当前仅支持直接创建CCE集群,不支持选择已有集群。您需要配置CCE集群的部署规格、虚拟私有云、子网、节点密码、弹性IP等信息。 关于CCE集群的更多信息可参考CCE。 选择边缘节点部署计算节点: 数据不上云的用户可以选择“边缘节点部署”。数据不需要上传到云上,通过纳管节点的方式,即可参与多方安全计算或者联邦学习任务,关于IEF边缘节点的更多信息可参考IEF。 您可参考纳管节点来纳管节点,注意:纳管节点防火墙需要开通30000-65535端口,且需要建立消息端点和消息路由,步骤如下: 登录IEF服务,选择左侧“边 云消息 ”列,选择“消息端点”。 创建消息端点,填写相关参数。 “消息端点类型”选择“边缘端点(ServiceBus)”; “消息端点名称”参数值为“tics-agent”; “服务端口”参数值为“30000”。 选择左侧“边云消息”列,单击“消息路由”,勾选“专业版服务实例”,填写相关参数。 “消息路由名称”参数值为“tics-agent-route”; “源端点”参数值为“SystemREST”; “源端点资源”参数值为“/tics-agent”; “目的端点”参数值为“tics-agent”; “目的端点资源”参数值为“/”。
  • 服务授权操作 进入TICS服务控制台,为保证正常创建TICS服务,需要先设置服务委托。 进入计算节点购买页面,根据弹出窗口提示勾选对应的委托权限。 同意授权后,TICS将在 统一身份认证 服务IAM下为您创建名为tics_admin_trust的委托,授权成功后,可以进入委托列表查看。注意:委托tics_admin_trust创建成功后,请勿删除。 图1 授权访问权限名 表1 TICS委托权限列表 权限名 详细信息 备注 IEF Administrator TICS服务计算节点依赖IEF作为底层资源,因此需要IEF Administrator角色来部署应用。 由于云服务缓存需要时间,该权限3分钟左右才能生效。
  • 前提条件 如果您还没有目标Redis,请先创建目标Redis,具体操作请参考购买Redis实例。 如果您已有目标Redis,则不需要重复创建,为了对比迁移前后数据及预留足够的内存空间,建议在数据迁移之前清空目标实例数据,清空操作请参考清空Redis实例数据。如果没有清空实例数据,数据迁移后,目标Redis与源Redis实例重复的数据迁移后会被覆盖,源Redis没有、目标Redis有的数据会保留。 已创建弹性 云服务器ECS ,创建弹性云服务器的方法,请参见创建弹性云服务器。 ECS请选择与DCS Cluster集群实例相同虚拟私有云、子网和安全组,并且需要绑定弹性公网IP。 自建的源Redis Cluster集群如果是在本地或者其他云厂商的服务器上自建,需要允许被公网访问。
  • 在线迁移数据 使用如下命令同步源Redis集群和目标Redis集群数据: ./redis-shake -type sync -conf redis-shake.conf 执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段: sync rdb done. 执行日志出现如下信息时,代表增量同步无新增内容,可手动停止同步(Ctrl + C): sync: +forwardCommands=0 +filterCommands=0 +writeBytes=0 图1 RedisShake在线迁移示意图
  • 配置RedisShake工具 登录弹性云服务器ECS。 在ECS中执行以下命令下载RedisShake。本文以下载2.1.2版本为例,您可以根据实际需要下载其他RedisShake版本。 wget https://github.com/tair-opensource/RedisShake/releases/download/release-v2.1.2-20220329/release-v2.1.2-20220329.tar.gz 执行命令解压RedisShake文件。 tar -xvf redis-shake-v2.1.2.tar.gz 执行命令进入解压后的RedisShake文件目录。 cd redis-shake-v2.0.3 编辑RedisShake工具配置文件redis-shake.conf,补充源端与目标端所有master节点信息。 vim redis-shake.conf 修改内容如下: source.type = cluster #如果无密码,本项不填 source.password_raw = {source_redis_password} #源Cluster集群所有master节点的IP地址与端口,以分号分隔 source.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port} target.type = cluster #如果无密码,本项不填 target.password_raw = {target_redis_password} #目标Cluster集群所有master节点的IP地址与端口,以分号分隔 target.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port} 修改后按下Esc键退出编辑模式,输入:wq!按回车键保存配置并退出编辑界面。
  • 获取源Redis和目标Redis节点信息 分别连接源端和目标端Redis。连接Redis的方法请参考Redis-cli客户端连接Redis。 在线迁移Cluster集群时需要将Cluster集群各个节点数据分别迁移。执行如下命令分别查询源端和目标Cluster集群的所有节点的IP地址与端口: redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes {redis_address}为Redis的连接地址,{redis_port}为Redis的端口,{redis_password}为Redis的连接密码。 在命令返回的结果中,获取所有master节点的IP端口,如下如所示:
  • 生成AOF文件 登录弹性云服务器。 安装Redis-cli客户端。该操作以客户端安装在Linux系统上为例进行说明。 执行如下命令下载Redis。您也可以安装其他Redis版本。具体操作,请参见Redis官网。 wget http://download.redis.io/releases/redis-5.0.8.tar.gz 执行如下命令,解压Redis客户端源码包。 tar -xzf redis-5.0.8.tar.gz 进入Redis目录并编译Redis客户端源码。 cd redis-5.0.8 make cd src 执行如下命令开启缓存持久化,得到AOF持久化文件。 redis-cli -h {source_redis_address} -p {port} -a {password} config set appendonly yes {source_redis_address}为源Redis的连接地址,{port}为源Redis的端口,{password}为源Redis的连接密码。 开启持久化之后,如果AOF文件大小不再变化,说明AOF文件为全量缓存数据。 使用redis-cli登录Redis实例,输入命令“config get dir”可以查找生成的AOF文件保存路径,文件名如果没有特殊指定,默认为:appendonly.aof。 生成AOF文件后如需关闭同步,可使用redis-cli登录redis实例,输入命令“config set appendonly no”进行关闭。
  • 前提条件 如果您还没有目标Redis,请先创建目标Redis,具体操作请参考购买Redis实例。 如果您已有目标Redis,则不需要重复创建,为了对比迁移前后数据及预留足够的内存空间,建议在数据迁移之前清空目标实例数据,清空操作请参考清空Redis实例数据。如果没有清空实例数据,数据迁移后,目标Redis与源Redis实例重复的数据迁移后会被覆盖,源Redis没有、目标Redis有的数据会保留。 已创建弹性云服务器ECS,创建弹性云服务器的方法,请参见创建弹性云服务器。
  • 约束与限制 Rump模式不支持增量数据迁移,建议您先停止源端Redis的写入再进行迁移,防止数据不一致。 该方案配置只支持同DB映射迁移,异DB映射迁移该方案配置不适用。 源端为多DB使用(有非DB0的DB使用),华为云DCS为Proxy集群时,DCS需要开启多DB模式,否则会迁移失败(单DB0的Proxy集群不支持select命令)。 源端为多DB使用(有非DB0的DB使用),华为云DCS为Cluster集群时,该方案不支持(DCS Cluster集群只支持DB0模式)。
  • 迁移步骤 分别在华为云ECS和源端转发服务器上安装Nginx,本文以ECS操作系统为Centos7.x为例进行安装,不同操作系统命令稍有不同。 执行以下命令,添加Nginx到yum源。 sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 添加完之后,执行以下命令,查看是否已经添加成功。 yum search nginx 添加成功之后,执行以下命令,安装Nginx。 sudo yum install -y nginx 执行以下命令安装stream模块。 yum install nginx-mod-stream --skip-broken 启动Nginx并设置为开机自动运行。 sudo systemctl start nginx.service sudo systemctl enable nginx.service 在本地浏览器中输入服务器地址(ECS公网IP地址),查看安装是否成功。 如果出现下面页面,则表示安装成功。 在源端Redis添加源端转发服务器的白名单。 在源端转发服务器配置安全组。 获取华为云ECS的公网IP地址。 配置源端转发服务器安全组入方向,添加华为云ECS的公网IP地址,并放开来自华为云ECS访问请求的端口(以6379为例)。 配置源端转发服务器的Nginx转发配置。 登录Linux源端转发服务器,执行命令打开并修改配置文件。 cd /etc/nginx vi nginx.conf 转发配置示例如下: stream { server { listen 6379; proxy_pass {source_instance_address}:{port}; } } 其中,6379为源端转发服务器本机监听端口,{source_instance_address}和{port}为源端Redis实例的连接地址和端口。 配置目的:通过访问源端转发服务器本机监听端口6379,访问源端Redis。 注意:以上配置必须配置在如下图所示的位置。 图2 配置位置要求 重启Nginx服务。 service nginx restart 验证启动是否成功。 netstat -an|grep 6379 端口在监听状态,Nginx启动成功。 图3 验证结果 配置华为云ECS的Nginx转发配置。 登录Linux华为云ECS,执行命令打开并修改配置文件。 cd /etc/nginx vi nginx.conf 配置示例如下: stream { server { listen 6666; proxy_pass {source_ecs_address}:6379; } } 其中,6666为华为云ECS本机监听端口,{source_ecs_address}为源端转发服务器公网IP地址,6379为源端转发服务器Nginx的监听端口。 配置目的:通过访问华为云ECS本机监听端口6666,访问源端转发服务器。 注意:以上配置必须配置在如下图所示的位置。 图4 配置位置要求 重启Nginx服务。 service nginx restart 验证启动是否成功。 netstat -an|grep 6666 端口在监听状态,Nginx启动成功。 图5 验证结果 在华为云ECS执行以下命令测试6666端口的网络连接。 redis-cli -h {target_ecs_address} -p 6666 -a {password} 其中,{target_ecs_address}为华为云ECS公网IP地址,6666为华为云ECS监听端口,{password}为源端Redis密码,如无密码可不填。 图6 连接示例 准备迁移工具RedisShake。 登录华为云ECS。 在华为云ECS中执行以下命令下载RedisShake,本文以下载2.0.3版本为例进行说明。您可以根据实际需要下载其他RedisShake版本。 wget https://github.com/tair-opensource/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz 执行命令解压RedisShake文件。 tar -xvf redis-shake-v2.0.3.tar.gz 配置RedisShake的配置文件。 执行命令进入解压后的目录。 cd redis-shake-v2.0.3 修改配置文件redis-shake.conf。 vim redis-shake.conf 修改源端Redis信息配置: source.type 源端redis实例类型,单机、主备、proxy集群实例都选择standalone,cluster实例选择cluster。 source.address 华为云ECS公网IP地址和映射源端转发服务器的端口(华为云ECS监听端口6666),用英文冒号隔开。 source.password_raw 源端待迁移Redis实例的密码,如未设置密码,无需填写。 修改目标端DCS信息配置: target.type 华为云Redis实例类型,单机、主备、proxy集群实例都选择standalone,cluster实例选择cluster。 target.address 华为云Redis实例的连接地址和端口,用英文冒号隔开。 target.password_raw 华为云Redis实例的密码,如未设置密码,无需填写。 按下Esc键退出编辑模式,输入:wq!按回车键保存配置并退出编辑界面。 执行命令启动RedisShake并使用rump(在线全量)模式开始数据迁移。 ./redis-shake.linux -conf redis-shake.conf -type rump 图7 迁移过程 图8 迁移结果 迁移完成后,请使用redis-cli工具连接源Redis和目标Redis,确认数据的完整性。 分别连接源Redis和目标Redis。 连接操作请参考redis-cli连接。 输入info keyspace,查看keys参数和expires参数的值。 对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一致,表示数据完整,迁移正常。 删除RedisShake配置文件。
  • 迁移步骤 使用Redis-cli连接目标端Redis实例,获取目标端Cluster集群的Master节点IP地址与端口。 redis-cli -h {target_redis_address} -p {target_redis_port} -a {target_redis_password} cluster nodes {target_redis_address}:目标Redis实例的连接地址。 {target_redis_port}:目标Redis实例的连接端口号。 {target_redis_password}:目标Redis实例的连接密码。 在命令返回的结果中,获取所有master节点的IP端口,如下如所示: 在准备好的华为云ECS上安装迁移工具RedisShake。 登录华为云ECS。 在华为云ECS中执行以下命令下载RedisShake,本文以下载2.0.3版本为例进行说明。您可以根据实际需要下载其他RedisShake版本。 wget https://github.com/tair-opensource/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz 执行命令解压RedisShake文件。 tar -xvf redis-shake-v2.0.3.tar.gz 如果源端集群部署在数据中心内网,还需在内网服务器上安装RedisShake,并参考下述步骤进行数据导出,然后将数据文件上传到云服务器。 从源端Redis控制台导出RDB文件,如果无法导出RDB文件,请联系源端技术支持获取。 导入RDB文件。 将导出的RDB文件(含多个)上传到云服务器上。云服务器与目标端DCS Cluster集群实例的网络连通。 编辑RedisShake工具配置文件redis-shake.conf。 vim redis-shake.conf 补充目标端所有master节点的连接信息: target.type = cluster #如果无密码,本项不填 target.password_raw = {target_redis_password} #目标Cluster集群所有master节点的IP地址与端口,以分号分隔 target.address = {master1_ip}:{master1_port};{master2_ip}:{master2_port}…{masterN_ip}:{masterN_port} #需要导入的rdb文件列表,用分号分隔 rdb.input = {local_dump.0};{local_dump.1};{local_dump.2};{local_dump.3} 编辑完成后,按下Esc键退出编辑模式,输入:wq!按回车键保存配置并退出编辑界面。 使用如下命令导入RDB文件到目标Cluster集群: ./redis-shake -type restore -conf redis-shake.conf 执行日志中出现如下信息时导入备份文件完成: Enabled http stats, set status (incr), and wait forever. 迁移后验证。 数据同步结束后,可使用redis-cli工具连接目标端DCS Cluster集群,通过info命令查看Keyspace中的Key数量,确认数据是否完整导入。 如果数据不完整,可使用flushall或者flushdb命令清理实例中的缓存数据后重新同步。
共100000条