华为云用户手册

  • 环境变量填写指导 访问E CS 购买页面获取flavor 信息。 图6 获取规格信息 访问IMS 镜像服务 获取镜像ID信息。 图7 获取镜像ID 访问我的凭证获取region,以“华北-北京四”为例。 图8 region 获取虚拟私有云 VPC 的ID信息。 图9 虚拟私有云VPC 获取虚拟私有云 VPC下的子网 ID信息。 在获取VPC ID信息的页面单击“子网个数”下的数字跳转到子网页面。 图10 子网信息页面跳转 复制子网ID信息。 图11 子网
  • 名词解释 基本概念、云服务简介、专有名词解释 弹性云服务器 ECS:是一种可随时自助获取、可弹性伸缩的云服务器,可帮助您打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率 弹性公网IP EIP:提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务。可以与弹性云服务器、裸金属服务器、虚拟VIP、弹性负载均衡、NAT网关等资源灵活地绑定及解绑。 虚拟私有云 VPC:是用户在云上申请的隔离的、私密的虚拟网络环境。用户可以自由配置VPC内的IP地址段、子网、安全组等子服务,也可以申请弹性带宽和弹性IP搭建业务系统。 对象存储服务 OBS:是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。 函数工作流 FunctionGraph:是一项基于事件驱动的函数托管计算服务。使用FunctionGraph函数,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。此外,按函数实际执行资源计费,不执行不产生费用。 消息通知 服务 SMN :消息通知服务(Simple Message Notification)是可靠、可扩展、海量的消息处理服务。它大大简化系统的耦合,能够根据用户的需求,向订阅者主动推送消息的服务,订阅者可以是电子邮件、短信、HTTP和HTTPS等。
  • 资源和成本规划 该解决方案主要部署如下资源,不同产品的花费仅供参考,具体请参考华为云官网价格,实际以收费账单为准: 表1 资源和成本规划(按需计费) 华为云服务 配置示例 每月预估花费(调用100万次) 函数工作流 Function Graph 区域:华北-北京四 产品:函数 请求次数: 0-100万次: 0元/100万次 100万次以上 : 1.33元/100万次 计量时间: 0-400,000 GB/秒: 0元/GB*秒 400,000 GB/秒以上 :0.11元/1000GB*秒 费用消耗较低,详细请参考每月账单。计费说明参考价格详情。 对象存储服务 OBS 区域:华北-北京四 存储空间:数据存储(单AZ存储) 默认存储类别:标准存储 桶策略:私有 请求费用:GET/PUT 0.01元/万次,DELETE 免费 存储空间:0.99元/10GB/月 流量费用: 内/公网流入流量(数据上传到OBS) 0元 内网流出流量 0元 存储费用消耗较低,详细请参考每月账单。计费说明参考价格详情 合计 - 费用消耗较低,详细请参考每月账单
  • 创建rf_admin_trust委托 进入华为云官网,打开控制台管理界面,鼠标移动至个人账号处,打开“ 统一身份认证 ”菜单。 图1 控制台管理界面 图2 统一身份认证菜单 进入“委托”菜单,搜索“rf_admin_trust”委托。 图3 委托列表 如果委托存在,则不用执行接下来的创建委托的步骤 如果委托不存在,则执行接下来的步骤创建委托 单击步骤2界面中的“创建委托”按钮,在委托名称中输入“rf_admin_trust”,委托类型选择“云服务”,选择“ RFS ”,单击“下一步”。 图4 创建委托 在搜索框中输入“Tenant Administrator”权限,并勾选搜索结果。 图5 选择策略 选择“所有资源”,并单击下一步完成配置。 图6 设置授权范围 “委托”列表中出现“rf_admin_trust”委托则创建成功。 图7 委托列表
  • 快速部署 本方案只支持创建 按需计费 的弹性云服务器 ECS实例。 本章节主要帮助用户快速部署该解决方案。 表1 参数填写说明 参数名称 类型 是否必填 参数解释 默认值 subscription_endpoints_sms String 否 订阅批量创建弹性云服务器 ECS实例失败后告警的终端,必须是手机号码。(手机号码示例:185xxxx0000)。 空 subscription_endpoints_email String 否 订阅批量创建弹性云服务器 ECS实例失败后告警的终端,必须是邮箱地址。(邮箱地址示例:username@example.com)。 空 create_time String 是 批量创建弹性云服务器 ECS实例的时间,格式要求:年-月-日 时-分-秒,例:2024-01-01 02:00:00,必须小于批量删除时间,年份支持2024~2099. 2024-01-01 02:00:00 delete_time String 是 批量删除弹性云服务器 ECS实例的时间,格式要求:年-月-日 时-分-秒,例:2024-01-01 08:00:00,需要大于批量创建时间,建议至少大于10分钟,年份支持2024~2099. 2024-01-01 08:00:00 ecs_count String 是 批量创建弹性云服务器 ECS实例的数量,单次最多200台。 空 region String 是 批量创建的弹性云服务器 ECS实例所在的区域。获取方式参考 图8 cn-north-4 ecs_flavor String 是 批量创建弹性云服务器 ECS实例的规格。请在对应region下查询,获取方式参考 图6 空 image_id String 是 批量创建的E弹性云服务器 ECS实例的系统镜像。不同region镜像ID不同,请在对应region下查询,获取方式参考 图7 空 bandwidth_charge_mode String 是 创建的弹性云服务器 ECS实例绑定的弹性公网IP EIP的计费模式。可选值为:traffic(按流量计费)、bandwidth(按带宽计费)。 traffic bandwidth_size String 是 弹性公网IP EIP带宽大小。按带宽计费,单位:Mbit/s。取值范围:1-2,000。 空 vpc_id String 是 批量创建的弹性云服务器 ECS实例所在虚拟私有云 VPC的ID信息,请在对应region下提前创建、查询。获取方式参考 图9 空 subnet_id String 是 批量创建的弹性云服务器 ECS实例所在子网Subnet的ID信息,请在对应region下提前创建、查询。获取方式参考 图10 空 ecs_password String 是 弹性云服务器 ECS实例初始密码,创建完成后,登录弹性云服务器 ECS控制台修改密码。取值范围:长度为8-26位,密码至少必须包含大写字母、小写字母、数字和特殊字符(!@$%^-_=+[{}]:,./?)中的三种,密码不能包含用户名或用户名的逆序。管理员账户为root. 空 retry_count String 是 批量创建弹性云服务器 ECS实例的重试次数。 3 登录华为云解决方案实践,选择“定时批量创建删除ECS实例”并单击“一键部署”,跳转至该解决方案一键部署界面。 图1 解决方案实施库 单击“一键部署”,跳转至该解决方案创建资源栈部署界面。 图2 创建资源栈 单击“下一步”,参考表1完成自定义参数填写并单击“下一步”。 图3 参数配置 在资源设置界面中,“权限委托”下拉框中选择“rf_admin_trust”委托,单击“下一步”。 图4 资源栈设置 在配置确认界面中,单击“创建执行计划”。 图5 创建执行计划 在弹出的创建执行计划框中,自定义填写执行计划名称,单击“确定”。 图6 创建执行计划 单击“部署”,弹出执行计划提示信息,单击“执行”确认执行。 图7 执行计划确认 图8 确认执行 完成部署。 图9 部署成功 父主题: 实施步骤
  • CodeArts Build最佳实践汇总 本文汇总了基于编译构建服务(CodeArts Build)常见应用场景的操作实践,为每个实践提供详细的方案描述和操作指导,帮助用户轻松构建。 表1 CodeArts Build最佳实践一览表 最佳实践 说明 基于Maven构建产物制作Docker镜像并发布到镜像仓(内置执行机/图形化构建) 本实践为您介绍如何使用CodeArts Build将构建产物通过Dockerfile文件制作成Docker镜像,并发布到 容器镜像服务 的镜像仓库,您可以使用容器镜像中的构建产物进行编译或者部署。 使用Maven构建上传软件包至私有依赖库(内置执行机/图形化构建) 当CodeArts Build提供的默认依赖库不满足业务要求时,您可使用自己搭建的私有依赖库进行构建。本实践以Maven构建为例,为您介绍构建完后如何上传构建产物到私有依赖库,以便后续构建使用,其他构建语言操作类似。 使用Maven构建实现私有依赖包的上传及下载引用(内置执行机/图形化构建) 本实践案例将为您介绍,如何在CodeArts Build构建工程中引用私有依赖仓中的二方或三方依赖包,实现应用的编译构建。 使用NPM构建上传软件包至软件发布库(内置执行机/图形化构建) 本实践帮助您了解如何通过编译构建服务的内置执行机,并以图形化构建的方式编译Node.js项目并上传软件包至软件发布库。 使用自定义执行机执行Maven构建(自定义执行机/图形化构建) 当编译构建服务提供的内置执行机构建环境不满足业务要求时,您可接入自行提供的计算资源,通过注册的方式托管到编译构建服务中,委托编译构建服务进行调度并执行构建任务。本实践我们通过“Maven构建”和“上传软件包到软件发布库”两个构建步骤来演示使用自定义执行机的构建场景。 使用Maven构建上传软件包和推送镜像到SWR(内置执行机/代码化构建) 编译构建服务支持通过yaml文件配置构建脚本,用户可以将构建时需要配置的构建环境、构建参数、构建命令、构建步骤等操作,通过yaml语法编写成build.yml文件实现,并且将build.yml文件和被构建的代码一起存储到代码仓库。执行构建任务时,系统会以build.yml文件作为构建脚本执行构建任务,使构建过程可追溯、可还原,安全可信。本实践以使用Maven构建为例,为您演示上传软件包至软件发布库和推送镜像到SWR。 使用Maven构建执行多任务构建工程(内置执行机/代码化构建) 在编译构建中,构建任务是构建的最小单元,适用于业务比较简单的场景,但是在有些复杂的构建场景下,构建任务可能并不能满足复杂的构建要求。例如,用户希望更模块化、更加细粒度的拆分构建任务,并按照构建任务之间的依赖顺序进行构建。 为此,编译构建服务支持使用BuildFlow将多个存在依赖关系的构建任务按照有向无环图(DAG)的方式组装起来,BuildFlow将会按照构建的依赖关系并发进行构建。 本实践为您演示构建任务Job3依赖于构建任务Job1和构建任务Job2的构建工程。 基于私有依赖库使用Maven构建并上传软件包(内置执行机/图形化构建) 当CodeArts Build提供的默认依赖库不满足业务要求时,用户可使用自己搭建的私有依赖库进行Maven构建。 使用自定义构建环境执行构建任务(内置执行机/图形化构建) 在构建过程中,通常会遇到以下这样的场景: CodeArts Build默认构建环境中支持的Java版本是1.8,而实际用户需要使用java 21。 构建时需要使用企业专有工具,CodeArts Build平台未支持。 针对于以上构建场景,本实践将为您介绍如何使用自定义构建环境执行构建任务。 对C/C++构建工程进行构建加速(内置执行机/图形化构建) 针对C/C++语言构建工程,需要提升构建效率的问题,编译构建服务支持构建加速能力,通过分布式编译和增量编译等技术实现构建加速,支撑企业研发过程的快速迭代,缩短产品的上市周期。 HE2E DevOps实践:构建应用部分 本文以“DevOps全流程示例项目”为例,介绍如何在项目中配置构建任务,以及通过代码变更触发自动构建来实现持续集成。
  • 前提条件 已创建DCS缓存实例,且状态为“运行中”。 客户端所在服务器与DCS缓存实例网络互通: 客户端与Redis实例所在VPC为同一VPC 同一VPC内网络默认互通。 客户端与Redis实例所在VPC为相同region下的不同VPC 如果客户端与Redis实例不在相同VPC中,可以通过建立VPC对等连接方式连通网络,具体请参考:缓存实例是否支持跨VPC访问?。 客户端与Redis实例所在VPC不在相同region 如果客户端服务器和Redis实例不在同一region,仅支持通过云专线打通网络,请参考云专线。 公网访问 客户端公网访问Redis 4.0/5.0/6.0实例时,需要开启实例公网访问开关,具体请参考开启Redis 4.0/5.0/6.0公网访问并获取公网访问地址。 客户端所在服务器已安装JDK1.8以上版本和Intellij IDEA开发工具,下载jedis客户端(点此处下载jar包)。 本文档下载的开发工具和客户端仅为示例,您可以选择其它类型的工具和客户端。
  • 方案概述 应用场景 视频、直播弹幕展示和社交网站评论回复等场景,要求时效性高,互动性强,类似这样的业务对平台的系统时延有着非常高的要求。如果使用关系型数据库,会涉及到按评论时间逆排序,随着评论越来越多,排序效率越来越低,且并发频繁。 解决方案 使用分布式缓存服务(DCS)的Redis缓存,可以从不同的维度,对某个key-value的列表进行降序显示。例如,直播弹幕中的弹幕列表,可以采用zset有序集合结构,以时间戳为score权重参数进行排序,value可以直接存储弹幕内容。社交网站评论回复,同样也可以采用zset结构,但是由于社交网站评论和回复的内容很多,展示结构有一定的层级,同时需要持久化到本地,可以用value存储评论主键ID,评论内容存放到数据库,通过ID查询评论内容。
  • 前提条件 已创建DCS缓存实例,且状态为“运行中”。 客户端所在服务器与DCS缓存实例网络互通: 客户端与Redis实例所在VPC为同一VPC 同一VPC内网络默认互通。 客户端与Redis实例所在VPC为相同region下的不同VPC 如果客户端与Redis实例不在相同VPC中,可以通过建立VPC对等连接方式连通网络,具体请参考:缓存实例是否支持跨VPC访问?。 客户端与Redis实例所在VPC不在相同region 如果客户端服务器和Redis实例不在同一region,仅支持通过云专线打通网络,请参考云专线。 公网访问 客户端公网访问Redis 4.0/5.0/6.0实例时,需要开启实例公网访问开关,具体请参考开启Redis 4.0/5.0/6.0公网访问并获取公网访问地址。 客户端所在的服务器已安装JDK1.8以上版本和开发工具(本文档以安装Eclipse为例),下载jedis客户端(单击此处直接下载jar包)。 本文档下载的开发工具和客户端仅为示例,您可以选择其它类型的工具和客户端。
  • 运行结果 视频直播 弹幕代码示例运行结果如下: 直播弹幕列表弹幕内容: message-07f1add5-2f85-4309-9f31-313c860b33dc, 发送时间: 1686902337377弹幕内容: message-2062e817-3145-4d8b-af7f-46f334c8569c, 发送时间: 1686902337394弹幕内容: message-ad36a0ca-e8bd-4883-a091-e12a25c00106, 发送时间: 1686902337396弹幕内容: message-f02f9960-bb57-49ae-b7d8-6bd6d3ad3d14, 发送时间: 1686902337412弹幕内容: message-5ca39948-866e-4e54-a469-f958cae843f6, 发送时间: 1686902337457弹幕内容: message-5cc8b4ba-da61-4d01-9625-cf2e7337ef10, 发送时间: 1686902337489弹幕内容: message-15378516-18ce-4da7-bd3c-35c57dd65602, 发送时间: 1686902337495弹幕内容: message-1b280525-53e5-4fc6-a3e7-fb8e71eef85e, 发送时间: 1686902337540弹幕内容: message-adf876d1-e747-414e-92a2-397fc329bd58, 发送时间: 1686902337541弹幕内容: message-1d8d7901-164f-4dd4-abb4-6f2345164b0e, 发送时间: 1686902337582弹幕内容: message-fb35b1b4-277a-48bf-b22b-80070aae8475, 发送时间: 1686902337667弹幕内容: message-973b1b03-bf95-44d8-ab91-0c317b2d61b3, 发送时间: 1686902337755弹幕内容: message-1481f883-757d-47f7-b8c0-df024d6e64a4, 发送时间: 1686902337770弹幕内容: message-b79292ca-2409-43fb-aaf0-e33f3b9d9c8d, 发送时间: 1686902337820弹幕内容: message-66b0e955-d509-4475-9ae5-12fb86cf9596, 发送时间: 1686902337844弹幕内容: message-12b6d15a-037a-47ee-8294-8625d202c0a0, 发送时间: 1686902337907弹幕内容: message-fbc06323-da2a-44b8-874b-d2cf1a737064, 发送时间: 1686902337927弹幕内容: message-7a0f787c-aff1-422f-9e62-4beda0cd5914, 发送时间: 1686902337977弹幕内容: message-8ba5e4e0-22af-4f80-90a6-35062967e0fd, 发送时间: 1686902337992弹幕内容: message-fa9e1169-e918-4141-9805-87edcf84c379, 发送时间: 1686902338000弹幕内容: message-5d17be15-ba2e-461f-aba5-65c20c21d313, 发送时间: 1686902338059弹幕内容: message-dcedc840-1be7-496a-b781-5b79c2091fe5, 发送时间: 1686902338067弹幕内容: message-9e39eb28-6629-4d4c-8970-2acdc0e81a5c, 发送时间: 1686902338102弹幕内容: message-030b11fe-c258-4ca2-ac82-5e6ca1eb688f, 发送时间: 1686902338211弹幕内容: message-93322018-a987-47ba-8093-3937dddda97d, 发送时间: 1686902338242弹幕内容: message-bc04a9b0-ec83-4a24-83f6-0a4f25ee8896, 发送时间: 1686902338281弹幕内容: message-c6dd96d0-c938-41e4-b5d8-6275fdf83050, 发送时间: 1686902338290弹幕内容: message-12b70173-1b86-4370-a7ea-dc0ade135422, 发送时间: 1686902338312弹幕内容: message-a39c2ef8-8167-4945-b60d-355db6c69005, 发送时间: 1686902338318弹幕内容: message-2c3bf2fb-5298-472c-958c-c4b53d734e89, 发送时间: 1686902338326 最新的5条弹幕信息弹幕内容: message-2c3bf2fb-5298-472c-958c-c4b53d734e89, 发送时间: 1686902338326弹幕内容: message-a39c2ef8-8167-4945-b60d-355db6c69005, 发送时间: 1686902338318弹幕内容: message-12b70173-1b86-4370-a7ea-dc0ade135422, 发送时间: 1686902338312弹幕内容: message-c6dd96d0-c938-41e4-b5d8-6275fdf83050, 发送时间: 1686902338290弹幕内容: message-bc04a9b0-ec83-4a24-83f6-0a4f25ee8896, 发送时间: 1686902338281 Process finished with exit code 0
  • 制作客户端镜像 下载Redis客户端。 登录CCE集群节点。 单击创建完成的CCE节点池名称,进入CCE节点池,单击右上角的“远程登录”。 执行gcc --version检查操作系统是否安装了用于编译Redis程序的GCC编译器。如下图,表示已经安装了GCC编译器。 如未安装GCC编译器,请使用以下命令安装GCC编译器。 yum -y install gccyum -y install gcc-c++ 执行以下命令,在home目录下创建redis目录,并进入该目录。 cd /home && mkdir redis && cd redis 执行以下命令下载Redis客户端。此处以下载5.0.13版本的客户端为例。 wget https://download.redis.io/releases/redis-5.0.13.tar.gz 解压Redis,进入Redis目录,执行编译命令后返回redis目录。 tar xvzf redis-5.0.13.tar.gzcd redis-5.0.13 && make redis-clicd .. 创建Dockerfile。 使用vim Dockerfile命令创建Dockerfile,并填写以下信息。 FROM centos:7RUN useradd -d /home/redis -m redis COPY ./redis-5.0.13 /home/redis/redis-5.0.13RUN chown redis:redis /home/redis/redis-5.0.13 -RUSER redisENV HW_HOME=/home/redis/redis-5.0.13 ENV PATH=$HW_HOME/src:$PATH WORKDIR /home/redis/ 按下Esc键退出编辑模式,执行:wq!保存配置并退出编辑界面。 构建客户端镜像。 在控制台的服务列表中选择“容器镜像服务 SWR”,进入容器镜像服务总览页。 单击右上角“创建组织”,输入组织名称,新建一个组织。也可以使用已有的组织(单击左侧“组织管理”可查看已有组织。) 在SWR总览页单击右上角“登录指令”获取登录指令,复制登录指令。(登录指令结尾的swr.xxxxxx.com为镜像仓库地址。) 图1 获取登录指令 使用复制的登录指令在CCE节点中执行,登录SWR。 图2 登录SWR 执行以下命令构建镜像。 docker build -t {Image repository address}/{Organization name}/{Image name :version}. 其中Image repository address为镜像仓库地址,即登录指令的结尾部分;Organization name为b步骤创建的组织名称;Image name为需要构建的镜像名称,version为镜像的版本。请根据实际值进行替换。例如:docker build -t swr.xxxxxx.com/study1/redis:v1 . 图3 构建镜像 执行以下命令将客户端镜像上传到SWR。 docker push {Image repository address}/{Organization name}/{Image name :version} 图4 上传镜像 上传镜像后,可在SWR控制台“我的镜像”页面查看到Redis镜像。 图5 查看镜像
  • 前提条件 准备以下实例资源: 创建VPC和子网,例如vpc-test。创建方式请参考创建虚拟私有云和子网。 (可选)建议创建2个子网,将DCS实例放到一个子网,CCE集群放到另一个子网,方便管理。 创建DCS实例,例如dcs-test。创建方式请参考购买Redis实例。 创建的DCS实例时,“虚拟私有云”请选择所创建的VPC(vpc-test)及其子网1。 创建CCE集群,例如cce-test。创建方式请参考购买CCE集群。 创建CCE集群时,“网络模型”请选择“VPC网络";“虚拟私有云”和“子网”请选择所创建的VPC(vpc-test)及其子网2。 创建CCE节点池,例如cce-test-nodepool。创建方式请参考创建节点池。 创建CCE节点池时,“节点类型”请选择“弹性云服务器-虚拟机”,“容器引擎”请选择“Docker”,“操作系统”请选择“CentOS 7.6”,并需要绑定“弹性公网IP”,选择“使用已有”或“自动创建”。
  • 测试Redis连接 登录CCE集群节点,参考登录CCE集群节点。 参考通过kubectl连接集群,下载和配置kubectl配置文件。 执行以下命令,当返回状态为“Running”时,说明Redis容器处于运行状态。 kubectl get pod -n default 使用以下命令查看Redis容器的日志。 kubectl logs --tail 10 -f redis-xxxxxxxx -n default 其中redis-xxxxxxxx为创建的工作负载实例名称。(单击工作负载名称,进入工作负载,可查看工作负载实例名称。) 从返回信息中,可以看到DCS服务返回的信息为在前面连接Redis时设置的数据值“hello redis!”。 测试完成。
  • 引发Redis操作失败的场景 场景 说明 故障触发了主备倒换 因Redis底层硬件或其他原因导致主节点故障后,会触发主备倒换,保障实例仍可用,主备倒换会产生约15到30秒的实例连接中断。 变更实例规格过程中短暂只读 变更规格过程中可能会出现秒级的实例连接中断和分钟级的只读。 更多变更规格可能产生的影响,请参考变更规格。 慢查询引起了请求堵塞 执行时间复杂度为O(N)的操作,引发慢查询和请求的堵塞,此时,客户端发起的其他请求可能出现暂时性失败。 复杂的网络环境 由于客户端与Redis服务器之间复杂网络环境引起,可能出现偶发的网络抖动、数据重传等问题,此时,客户端发起的请求可能会出现暂时性失败。 复杂的硬件问题 由于客户端所在的硬件偶发性故障引起,例如虚拟机HA,磁盘时延抖动等场景,此时,客户端发起的请求可能会出现暂时性失败。
  • 推荐的重试准则 重试准则 说明 仅重试幂等的操作 由于超时可能发生在下述任一阶段: 该命令由客户端发送成功,但尚未到达Redis。 命令到达Redis,但执行超时。 命令在Redis中执行结束,但结果返回给客户端时发生超时。 执行重试可能导致某个操作在Redis中被重复执行,因此不是所有操作均适合设计重试机制。通常推荐仅重试幂等的操作,例如SET操作,即多次执行SET a b命令,那么a的值只可能是b或执行失败;如果执行LPUSH mylist a则不是幂等的操作,可能导致mylist中包含多个a元素。 适当的重试次数与间隔 根据业务需求和实际场景调整适当的重试次数与间隔,否则可能引发下述问题: 如果重试次数不足或间隔太长,应用程序可能无法完成操作而导致失败。 如果重试次数过大或间隔过短,应用程序可能会占用过多的系统资源,且可能因请求过多而堵塞在服务器上无法恢复。 常见的重试间隔方式包括立即重试、固定时间重试、指数增加时间重试、随机时间重试等。 避免重试嵌套 重试嵌套可能导致重试时间被指数级放大。 记录重试异常并打印失败报告 在重试过程中,建议在WARN级别上打印重试错误日志,同时,仅在重试失败时打印异常信息。
  • DCS最佳实践汇总 本文汇总了基于分布式缓存服务DCS常见应用场景的操作实践,为每个实践提供详细的方案描述和操作指导,帮助用户轻松使用DCS。 表1 DCS最佳实践一览表 最佳实践 说明 使用DCS实现热点资源顺序访问 该实践介绍如何使用Redis对分布式应用加锁。通过加锁对热点资源进行顺序访问控制,避免在互联网商品秒杀场景出现库存超卖及无序访问等现象。 使用DCS实现排行榜功能 本章节介绍如何使用DCS Redis实现商品热销排行榜的功能。 使用DCS实现视频直播弹幕和社交网站评论的功能 本章节介绍如何使用DCS Redis缓存从不同的维度,对某个key-value的列表进行降序显示,应用于视频直播弹幕和社交网站评论的场景。 使用DCS实现游戏开合服的数据同步 该实践介绍如何使用Redis实现不同服务器数据同步。在游戏开合服过程中,会遇到如何将不同服务器数据同步的问题。通过DCS服务Redis的消息队列pub/sub机制,可以将数据变更消息发布到Redis的频道中,其他游戏服务器订阅该频道,接收数据变更消息,从而实现数据同步。 使用DCS实现电商秒杀功能 本章节介绍在电商秒杀场景中,利用DCS Redis作为数据库的缓存,客户端通过访问Redis进行库存查询和下单操作,以满足电商秒杀系统高并发的需求。 使用DCS改造传统应用系统数据库 本章节以将MySQL数据库中的一张表迁移到华为云DCS Redis中为例,介绍数据迁移的过程。 升级Redis 3.0实例到高版本实例 本章节介绍如何通过数据迁移+交换实例IP的方式升级Redis 3.0实例到高版本。Redis 3.0版本较老,开源社区已不再对其进行更新,DCS提供的Redis 4.0及以上版本兼容Redis 3.0,建议客户尽快将DCS Redis 3.0升级到高版本。 使用Nginx实现公网访问DCS 华为云DCS的Redis 4.0及以上版本不支持绑定弹性IP,无法直接通过公网访问。本章节主要介绍通过跳板机访问VPC内Redis 4.0/5.0/6.0单机、主备、读写分离、Proxy集群实例的操作,Cluster集群实例暂不支持使用该方案进行公网访问。 使用SSH隧道代理实现公网访问DCS 华为云DCS的Redis 4.0及以上版本不支持绑定弹性IP,无法直接通过公网访问。本章节主要介绍通过SSH工具的隧道代理机制,通过一台既能连接DCS缓存实例,又能被本地电脑访问的中转服务器,实现“代理转发”,从而访问VPC内Redis单机、主备、读写分离、Proxy集群实例。Cluster集群实例暂不支持使用该方案进行公网访问。 使用华为云ELB公网访问DCS 华为云DCS的Redis 4.0及以上版本不支持绑定弹性IP,无法直接通过公网访问。本章节主要介绍通过ELB“跨VPC后端”方式公网访问单机、主备、读写分离、Proxy集群、Cluster集群单节点。 客户端通过CCE连接DCS 随着容器技术的普及,越来越多的应用程序部署在容器环境中。该实践介绍如何将Redis客户端部署到云容器引擎CCE的集群容器中,通过CCE连接DCS。 配置Redis客户端重试机制 本章节介绍Jedis客户端的重试配置, 通过设计完备的自动重试机制可以大幅降低基础设施或运行环境故障带来的影响。 DCS数据安全 本文提供了使用DCS过程中的安全最佳实践,旨在为提高整体安全能力,提供可操作的规范性指导。 DCS使用规范 本章节介绍DCS Redis在业务使用、数据设计、命令使用、SDK使用和运维管理方面的使用建议。 发现和处理Redis大Key热Key 本章节介绍在使用DCS Redis过程中,如何发现和优化大Key和热Key等问题。 配置Redis Pipeline DCS Redis支持原生Redis的Pipeline(管道传输)机制,本章节介绍关于Redis Pipeline的使用。 优化Jedis连接池 JedisPool是Jedis客户端的连接池,合理设置JedisPool资源池参数能够有效地提升Redis性能与资源利用率。本文档将对JedisPool的使用和资源池的参数配置提供详细的说明和配置建议。
  • JedisPool参数说明 Jedis连接是连接池中JedisPool管理的资源,JedisPool保证资源在一个可控范围内,并保障线程安全。使用合理的GenericObjectPoolConfig配置能够提升Redis的服务性能,降低资源开销。表1及表2提供了一些重要参数的说明及配置建议。 表1 资源设置与使用相关参数 参数 说明 默认值 建议 maxTotal 资源池中的最大连接数。 8 请参见关键参数配置建议。 maxIdle 资源池允许的最大空闲连接数。 8 请参见关键参数配置建议。 minIdle 资源池允许的最小空闲连接数。 0 请参见关键参数配置建议。 blockWhenExhausted 当资源池用尽后,调用者是否要等待。 true:等待。 false:不等待。 只有当值为true时,设置的maxWaitMillis才会生效。 true 建议使用默认值。 maxWaitMillis 当资源池连接用尽后,调用者的最大等待时间(单位:毫秒)。 值为-1表示一直等待。 -1 建议设置具体的最大等待时间。 testOnBorrow 向资源池借用连接时是否做连接有效性检测(ping)。检测到的无效连接将会被移除。 true:校验。 false:不校验。 false 业务量很大时候建议设置为false,减少一次ping的开销。 testOnReturn 向资源池归还连接时是否做连接有效性检测(ping)。检测到的无效连接将会被移除。 true:校验。 false:不校验。 false 业务量很大时候建议设置为false,减少一次ping的开销。 jmxEnabled 是否开启JMX监控。 true:开启。 false:不开启。 true 建议开启,请注意应用本身也需要开启。 空闲Jedis对象检测由表2中的参数组合完成。 表2 空闲资源检测相关参数 名称 说明 默认值 建议 testWhileIdle 是否在空闲资源监测时通过ping命令监测连接有效性,无效连接将被销毁。 false true timeBetweenEvictionRunsMillis 空闲资源的检测周期(单位:毫秒)。 值为-1表示不检测。 -1 建议设置,周期自行选择,也可以默认也可以使用下方JedisPoolConfig 中的配置。 minEvictableIdleTimeMillis 资源池中资源的最小空闲时间(单位:毫秒),达到此值后空闲资源将被移除。 1,800,000(即30分钟) 可根据自身业务决定,一般默认值即可,也可以考虑使用下方JedisPoolConfig中的配置。 numTestsPerEvictionRun 做空闲资源检测时,每次检测资源的个数。 3 可根据自身应用连接数进行微调,设置为-1时,表示对所有连接做空闲监测。 为了方便使用,Jedis提供了JedisPoolConfig,它继承了GenericObjectPoolConfig在空闲检测上的一些设置。 public class JedisPoolConfig extends GenericObjectPoolConfig { public JedisPoolConfig() { setTestWhileIdle(true); setMinEvictableIdleTimeMillis(60000); setTimeBetweenEvictionRunsMillis(30000); setNumTestsPerEvictionRun(-1); }} 可以在org.apache.commons.pool2.impl.BaseObjectPoolConfig中查看全部默认值。
  • 关键参数配置建议 maxTotal设置建议 合理设置maxTotal(最大连接数)需要考虑的因素较多,如: 业务希望的Redis并发量。 客户端执行命令时间。 Redis资源,例如Redis分片数。 maxTotal不能超过Redis的最大连接数(查看Redis的最大连接数请参考查看或修改实例最大连接数)。 资源开销,例如虽然希望控制空闲连接,但又不希望因为连接池中频繁地释放和创建连接造成不必要的开销。 假设一次命令时间,即borrow|return resource加上Jedis执行命令(含网络耗时)的平均耗时约为1ms,一个连接的QPS大约是1s/1ms = 1000,而业务期望的单个Redis的QPS是50000(业务总的QPS/Redis分片个数),那么理论上需要的资源池大小(即MaxTotal)是50000 / 1000 = 50。 但事实上在理论值基础上,还要预留一些资源,所以maxTotal可以比理论值大一些。这个值不是越大越好,一方面连接太多会占用客户端和服务端资源,另一方面对于Redis这种高QPS的服务器,如果出现大命令的阻塞,即使设置再大的资源池也无济于事。
  • SDK使用规范 原则 原则说明 备注 使用连接池和长连接 短连接性能差,推荐使用带有连接池的客户端。 连接的频繁创建和销毁,会浪费大量的系统资源,极限情况会造成宿主机宕机。请确保使用了正确的Redis客户端连接池配置。 客户端需要对可能的故障和慢请求做容错处理 由于Redis服务可能因网络波动或基础设置故障的影响,引发主备倒换,命令超时或慢请求等现象,需要在客户端内设计合理的容错重试机制。 参考Redis客户端重试指南。 合理设置重试时间和次数 合理设置容错处理的重试时间,根据业务要求设置,避免过短或者过长。 如果超时重试时间设置的非常短(例如200毫秒以下),可能引发重试风暴,极易引发业务层雪崩。 如果重试时间设置得较长或者重试次数设置得较大,则可能导致在主备倒换情况下业务恢复较慢。 避免使用Lettuce客户端 Lettuce客户端在默认配置下有一定性能优势,并且是spring的默认客户端,但是Jedis客户端在面对连接异常,网络抖动等场景下的异常处理和检测能力明显强于Lettuce,可靠性更强,建议使用Jedis。 Lettuce存在几个方面的问题: Lettuce默认未配置集群拓扑刷新的配置,会导致Cluster集群在发生拓扑信息变化(主备倒换,扩容缩容)时,无法识别新的节点信息,导致业务失败。可参考使用Lettuce连接Cluster集群实例时的扩容异常处理。 Lettuce没有连接池校验的功能,无法检测连接池中的连接是否仍然有效,获取失效连接之后会导致业务失败,存在分钟级不可用的故障风险。
  • 运维管理规范 原则 原则说明 备注 生产开启密码保护 生产系统中需要开启Redis密码保护机制。 - 现网操作安全 禁止开发人员私自连到线上Redis服务。 - 验证业务的故障处理能力或容灾逻辑 在测试环境或者预生产环境中组织演练,验证在Redis主备倒换、宕机或者扩缩容场景下业务的可靠性。 主备倒换可以自行在页面上触发。强烈建议使用Lettuce客户端的应用进行相关的演练。 监控实践 关注Redis负载,在过载前提前扩容。 根据告警基线配置告警:配置节点cpu、内存、带宽等告警。 日常巡检 例行检查各个节点的内存使用率,查看主节点内存使用率是否有不均衡的状态。 内存使用率不均衡说明存在大Key问题,需要进行大Key拆分及优化。 开启热Key例行分析,并分析是否有Key频繁调用。 - 例行诊断Redis实例的命令,分析O(N)类命令是否存在隐患。 针对O(N)命令,即使耗时很小,建议开发分析业务增长,N是否会增长。 例行巡检Redis慢日志命令。 针对慢 日志分析 隐患,并尽快从业务上进行修复。
  • 命令使用规范 原则 原则说明 备注 谨慎使用O(N)复杂度的命令 时间复杂度为O(N)的命令,需要特别注意N的值。避免N过大,造成Redis阻塞以及CPU使用率冲高。 例如:hgetall、lrange、smembers、zrange、sinter这些命令都是做全集操作,如果元素很多,会消耗大量CPU资源。可使用hscan、sscan、zscan这些分批扫描的命令替代。 禁用高危命令 禁止使用flushall、keys、hgetall等命令,或对命令进行重命名限制使用。 请参考命令重命名的内容。 慎重使用select Redis多数据库支持较弱,多业务用多数据库实际还是单线程处理,会有干扰。最好是拆分使用多个Redis。 - 使用批量操作提高效率 如果有批量操作,可使用mget、mset或pipeline,提高效率,但要注意控制一次批量操作的元素个数。 mget、mset和pipeline的区别如下: mget和mset是原子操作,pipeline是非原子操作。 pipeline可以打包不同的命令,mget和mset做不到。 使用pipeline,需要客户端和服务端同时支持。 避免在lua脚本中使用耗时代码 lua脚本的执行超时时间为5秒钟,建议不要在lua脚本中使用比较耗时的代码。 比如长时间的sleep、大的循环等语句。 避免在lua脚本中使用随机函数 调用lua脚本时,建议不要使用随机函数去指定key,否则在主备节点上执行结果不一致,从而导致主备节点数据不一致。 - 遵循集群实例使用lua的限制 遵循集群实例使用lua的限制。 使用EVAL和EVALSHA命令时,命令参数中必须带有至少1个key,否则客户端会提示“ERR eval/evalsha numkeys must be bigger than zero in redis cluster mode”的错误。 使用EVAL和EVALSHA命令时,DCS Redis集群实例使用第一个key来计算slot,用户代码需要保证操作的key是在同一个slot。 对mget,hmget等批量命令做并行和异步IO优化 某些客户端对于MGET,HMGET这些命令没有做特殊处理,串行执行再合并返回,效率较低,建议做并行优化。 例如Jedis对于MGET命令在集群中执行的场景就没有特殊优化,串行执行,比起lettuce中并行pipeline,异步IO的实现,性能差距可达到数十倍,该场景建议使用Jedis的客户端自行实现slot分组和pipeline的功能。 禁止使用del命令直接删除大Key 使用del命令直接删除大Key(主要是集合类型)会导致节点阻塞,影响后续请求。 Redis 4.0后的版本可以通过UNLINK命令安全地删除大Key,该命令是异步非阻塞的。 对于Redis 4.0之前的版本: 如果是Hash类型的大Key,推荐使用hscan + hdel 如果是List类型的大Key,推荐使用ltrim 如果是Set类型的大Key,推荐使用sscan + srem 如果是SortedSet类型的大Key,推荐使用zscan + zrem
  • 业务使用规范 原则 原则说明 备注 就近部署业务,避免时延过大 如果部署位置过远(非同一个region)或者时延较大(例如业务服务器与Redis实例通过公网连接),网络延迟将极大影响读写性能。 如果对于时延较为敏感,请避免创建跨AZ Redis实例。 冷热数据区分 建议将热数据加载到 Redis 中。低频数据可存储在 Mysql或者ElasticSearch中。 Redis将低频数据存入内存中,并不会加速访问,且占用Redis空间。 业务数据分离 避免多个业务共用一个Redis。 一方面避免业务相互影响,另一方面避免单实例膨胀,并能在故障时降低影响面,快速恢复。 禁止使用select功能在单Redis实例做多db区分。 Redis单实例内多DB隔离性较差,Redis开源社区已经不再发展多DB特性,后续不建议依赖该特性。 设置合理的内存淘汰(逐出)策略 合理设置淘汰策略,可以在Redis内存意外写满的时候,仍然正常提供服务。 DCS默认的逐出策略为volatile-lru,请根据业务需求选择。Redis支持的数据逐出策略 以缓存方式使用Redis Redis事务功能较弱,不建议过多使用。 事务执行完后,不可回滚。 数据异常的情况下,支持清空缓存进行数据恢复。 Redis本身没有保障数据强一致的机制和协议,业务不能强依赖Redis数据的准确性。 以缓存方式使用Redis时,所有的key需设置过期时间,不可把Redis作为数据库使用。 失效时间并非越长越好,需要根据业务性质进行设置。 防止缓存击穿 推荐搭配本地缓存使用Redis,对于热点数据建立本地缓存。本地缓存数据使用异步方式进行刷新。 - 防止缓存穿透 非关键路径透传数据库,建议对访问数据库进行限流。 - 从Redis获取数据未命中时,访问只读数据库实例。可通过 域名 等方式对接多个只读实例。 核心是未命中的缓存数据不会打到主库上。 用域名对接多个只读数据库实例,一旦出现问题,可以增加只读实例应急。 不用作消息队列 发布订阅场景下,不建议作为消息队列使用。 如没有非常特殊的需求,不建议将 Redis 当作消息队列使用。 Redis 当作消息队列使用,会有容量、网络、效率、功能方面的多种问题。 如需要消息队列,可使用高吞吐的Kafka或者高可靠的RocketMQ。 合理选择规格 如果业务增长会带来Redis请求增长,请选择集群实例(Proxy集群和Cluster集群)。 单机和主备扩容只能实现内存、带宽的扩容,无法实现计算性能扩容。 生产实例需要选择主备或者集群实例,不能选用单机实例。 - 主备实例,不建议使用过大的规格。 Redis在执行RewriteAOF和BGSAVE的时候,会fork一个进程,过大的内存会导致卡顿。 具备降级或容灾措施 缓存访问失败时,具备降级措施,从DB获取数据;或者具备容灾措施,自动切换到另一个Redis使用。 -
  • 数据设计规范 分类 原则 原则说明 备注 Key相关规范 使用统一的命名规范。 一般使用业务名(或数据库名)为前缀,用冒号分隔。Key的名称保证语义清晰。 例如,业务名:子业务名:id 控制Key名称的长度。 在保证语义清晰的情况下,尽量减少Key的长度。有些常用单词可使用缩写,例如,user缩写为u,messages缩写为msg。 建议不要超过128字节(越短越好)。 禁止包含特殊字符(大括号“{}”除外)。 禁止包含特殊字符,如空格、换行、单双引号以及其他转义字符。 由于大括号“{}”为Redis的hash tag语义,如果使用的是集群实例,Key名称需要正确地使用大括号避免分片不均的情况。 Value相关规范 设计合理的Value大小。 设计合理的Key中Value的大小,推荐小于10 KB。 过大的Value会引发分片不均、热点Key、实例流量或CPU使用率冲高等问题,还可能导致变更规格和迁移失败。应从设计源头上避免此类问题带来的影响。 设计合理的Key中元素的数量。 对于集合和列表类的数据结构(例如Hash,Set,List等),避免其中包含过多元素,建议单Key中的元素不要超过5000个。 由于某些命令(例如HGETALL)的时间复杂度直接与Key中的元素数量相关。如果频繁执行时间复杂度为O(N)及以上的命令,且Key中的子Key数量过多容易引发慢请求、分片流量不均或热点Key问题。 选择合适的数据类型。 合理地选择数据结构能够节省内存和带宽。 例如存储用户的信息,可用使用多个key,使用set u:1:name "X"、set u:1:age 20存储,也可以使用hash数据结构,存储成1个key,设置用户属性时使用hmset一次设置多个,同时这样存储也能节省内存。 设置合理的过期时间。 合理设置Key的过期时间,将过期时间打散,避免大量Key在同一时间点过期。 设置过期时间时,可以在基础值上增减一个随机偏移值,避免在同一个时间点大量Key过期。大量Key过期会导致CPU使用率冲高。
  • 如何优化大Key和热Key 类别 方法 大Key 进行大Key拆分。 分为以下几种场景: 该对象为String类型的大Key:可以尝试将对象分拆成几个Key-Value, 使用MGET或者多个GET组成的pipeline获取值,分拆单次操作的压力。如果是集群实例,由于集群实例包含多个分片,拆分后的Key会自动平摊到集群实例的多个分片上,从而降低对单个分片的影响。 该对象为集合类型的大Key,并且需要整存整取:在设计上严格禁止这种场景的出现,因为无法拆分。有效的方法是将该大Key从Redis去除,单独放到其余存储介质上。 该对象为集合类型的大Key,每次只需操作部分元素:将集合类型中的元素分拆。以Hash类型为例,可以在客户端定义一个分拆Key的数量N,每次对HGET和HSET操作的field计算哈希值并取模N,确定该field落在哪个Key上,实现上类似于Redis Cluster的计算slot的算法。 将大Key单独转移到其余存储介质。 无法拆分的大Key建议使用此方法,将不适用Redis能力的数据存至其它存储介质,如SFS或者其余NoSQL数据库,并在Redis中删除该大Key。 注意: 禁止使用DEL直接删除大Key,可能会造成Redis阻塞,甚至主备倒换。Redis 4.0及以上版本建议采用UNLINK命令删除大Key。 合理设置过期时间并对过期数据定期清理。 合理设置过期时间,避免历史数据在Redis中大量堆积。由于Redis的惰性删除策略,过期数据可能并不能及时清理,如果发现Redis过期Key清理较慢,建议配置过期Key扫描。 热Key 使用读写分离。 如果热Key主要是读流量较大,则可以在客户端配置读写分离,降低对主节点的影响。还可以增加多个副本以满足读需求,但是备机较多也有相应的影响,DCS主备节点之间使用的是星型复制,即所有的备节点都直接和主节点保持同步,这样能保证备节点之间相互独立,且复制延迟较小。缺点是在备节点数量较多的情况下,主节点的CPU和网络负载会较高。 使用客户端缓存/本地缓存。 该方案需要提前了解业务的热点Key有哪些,设计客户端/本地和远端Redis的两级缓存架构,热点数据优先从本地缓存获取,写入时同时更新,这样能够分担热点数据的大部分读压力。缺点是需要修改客户端架构和代码,改造成本较高。 设计熔断/降级机制。 热Key极易造成缓存击穿,高峰期请求都直接透传到后端数据库上,从而导致业务雪崩。因此热Key的优化一定需要设计系统的熔断/降级机制,在发生击穿的场景下进行限流和服务降级,保护系统的可用性。
  • 大Key和热Key的影响 类别 影响 大Key 造成规格变更失败。 Redis集群变更规格过程中会进行数据rebalance(节点间迁移数据),单个Key过大的时候会触发Redis内核对于单Key的迁移限制,造成数据迁移超时失败,Key越大失败的概率越高,大于512MB的Key可能会触发该问题。 造成数据迁移失败。 数据迁移过程中,如果一个大Key的元素过多,则会阻塞后续Key的迁移,后续Key的数据会放到迁移机的内存Buffer中,如果阻塞时间太久,则会导致迁移失败。 容易造成集群分片不均的情况。 各分片内存使用不均。例如某个分片占用内存较高甚至首先使用满,导致该分片Key被逐出,同时也会造成其他分片的资源浪费。 各分片的带宽使用不均。例如某个分片被频繁流控,其他分片则没有这种情况。 客户端执行命令的时延变大。 对大Key进行的慢操作会导致后续的命令被阻塞,从而导致一系列慢查询。 导致实例流控。 对大Key高频率的读会使得实例出方向带宽被打满,导致流控,产生大量命令超时或者慢查询,业务受损。 导致主备倒换。 对大Key执行危险的DEL操作可能会导致主节点长时间阻塞,从而导致主备倒换。 热Key 容易造成集群分片不均的情况。 造成热Key所在的分片有大量业务访问而同时其他的分片压力较低。这样不仅会容易产生单分片性能瓶颈,还会浪费其他分片的计算资源。 使得CPU冲高。 对热Key的大量操作可能会使得CPU冲高,如果表现在集群单分片中就可以明显地看到热Key所在的分片CPU使用率较高。这样会导致其他请求受到影响,产生慢查询,同时影响整体性能。业务量突增场景下甚至会导致主备切换。 易造成缓存击穿。 热Key的请求压力过大,超出Redis的承受能力易造成缓存击穿,即大量请求将被直接指向后端的数据库,导致数据库访问量激增甚至宕机,从而影响其他业务。 对于如何避免产生大Key和热Key,需要在业务设计阶段就考虑。参考Redis使用规范。
  • 大Key和热Key的定义 大Key和热Key场景较多,没有非常明确的边界,需要根据实际业务判断。 名词 定义 大Key 大Key可以分为两种情况: Key的Value占用存储空间较大。一般单个String类型的Key大小达到10KB,或者集合类型的Key总大小达到50MB,则被定义为大Key。 Key的元素较多。一般集合类型的Key中元素超过5000个,则被定义为大Key。 热Key 通常当一个Key的访问频率或资源占用显著高于其他Key时,则称之为热Key。例如: 某个集群实例一个分片每秒处理10000次请求,其中有3000次都是操作同一个Key。 某个集群实例一个分片的总带宽使用(入带宽+出带宽)为100Mbits/s,其中80Mbits是由于对某个Hash类型的Key执行HGETALL所占用。
  • 安装Nginx 购买ECS后,需要在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.servicesudo systemctl enable nginx.service 在本地浏览器中输入服务器地址(ECS公网IP地址),查看安装是否成功。 如果出现下面页面,则表示安装成功。
  • (可选)长连接场景 如果用户公网访问时需要使用长连接,那么需要在如上配置Nginx中增加以下配置: Nginx到后端server的超时时间 stream { server { listen 8080; proxy_pass 192.168.0.5:6379; proxy_socket_keepalive on; proxy_timeout 60m; proxy_connect_timeout 60s; } server { listen 8081; proxy_pass 192.168.0.6:6379; proxy_socket_keepalive on; proxy_timeout 60m; proxy_connect_timeout 60s; }} proxy_timeout 默认值是10m(10分钟),可以根据用户需要设为60m或其他值。Nginx官网 proxy_timeout说明 客户端到Nginx的超时时间 http { keepalive_timeout 3600s;} keepalive_timeout 默认值是75s,可以根据用户需要设为3600s或其他值。Nginx官网 keepalive_timeout 说明
  • 通过Nginx访问Redis 登录ECS控制台,确认跳板机的安全组规则是否放开,如果没有,则需要为安全组放开8080和8081两个端口。 单击ECS实例名称,进入ECS详情页面。 选择“安全组”页签,单击“配置规则”,可进入安全组配置页面。 图6 进入ECS安全组 图7 添加安全组入方向规则 在公网环境中打开Redis命令行界面,输入如下命令,登录与查询都正常。 公网环境已参考Redis-cli连接中相关步骤,安装Redis-cli客户端。 ./redis-cli -h {myeip} -p {port} -a {mypassword} 其中,命令中的{myeip}为主机连接地址,需要填写ECS的弹性IP,端口需要填写ECS上Nginx的监听端口。 如下图所示,设置的2个监听端口分别为8080和8081,对应后端2个Redis实例。 图8 通过Nginx代理连接第一个Redis实例 图9 通过Nginx代理连接第二个Redis实例
  • 方案概述 当前,华为云DCS的Redis 4.0及以上版本不支持绑定弹性IP,无法直接通过公网访问。 本章节主要介绍通过跳板机访问VPC内Redis 4.0/5.0/6.0单机、主备、读写分离、Proxy集群实例的操作,Cluster集群实例暂不支持使用该方案进行公网访问。 图1中安装了Nginx代理工具的ECS就是一台跳板机,它与DCS Redis实例在相同VPC,可通过子网IP访问Redis实例;为ECS绑定弹性IP后,公网可以访问ECS;Nginx支持监听多个端口,并将请求内容转发到不同的后端Redis实例。 图1 通过Nginx访问VPC内DCS Redis 不建议在生产环境中使用公网访问的方式,对于因公网网络性能造成的客户端访问异常不计入SLA。
共100000条