云服务器内容精选

  • 推荐的重试准则 重试准则 说明 仅重试幂等的操作 由于超时可能发生在下述任一阶段: 该命令由客户端发送成功,但尚未到达Redis。 命令到达Redis,但执行超时。 命令在Redis中执行结束,但结果返回给客户端时发生超时。 执行重试可能导致某个操作在Redis中被重复执行,因此不是所有操作均适合设计重试机制。通常推荐仅重试幂等的操作,例如SET操作,即多次执行SET a b命令,那么a的值只可能是b或执行失败;如果执行LPUSH mylist a则不是幂等的操作,可能导致mylist中包含多个a元素。 适当的重试次数与间隔 根据业务需求和实际场景调整适当的重试次数与间隔,否则可能引发下述问题: 如果重试次数不足或间隔太长,应用程序可能无法完成操作而导致失败。 如果重试次数过大或间隔过短,应用程序可能会占用过多的系统资源,且可能因请求过多而堵塞在服务器上无法恢复。 常见的重试间隔方式包括立即重试、固定时间重试、指数增加时间重试、随机时间重试等。 避免重试嵌套 重试嵌套可能导致重试时间被指数级放大。 记录重试异常并打印失败报告 在重试过程中,建议在WARN级别上打印重试错误日志,同时,仅在重试失败时打印异常信息。
  • 引发Redis操作失败的场景 场景 说明 故障触发了主备倒换 因Redis底层硬件或其他原因导致主节点故障后,会触发主备倒换,保障实例仍可用,主备倒换会产生约15到30秒的实例连接中断。 变更实例规格过程中短暂只读 变更规格过程中可能会出现秒级的实例连接中断和分钟级的只读。 更多变更规格可能产生的影响,请参考变更规格。 慢查询引起了请求堵塞 执行时间复杂度为O(N)的操作,引发慢查询和请求的堵塞,此时,客户端发起的其他请求可能出现暂时性失败。 复杂的网络环境 由于客户端与Redis服务器之间复杂网络环境引起,可能出现偶发的网络抖动、数据重传等问题,此时,客户端发起的请求可能会出现暂时性失败。 复杂的硬件问题 由于客户端所在的硬件偶发性故障引起,例如虚拟机HA,磁盘时延抖动等场景,此时,客户端发起的请求可能会出现暂时性失败。
  • Jedis连接池优势 Lettuce客户端及Jedis客户端比较如下: Lettuce: Lettuce客户端没有连接保活探测,错误连接存在连接池中会造成请求超时报错。 Lettuce客户端未实现testOnBorrow等连接池检测方法,无法在使用连接之前进行连接校验。 Jedis: Jedis客户端实现了testOnBorrow、testWhileIdle、testOnReturn等连接池校验配置。 开启testOnBorrow在每次借用连接前都会进行连接校验,可靠性最高,但是会影响性能(每次Redis请求前会进行探测)。 testWhileIdle可以在连接空闲时进行连接检测,合理配置阈值可以及时剔除连接池中的异常连接,防止使用异常连接造成业务报错。 在空闲连接检测之前,连接出现问题,可能会造成使用该连接的业务报错,此处可以通过参数控制检测间隔(timeBetweenEvictionRunsMillis)。
  • Jedis连接池参数配置建议 表1 Jedis连接池参数配置建议 参数 配置介绍 配置建议 maxTotal 最大连接,单位:个 根据Web容器的Http线程数来进行配置,估算单个Http请求中可能会并行进行的Redis调用次数,例如:Tomcat中的Connector内的maxConnections配置为150,每个Http请求可能会并行执行2个Redis请求,在此之上进行部分预留,则建议配置至少为:150 x 2 + 100= 400 限制条件:单个Redis实例的最大连接数。maxTotal和客户端节点数(CCE容器或业务VM数量)数值的乘积要小于单个Redis实例的最大连接数。 例如:Redis主备实例配置maxClients为10000,单个客户端maxTotal配置为500,则最大客户端节点数量为20个。 maxIdle 最大空闲连接,单位:个 配置与maxTotal一致。 minIdle 最小空闲连接,单位:个 一般来说建议配置为maxTotal的X分之一,例如此处常规配置建议为:100。 对于性能敏感的场景,为了防止经常连接数量抖动造成影响,可以配置与maxIdle一致,例如:400。 maxWaitMillis 最大获取连接等待时间,单位:毫秒 获取连接时最大的连接池等待时间,根据单次业务最长容忍的失败时间减去执行命令的超时时间得到建议值。例如:Http最长容忍的失败时间为15s,Redis请求的timeout设置为10s,则此处可以配置为5s。 timeout 命令执行超时时间,单位:毫秒 单次执行Redis命令最大可容忍的超时时间,根据业务程序的逻辑进行选择,出于对网络容错等考虑建议配置为不小于210ms。特殊的探测逻辑或者环境异常检测等,可以适当调整达到秒级。 minEvictableIdleTimeMillis 空闲连接逐出时间,大于该值的空闲连接一直未被使用则会被释放,单位:毫秒 如果希望系统不会经常对连接进行断链重建,此处可以配置一个较大值(xx分钟),或者此处配置为-1并且搭配空闲连接检测进行定期检测。 timeBetweenEvictionRunsMillis 空闲连接探测时间间隔,单位:毫秒 根据系统的空闲连接数量进行估算,例如系统的空闲连接探测时间配置为30s,则代表每隔30s会对连接进行探测,如果30s内发生异常的连接,经过探测后会进行连接排除。根据连接数的多少进行配置,如果连接数太大,配置时间太短,会造成请求资源浪费。对于几百级别的连接,常规来说建议配置为30s,可以根据系统需要进行动态调整。 testOnBorrow 向资源池借用连接时是否做连接有效性检测(ping),检测到的无效连接将会被移除。 对于业务连接极端敏感的,并且性能可以接受的情况下,可以配置为True,一般来说建议配置为False,启用连接空闲检测。 testWhileIdle 是否在空闲资源监测时通过ping命令监测连接有效性,无效连接将被销毁。 True testOnReturn 向资源池归还连接时是否做连接有效性检测(ping),检测到无效连接将会被移除。 False maxAttempts 在JedisCluster模式下,您可以配置maxAttempts参数来定义失败时的重试次数。 建议配置3-5之间,默认配置为5。 根据业务接口最大超时时间和单次请求的timeout综合配置,最大配置不建议超过10,否则会造成单次请求处理时间过长,接口请求阻塞。
  • 客户端使用VPCEP跨VPC访问Kafka时,使用的是明文连接还是密文连接? 使用明文连接还是密文连接,取决于“跨VPC访问协议”。跨VPC访问协议是在创建Kafka实例时设置的,实例创建成功后,不支持修改。 跨VPC访问协议的取值如下: PLAINTEXT:表示客户端访问Kafka实例时,无需认证,数据通过明文传输。 SASL_SSL:表示客户端访问Kafka实例时,使用SASL认证,数据通过SSL证书加密传输。 SASL_PLAINTEXT:表示客户端访问Kafka实例时,使用SASL认证,数据通过明文传输。
  • 步骤五:验证接口连通性 参考使用客户端连接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终端节点需要放通此网段。
  • 前提条件 准备弹性负载均衡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 开启公网公网状态显示“成功”后,表示开启公网访问成功。 单击左侧菜单栏的“概览”,返回实例基本信息页面查看公网访问信息。如需关闭公网访问,单击“关闭”。 下图中的“EIP”地址为Redis实例的公网访问地址,“监听器”后的端口号为公网访问的端口。 图2 公网访问连接地址 主备实例开启公网访问后,会生成两个监听器。一个主节点监听器(以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访问白名单。
  • 连接RocketMQ网络要求 客户端可以通过公网连接RocketMQ实例,也可以通过内网连接RocketMQ实例。使用内网连接时,注意以下几点: 如果客户端和RocketMQ实例部署在同一个VPC内,网络默认互通。 如果客户端和RocketMQ实例部署在不同VPC中,由于VPC之间逻辑隔离,客户端和RocketMQ实例不能直接通信,需要打通VPC之间的网络。 客户端连接RocketMQ实例的方式如表1所示。 表1 连接方式说明 连接方式 实现方式 参考文档 公网连接 在RocketMQ控制台开启公网访问,配置弹性公网IP,客户端通过弹性公网IP访问RocketMQ实例。 配置RocketMQ实例的公网访问 内网连接 客户端和RocketMQ实例部署在同一个VPC中,此时网络默认互通。 - 客户端和RocketMQ实例部署在同一个Region的不同VPC中,利用VPC对等连接将两个VPC间的网络打通,实现跨VPC访问。 对等连接 客户端连接RocketMQ实例前,需要放通如下安全组,否则会连接失败。 创建安全组后,系统默认添加入方向“允许安全组内的彼此通信”规则和出方向“放通全部流量”规则,此时使用内网通过同一个VPC访问RocketMQ实例,无需添加表2和表3的规则。 表2 安全组规则(RocketMQ实例4.8.0版本) 方向 协议 端口 源地址 说明 入方向 TCP 8100 RocketMQ客户端所在的IP地址或地址段。 使用TCP协议,通过内网访问元数据节点的端口。 入方向 TCP 8200 使用TCP协议,通过公网访问元数据节点的端口。 入方向 TCP 10100-10199 使用TCP协议,访问业务节点的端口。 表3 安全组规则(RocketMQ实例5.x版本) 方向 协议 端口 源地址 说明 入方向 TCP 8100 RocketMQ客户端所在的IP地址或地址段。 使用TCP协议,通过内网访问实例的端口。 入方向 TCP 8200 使用TCP协议,通过公网访问实例的端口。 入方向 TCP 10100-10199 使用TCP协议,访问业务节点的端口。 入方向 TCP 8080 使用gRPC协议,通过内网访问实例的端口。 入方向 TCP 8081 使用gRPC协议,通过公网访问实例的端口。 父主题: 配置RocketMQ网络连接
  • D CS 实例支持公网访问吗? Redis 3.0实例 目前只有Redis 3.0版本密码模式的实例支持公网访问,且可选择是否通过SSL方式来访问DCS缓存实例。建议使用前先下载CA证书,并使用CA证书来验证DCS缓存实例的证书,以确保缓存数据的安全。具体可参考公网连接Redis实例。 Redis 4.0及以上版本实例 Redis 4.0及以上版本的单机、主备、读写分离、Proxy集群实例支持通过ELB实现公网访问,需要先联系后台管理人员开通白名单后,开启公网访问。开启公网访问的操作,请参考开启Redis 4.0/5.0/6.0公网访问并获取公网访问地址。 Cluster集群实例不支持公网访问。 Memcached实例 暂不支持公网访问,您必须通过同一虚拟私有云下的弹性云服务器来访问缓存实例,以确保缓存数据的安全。如果您在应用开发调试阶段,可以通过ssh代理方式,实现本地环境访问实例。具体操作参考使用SSH隧道代理机制实现公网访问DCS实例。 父主题: 客户端和网络连接
  • 连接RabbitMQ网络要求 客户端可以通过公网连接RabbitMQ实例,也可以通过内网连接RabbitMQ实例。使用内网连接时,注意以下几点: 如果客户端和RabbitMQ实例部署在同一个VPC内,网络默认互通。 如果客户端和RabbitMQ实例部署在不同VPC中,由于VPC之间逻辑隔离,客户端和RabbitMQ实例不能直接通信,需要打通VPC之间的网络。 表1 连接方式说明 连接方式 实现方式 参考文档 公网连接 在RabbitMQ控制台开启公网访问,配置弹性公网IP,客户端通过弹性公网IP访问RabbitMQ实例。 配置RabbitMQ实例的公网访问 内网连接 客户端和RabbitMQ实例部署在同一个VPC中,此时网络默认互通。 - 客户端和RabbitMQ实例部署在同一个Region的不同VPC中,利用VPC对等连接将两个VPC间的网络打通,实现跨VPC访问。 对等连接 客户端连接RabbitMQ实例前,需要放通如下安全组,否则会连接失败。 创建安全组后,系统默认添加入方向“允许安全组内的弹性云服务器彼此通信”规则和出方向“放通全部流量”规则,此时使用内网通过同一个VPC访问RabbitMQ实例,无需添加表2或表3的规则。 表2 安全组规则(RabbitMQ 3.x.x版本) 方向 类型 协议 端口 源地址 说明 入方向 IPv4 TCP 5672 RabbitMQ客户端所在的IP地址或地址组 客户端使用IPv4地址访问RabbitMQ实例(关闭SSL加密) 入方向 IPv4 TCP 5671 RabbitMQ客户端所在的IP地址或地址组 客户端使用IPv4地址访问RabbitMQ实例(开启SSL加密) 入方向 IPv4 TCP 15672 RabbitMQ客户端所在的IP地址或地址组 访问Web界面UI地址(关闭SSL加密) 入方向 IPv4 TCP 15671 RabbitMQ客户端所在的IP地址或地址组 访问Web界面UI地址(开启SSL加密) 表3 安全组规则(RabbitMQ AMQP-0-9-1版本) 方向 类型 协议 端口 源地址 说明 入方向 IPv4 TCP 5672 RabbitMQ客户端所在的IP地址或地址组 访问RabbitMQ实例 父主题: 配置RabbitMQ网络连接
  • 排查思路 以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。 如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。 图1 排查思路 表1 排查思路 可能原因 处理措施 ECS网卡对应安全组规则未放通 解决方法请参考ECS网卡对应安全组规则未放通。 ECS网卡所在子网关联的网络ACL规则未放通 解决方法请参考ECS网卡所在子网关联的网络ACL规则未放通。 ECS网卡内部网络配置问题 解决方法请参考ECS网卡内部网络配置问题。 端口不通 解决方法请参考端口不通。
  • ECS网卡所在子网关联的网络ACL规则未放通 查看弹性云服务器的网卡是否处于网络ACL的关联子网中。 在网络ACL列表中查看网络ACL的状态。 状态显示“已开启”,则表示网络ACL已经开启。执行3。 状态显示“未开启”,则表示网络ACL已经关闭。执行4。 单击网络ACL名称,分别在“入方向”和“出方向”的页签下添加ICMP放通规则。 网络ACL关闭时,默认规则为丢弃所有出入方向的包。此时,请删除网络ACL或者开启ACL并放通ICMP规则。
  • ECS网卡内部网络配置问题 以下步骤以Linux系统为例,Windows操作系统请检查系统防火墙限制。 确认弹性云服务器是否有多网卡配置。如果配置多网卡且弹性公网IP绑定在非主网卡上,请在弹性云服务内部配置策略路由,请参考如何配置多网卡弹性云服务器的策略路由?。 登录弹性云服务器,执行以下命令,查看网卡是否创建且网卡获取私有IP地址。若无网卡信息或者无法获取私有IP地址,请联系技术支持。 ifconfig 图3 查看网卡IP地址 执行以下命令,查看弹性云服务器的CPU占用率是否过高,CPU占有率超过80%有可能会影响ECS通信。 top 执行以下命令,查看弹性云服务器内容部是否有安全规则的其他限制。 iptables-save 执行以下命令,查看“/etc/hosts.deny”文件中是否包含了限制通信的IP地址。 vi /etc/hosts.deny 如果hosts.deny文件里面包含了对端的IP地址,请将该IP从hosts.deny文件中删除并保存文件。