云服务器内容精选

  • 前提条件 已成功创建Redis实例,且状态为“运行中”。创建Redis实例的操作请参考购买Redis实例。 已创建弹性云服务器,创建弹性云服务器的方法,请参见创建弹性云服务器。 如果弹性云服务器为Linux系统,该弹性云服务器必须已经安装gcc编译环境。 如果E CS 未安装gcc编译环境,请执行以下命令进行安装: yum install -y make yum install -y pcre-devel yum install -y zlib-devel yum install -y libevent-devel yum install -y openssl-devel yum install -y gcc-c++ 连接实例前确保客户端与Redis实例之间网络互通,具体请参考连接Redis网络要求。
  • Redis-cli客户端连接Redis(Windows版) Windows版本的Redis客户端安装包,请单击这里下载编译包。下载后直接解压安装到自定义目录,然后使用cmd工具进入该目录,执行以下命令连接redis实例: redis-cli.exe -h XXX -p 6379 其中:“XXX”为Redis实例的IP地址/ 域名 ,“6379”为Redis实例的端口。IP地址/域名和端口获取见查看实例信息,请按实际情况修改后执行。
  • 前提条件 准备弹性负载均衡ELB,创建ELB的操作,请参考创建独享型负载均衡器。创建的ELB必须符合以下条件。如果已有符合条件的ELB,无需重复创建。 ELB的实例类型必须选择“独享型”,且必须开启“IP类型后端(跨VPC后端)”。 ELB的规格中必须包含“网络型(TCP/UDP)”。 ELB必须选择与Redis实例相同的VPC。 ELB必须绑定弹性公网IP(EIP)。 ELB必须有可用的端口。 单个ELB挂载多个实例时,Redis的性能会受限于ELB的规格。 为保护Redis实例的网络安全性,Redis实例必须配置访问密码,免密访问的实例不支持开启公网访问。如需修改免密访问的实例为密码访问,请参考重置缓存实例密码。
  • 开启公网访问并获取公网访问地址 登录分布式缓存服务管理控制台。 在管理控制台左上角单击,选择实例所在的区域。 单击左侧菜单栏的“缓存管理”,进入缓存管理页面。 单击需要开启公网访问的实例名称,进入该实例的基本信息页面。 单击“公网访问”后的“开启”。 在开启公网访问弹窗中勾选需要绑定的ELB,单击“确定”。 如果没有可选的ELB,单击页面提示的“弹性负载均衡”跳转链接,可前往ELB控制台页面进行创建。如果已经创建了ELB,未在ELB选择列表中,请参考前提条件中的说明排查ELB是否符合绑定条件。 Redis实例绑定ELB期间,请勿删除绑定的ELB和监听器,并保证ELB可用,否则会影响Redis的正常公网连接。 如果需要删除ELB实例,请先在Redis实例详情页面解除绑定(关闭公网连接),再在ELB控制台删除ELB实例。 图1 绑定ELB 开启公网公网状态显示“成功”后,表示开启公网访问成功。 单击左侧菜单栏的“概览”,返回实例基本信息页面查看公网访问信息。如需关闭公网访问,单击“关闭”。 图2 公网访问连接地址 上图中的“EIP”地址为Redis实例的公网访问地址,“监听器”后的端口号为公网访问的端口。 主备实例开启公网访问后,会生成两个监听器。一个主节点监听器(以listener-master开头)和一个备节点监听器(以listener-slave开头),分别用于监听实例的主节点和备节点。公网连接主备实例时请使用主监听器后的端口用于连接主备实例的主节点。仅当需要配置主备实例读写分离时,需要同时使用主、备监听器端口,分别连接主、备节点。 图3 主备实例公网连接地址 连接信息中的“连接地址”及“IP地址”为相同VPC内客户端访问Redis时的“域名地址:端口”和“IP地址:端口”。
  • Redis实例配置ELB内网IP白名单(可选) 如果Redis开启了IP白名单,需要将ELB内网IP地址添加到Redis实例的IP白名单中,以确保ELB可以访问Redis实例: 单击“公网访问”中ELB后的链接,跳转到负载均衡器页面。 复制页面中的ELB“ID”。 单击页面中“IPv4私有地址”后的地址,跳转到对应子网页面。 选择“IP地址管理”页签,在第二个搜索框中筛选资源ID(已复制的ELB ID),获取ELB内网IP地址。 将ELB的全部内网IP地址添加到Redis的IP白名单中,添加方式请参考配置Redis访问白名单。
  • 约束与限制 如果“allow.everyone.if.no.acl.found”设置为“true”,且Topic未授权任何用户,此时所有的用户都可以订阅/发布此Topic。如果Topic已授权某一个或多个用户,此时只有授权的用户可以订阅/发布此Topic,其他未授权的用户不能订阅/发布此Topic。“allow.everyone.if.no.acl.found”在配置参数中修改。 如果“allow.everyone.if.no.acl.found”设置为“false”,此时只有授权的用户可以订阅/发布此Topic,其他未授权的用户不能订阅/发布此Topic。“allow.everyone.if.no.acl.found”在配置参数中修改。 如果Topic同时设置了“默认用户”权限和单个用户权限,取两者的并集。
  • 步骤五:验证接口连通性 参考使用客户端连接Kafka(关闭SASL)或者使用客户端连接Kafka(开启SASL),测试是否可以生产和消费消息。 测试接口连通性时,注意以下几点: 连接Kafka实例的地址为“advertised.listeners IP:9011”,以图8为例,连接Kafka实例的地址为“192.168.0.71:9011,192.168.0.11:9011,192.168.0.21:9011”。 在Kafka实例安全组的入方向规则中放通9011端口,以及198.19.128.0/17网段的地址。 如果Kafka实例的子网配置了网络ACL功能,需要在网络ACL的入方向规则中放通198.19.128.0/17网段的地址,以及 VPC终端节点 涉及的子网。 198.19.128.0/17是为VPC终端节点分配的网段,使用VPC终端节点需要放通此网段。
  • 准备实例依赖资源 创建Kafka实例前,请提前准备好如表1所示资源。 表1 Kafka实例依赖资源 资源名称 要求 创建指导 VPC和子网 Kafka实例可以使用当前账号下已创建的VPC和子网,也可以使用新创建的VPC和子网,还可以使用共享VPC和子网,请根据实际需要进行配置。 共享VPC是基于 资源访问管理 (Resource Access Manager,简称 RAM )服务的机制,VPC的所有者可以将VPC内的子网共享给一个或者多个账号使用。通过共享VPC功能,可以简化网络配置,帮助您统一配置和运维多个账号下的资源,有助于提升资源的管控效率,降低运维成本。有关VPC子网共享的更多信息,请参见共享VPC。 在创建VPC和子网时应注意:创建的VPC与Kafka实例在相同的区域。 在创建VPC和子网时应注意: 创建的VPC与Kafka实例在相同的区域。 子网开启IPv6后,Kafka实例支持IPv6功能。Kafka实例开启IPv6后,客户端可以使用IPv6地址连接实例。 创建VPC和子网的操作指导请参考创建虚拟私有云和子网,若需要在已有VPC上创建和使用新的子网,请参考为虚拟私有云创建新的子网。 安全组 不同的Kafka实例可以重复使用相同的安全组,也可以使用不同的安全组,请根据实际需要进行配置。 连接Kafka实例前,请根据连接方式配置对应的安全组,具体请参考表2。 创建安全组的操作指导请参考创建安全组,为安全组添加规则的操作指导请参考添加安全组规则。 弹性IP地址 如果客户端使用公网连接Kafka实例,请提前创建弹性IP地址。 在创建弹性IP地址时,应注意如下要求: 创建的弹性IP地址与Kafka实例在相同的区域。 弹性IP地址的数量必须与Kafka实例的代理个数相同。 Kafka控制台无法识别开启IPv6转换功能的弹性IP地址。 创建弹性IP地址的操作指导请参考申请弹性公网IP。
  • 通过访问控制,保护数据安全性 建议对不同角色的 IAM 用户仅设置最小权限,避免权限过大导致数据泄露或被误操作。 为了更好的进行权限隔离和管理,建议您配置独立的IAM管理员,授予IAM管理员IAM策略的管理权限。IAM管理员可以根据您业务的实际诉求创建不同的用户组,用户组对应不同的数据访问场景,通过将用户添加到用户组并将IAM策略绑定到对应用户组,IAM管理员可以为不同职能部门的员工按照最小权限原则授予不同的数据访问权限,详情请参见权限管理。 建议配置安全组访问控制,保护您的数据不被异常读取和操作。 参照表1配置安全组的入方向规则限制,控制连接实例的网络范围,避免DMS for RocketMQ暴露给不可信的第三方。 表1 安全组规则 实例版本 方向 协议 端口 源地址 说明 4.8.0 5.x 入方向 TCP 8100 访问DMS for RocketMQ实例的客户端地址,应避免设置为0.0.0.0/0。 使用TCP协议,通过内网访问实例的端口。 4.8.0 5.x 入方向 TCP 8200 使用TCP协议,通过公网访问实例的端口。 4.8.0 5.x 入方向 TCP 10100-10199 使用TCP协议,访问业务节点的端口。 5.x 入方向 TCP 8080 使用gRPC协议,通过内网访问实例的端口。 5.x 入方向 TCP 8081 使用gRPC协议,通过公网访问实例的端口。 建议将访问DMS for RocketMQ实例方式设置为密码访问(即开启ACL访问控制),防止未经认证的客户端误操作实例。 您可以选择如下任意一种方法开启ACL访问控制。 在“购买实例”页面开启ACL访问控制,具体可参考购买RocketMQ实例。 购买实例后,在实例的“基本信息”页面中开启ACL访问控制,具体可参考查看和修改RocketMQ实例基本信息。 开启敏感操作多因子认证保护您的数据不被误删。 DMS for RocketMQ支持敏感操作保护,开启后执行删除实例等敏感操作时,系统会进行身份验证,进一步对数据的高危操作进行控制,保证DMS for RocketMQ数据的安全性。详情请参见敏感操作。
  • 审计是否存在异常数据访问 开启 云审计 服务,记录DMS for RocketMQ的所有访问操作,便于后期审查。 云审计服务(Cloud Trace Service, CTS ),是华为 云安全 解决方案中专业的日志审计服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。 您开通云审计服务并创建和配置追踪器后,CTS可记录DMS for RocketMQ的管理事件和数据事件用于审计。相关文档请参见查看RocketMQ审计日志。 使用 云监控服务 对安全事件进行实时监控和告警。 为使您更好地掌握DMS for RocketMQ实例状态,华为云提供了 云监控 服务(Cloud Eye)。您可使用该服务监控自己的DMS for RocketMQ实例,执行自动实时监控、告警和通知操作,帮助您实时掌握DMS for RocketMQ实例中所产生的请求、流量等信息。 云监控服务不需要开通,会在用户创建DMS for RocketMQ实例后自动启动。相关文档请参见RocketMQ支持的监控指标、配置RocketMQ监控告警。
  • 实施方法 从上面的消费重复场景可以看到,不同Message ID的消息可能有相同的消息内容,因此Message ID无法作为消息的唯一标识符。RocketMQ可以为消息设置Key,把业务的唯一标识作为消息的唯一标识,从而实现消息的幂等。为消息设置Key的示例代码如下: Message message = new Message(); message.setKey("Order_id"); // 设置消息的Key,可以使用业务的唯一标识作为Key,例如订单号等。 SentResult sendResult = mqProducer.send(message); 生产者发送消息时,消息已经设置了唯一的Key,在消费者消费消息时,可以根据消息的Key进行幂等处理。消费者通过getKeys()能够读取到消息的唯一标识(如订单号等),业务逻辑围绕该唯一标识进行幂等处理即可。
  • 方案概述 在RocketMQ的业务处理过程中,如果消息重发了多次,消费者端对该重复消息消费多次与消费一次的结果是相同的,多次消费并没有对业务产生负面影响,那么这个消息处理过程是幂等的。消息幂等保证了无论消息被重复投递多少次,最终的处理结果都是一致的,避免了因消息重复而对业务产生影响。 例如在支付场景下,用户购买商品后进行支付,由于网络不稳定导致用户收到多次扣款请求,导致重复扣款。但实际上扣款业务只应进行一次,商家也只应产生一条订单流水。这时候使用消息幂等就可以避免这个问题。 在实际应用中,导致消息重复的原因有网络闪断、客户端故障等,且可能发生在消息生产阶段,也可能发生在消息消费阶段。因此,可以将消息重复的场景分为以下两类: 生产者发送消息时发生消息重复: 生产者发送消息时,消息成功发送至服务端。如果此时发生网络闪断,导致生产者未收到服务端的响应,此时生产者会认为消息发送失败,因此尝试重新发送消息至服务端。当消息重新发送成功后,在服务端中就会存在两条内容相同的消息,最终消费者会消费到两条内容一样的重复消息。 消费者消费消息时发生消息重复: 消费者消费消息时,服务端将消息投递至消费者并完成业务处理。如果此时发生网络闪断,导致服务端未收到消费者的响应,此时服务端会认为消息投递失败。为了保证消息至少被消费一次,服务端会尝试投递之前已被处理过的消息,最终消费者会消费到两条内容一样的重复消息。
  • 步骤二:创建RocketMQ实例 使用RocketMQ进行消息生产和消费时,必须先创建RocketMQ实例。实例中的虚拟机资源会存储Topic信息。 进入购买RocketMQ实例页面。 设置实例信息,配置详情请参考表2。 表2 设置实例信息 参数 参数说明 计费模式 选择实例的计费模式。此处选择“按需计费”,即按照实例的实际使用时长计费,秒级计费,按小时结算。 区域 选择靠近您客户的区域,可以降低网络时延、提高访问速度。此处选择“华北-北京四”。 项目 选择区域对应的项目。此处选择“华北-北京四”。 可用区 可用区指在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。此处选择“可用区1”。 实例名称 填写实例名称,此处配置为“rocketmq-test”。 企业项目 企业项目是对企业不同项目间资源的分组和管理,属于逻辑隔离。此处选择“default”。该参数针对企业用户使用。 规格选择模式 选择实例的规格设置模式,此处选择“默认”,即自定义RocketMQ实例的版本号、实例类型、部署架构、实例规格和存储空间。 版本 选择实例的版本。此处选择“4.8.0”。 RocketMQ实例创建后,版本号不支持修改。 部署架构 选择实例的部署架构。此处选择“集群”。 代理规格 选择实例相应的代理规格。此处选择“rocketmq.4u8g.cluster”。 代理数量 选择实例相应的代理数量。此处选择“1”。 代理存储空间 选择存储RocketMQ数据的磁盘类型和单个代理存储空间。选择“超高I/O 300GB”。实例总存储空间 = 单个代理的存储空间 * 代理数量 虚拟私有云 选择实例的VPC和子网。此处选择步骤一:准备工作中已创建的VPC和子网。 安全组 选择实例的安全组。此处选择步骤一:准备工作中已创建的安全组。 SSL 开启SSL,表示服务端与客户端之间通过密文传输,安全性较高,性能较低。此处选择开启SSL。 ACL访问控制 开启ACL访问控制可以对生产消息和消费消息进行权限管理。此处选择关闭ACL访问控制。 更多配置 公网访问 开启公网访问需要绑定弹性IP地址。此处选择关闭公网访问。 标签 标签是RocketMQ实例的标识。此处不设置标签。 描述 描述是对实例的补充说明。此处不填写描述信息。 图2 设置实例信息 填写完上述信息后,单击“立即购买”,进入规格确认页面。 确认实例信息无误后,勾选“协议”,并单击“提交”请求。 在实例列表页面,查看RocketMQ实例是否创建成功。 创建实例大约需要3到15分钟,此时实例的“状态”为“创建中”。 当实例的“状态”变为“运行中”时,说明实例创建成功。 当实例的“状态”变为“创建失败”,请删除创建失败的实例,然后重新创建。如果重新创建仍然失败,请联系客服。 实例创建成功后,单击实例名称,进入实例基本信息页面。 记录实例的连接地址,便于生产和消费消息时使用。 图3 记录实例连接地址
  • 相关信息 如果您想了解关于RocketMQ的相关概念,请参考RocketMQ基本概念。 RocketMQ实例创建时,如果消费者客户端与生产者客户端无需通过密文传输,那么您可以关闭SSL。此时连接RocketMQ实例生产和消费消息的操作请参见使用客户端连接RocketMQ(关闭SSL)。 如果您需要创建多个用户并为其赋予不同的Topic和消费组权限,以达到用户之间的权限隔离,那么您需要先开启ACL访问控制并配置ACL用户,具体操作请参考开启RocketMQ ACL访问和配置RocketMQ ACL用户。 如果您需要通过公网访问RocketMQ实例,请参见配置RocketMQ实例的公网访问。
  • 步骤四:连接RocketMQ实例生产和消费消息 在ECS环境中进入“rocketmq-tutorial/bin”目录。 cd rocketmq-tutorial/bin 运行生产普通消息命令。 命令示例如下: JAVA_OPT=-Dtls.enable=true sh mqadmin sendMessage -n "10.xxx.xxx.89:8100;10.xxx.xxx.144:8100" -t Topic01 -p "hello rocketmq" 10.xxx.xxx.89:8100;10.xxx.xxx.144:8100:表示RocketMQ实例的“连接地址”,即7中记录的连接地址。 Topic01:表示RocketMQ实例下创建的Topic名称,即4中创建的Topic名称。 hello rocketmq:表示生产消息的内容。 运行消费普通消息命令。 命令示例如下: JAVA_OPT=-Dtls.enable=true sh mqadmin consumeMessage -n "10.xxx.xxx.89:8100;10.xxx.xxx.144:8100" -t Topic01 如上图中BODY显示的内容即为消费消息的内容。 如需停止消费使用Ctrl+C命令退出。