云服务器内容精选

  • 约束与限制 企业版Redis暂不支持调整带宽。 只有在运行中的实例支持调整带宽,如果是变更中、故障中、重启中等其他状态下的实例不支持调整实例带宽。 实例单分片带宽的调整范围在单分片的基准带宽(默认带宽)到最大可调整的带宽之间。通常在实例节点所在物理机带宽资源充足的前提下,实例可调整的单分片最大带宽为2048 Mbit/s。 目标带宽只支持设置为8的整数倍。如果设置的值不为8的整数倍,订单提交后将自动向下取8的倍数。 调整带宽的计费方式仅支持按需计费,请注意配置费用的变化。
  • 如何查看基准带宽和调整后的带宽 在手动调整带宽的页面,可以查看实例每个分片的“基准带宽”和“当前带宽”。对于已经调整过带宽的实例,“当前带宽”即调整后的带宽值。 图4 查看带宽值 实例带宽与单分片带宽的关系如下: 单机/主备实例带宽=单分片带宽。 读写分离实例带宽=单分片带宽 * 副本数。 集群实例带宽=单分片带宽 * 分片数,当各分片带宽值不同时,集群实例带宽值为各个分片带宽值之和。 例如图4中是一个3分片的集群实例,每个分片调整后的带宽为800 Mbit/s,该集群实例总带宽为2400 Mbit/s。
  • 调整D CS 实例带宽 登录分布式缓存服务管理控制台。 在管理控制台左上角单击,选择实例所在的区域。 单击左侧菜单栏的“缓存管理”。 在“缓存管理”页面,单击DCS缓存实例的名称。 在缓存实例的“基本信息”栏中单击带宽后的“调整带宽”。 图1 调整带宽 在“调整带宽”页面,设置带宽参数。 实例默认为手动调整带宽的方式,可根据需要设置目标带宽值。如果开启“自动弹性带宽调整”功能白名单,实例带宽调整方式支持选择“手动调整”或“自动弹性带宽调整”(如果控制台不支持选择带宽调整方式,请联系客服开启“自动弹性调整带宽”功能白名单)。 目标带宽值只支持设置为8的整数倍。如果设置的带宽值不是8的整数倍,订单提交后会自动按照向下取整的方式调整带宽。例如输入的带宽值为801,则按照800 Mbit/s的目标带宽调整带宽。 变更页面显示的变更后费用为该实例额外购买的带宽计费金额,不包含原实例费用。 调整带宽的计费方式仅支持按需计费。 您可以根据需要多次调整带宽,单个计费周期(1小时)中如果有多次带宽变更,该计费周期以最大带宽费用收费。例如将一个Redis实例(默认带宽值为256 Mbit/s)的宽带变更为2048 Mbit/s后,在一个计费周期内再次将带宽值变更为512 Mbit/s,实例在该计费周期将按照2048 Mbit/s的带宽值扣费。 手动调整 手动调整实例的目标带宽值。集群实例多个分片需要调整带宽时,可以对多个分片单独设置不同的目标带宽,也可以同时勾选多个分片后,单击页面左上角的“批量调整带宽”,统一设置带宽值。 图2 手动设置新带宽值 手动调整目标带宽后,确认新的带宽值及带宽费用后,在“带宽调整确认”处勾选确认,再单击“提交订单”。 调整带宽任务的状态为“成功”后,新的带宽值立即生效。 自动弹性带宽调整 开启“自动带宽扩展”并根据需要设定自动带宽扩容策略,如表1。 系统会根据您设定的自动带宽扩容策略自动执行带宽扩展,如果触发带宽扩展,单分片最高可扩展至2048Mbit/s。如果您已对实例带宽进行过手动调整,自动弹性带宽调整结果会覆盖已手动调整的结果。 图3 设置自动带宽扩容策略 表1 设定自动带宽扩容策略 带宽扩容策略 说明 瞬时带宽使用率不小于 触发带宽自动扩容的瞬时带宽使用率阈值,单位:%。 瞬时带宽使用率=瞬时使用带宽/分片带宽。该公式中的“瞬时使用带宽”取监控指标“网络瞬时输出流量”和“网络瞬时输入流量”中较大的值。 当实例单分片的瞬时带宽使用率达到设置的阈值时,会触发该分片带宽自动扩容,分片带宽扩容后,瞬时带宽使用率会降低到(设置的瞬时带宽使用率阈值-10%)。 例如将该阈值设置为70%,则当分片的瞬时带宽使用率达到70%时,会触发该分片带宽自动扩容,扩容后的瞬时带宽使用率会降低到60%。因此,扩容后的分片带宽=瞬时使用带宽/60%。 观测窗口 带宽弹性的观测窗口,单位:分钟。默认值:1。 例如观测窗口时间设置为1分钟时,则带宽监控数据取值为1分钟内的监控数据。 静默时间 扩容操作的静默时间,单位:秒。默认值:0。 当带宽自动扩容后,如果再次监测到瞬时带宽使用率超过阈值,实例在设置的静默时间内不会立即扩容,设置静默时间可以避免实例连续进行带宽自动扩容。 设置自动带宽扩展参数后,在“带宽调整确认”处勾选确认,再单击“确定”。
  • 约束限制 该功能目前为白名单功能,如需查看并升级实例的小版本/代理版本,请先联系客服开通白名单。 仅Redis 4.0及以上基础版实例支持查看或升级实例的小版本/代理版本,企业版实例不支持。 仅Proxy集群和读写分离实例涉及代理版本,其他实例类型不涉及。 建议在业务低峰期执行实例小版本升级。业务高峰期(如实例内存利用率、CPU利用率达到90%以上或写入流量过大)升级可能会失败,若升级失败,请在业务低峰期再次尝试升级。 实例升级小版本采用节点迁移的方式,在数据迁移过程中,访问时延会增大,每迁移一个分片会发生一次秒级闪断和一分钟以内的只读,请确保客户端应用具备重连机制和处理异常的能力。 实例升级小版本时,Cluster集群请确保客户端能正常处理MOVED和ASK命令,否则会导致请求失败。 实例升级代理版本过程中会发生秒级连接闪断,请确保客户端应用具备重连机制和处理异常的能力,建议在业务低峰期升级。 如果实例已经为最新小版本/代理版本,不支持升级。
  • 升级DCS实例小版本/代理版本 登录分布式缓存服务管理控制台。 在管理控制台左上角单击,选择实例所在的区域。 单击左侧菜单栏的“缓存管理”。 在“缓存管理”页面,单击DCS缓存实例的名称,进入实例详情页面。 在“基本信息”区域,可以查看或选择升级实例的小版本和代理版本(仅Proxy集群和读写分离实例涉及代理版本)。 图1 升级实例小版本/代理版本 升级小版本 单击“小版本”后的“升级小版本”。 如果需要同步升级实例的代理版本,在弹出的升级小版本窗口中开启“是否同步升级代理版本”。 单击“确定”,提交实例升级任务。待升级版本任务的状态显示“成功”后,升级版本完成。 升级代理版本 单击“代理版本”后的“升级代理版本”。 如果需要同步升级实例的小版本,在弹出的升级小版本窗口中开启“是否同步升级小版本”。 单击“确定”,提交实例升级任务。待升级版本任务的状态显示“成功”后,升级版本完成。
  • RESP3协议 在Redis 6.0中,推出了下⼀代Redis协议-RESP3,相比于RESP2协议,增加了⼀部分新的数据类型。 Null:空值,替代RESP2中的*-1、$-1 Array:有序集合 Simple string:节省空间的安全字符串(非⼆进制) Blob string:⼆进制格式的安全字符串 Simple error:节省空间的安全错误码/错误信息(非⼆进制) Blob Error:⼆进制格式的安全错误码/错误信息 Boolean:True/False,布尔类型 Number:有符号的64位整数 Big Number:⼤数字类型 Double:浮点数 Verbatim string:⼆进制格式的安全字符串,带文本格式 Map:无序的键值对 Set:⽆序的不重复元素集合 Attribute:属性键值对,类似于Map PUSH:带外数据,类似于Array,⽤于Redis服务端主动向客户端推送数据 Hello:hello命令返回的响应类型,⽤于客户端、服务端建立连接时使⽤
  • 客户端缓存 Redis 6.0中通过TRACKING模块实现了主动通知客户端刷新缓存的机制,根据协议类型,实现⽅式如下: RESP3 普通模式 ⼴播模式 RESP2 转发模式 开启客户端缓存通知的格式如下: CLIENT TRACKING ON|OFF [REDIRECT client-id] [PREFIX prefix] [BCAST] [OPTIN][OPTOUT] [NOLOOP] 在RESP3协议中,主要是借助了PUSH类型的消息来实现服务端的主动推送通知。在普通模式中,Redis会记住每个客户端请求的key,当该key所对应的value发⽣变化时,将会发送失效消息(invalidation message)通知对应的客户端集合,但对于每个客户端仅会通知⼀次,即使后续该key所对应的value有其他操作改动,除非客户端在接收到失效消息后,再次通过读取该key的⽅式开启通知。开启普通模式的track功能命令如下 : CLIENT TRACKING ON 对于⼴播模式,则根据所track的key prefix来决定在符合key prefix的key所对应的value有所变化时,通知给所有的客户端,如key prefix所匹配的key数量较多,或改动较多,将会导致服务端发送⼤量的失效⼴播消息,消耗⽹络带宽。开启⼴播模式的track功能命令如下: CLIENT TRACKING ON BCAST PREFIX key-prefix 如客户端SDK不⽀持RESP3协议,只能采⽤RESP2协议的转发模式来实现客户端缓存主动更新通知,需要准备⼀个专⻔⽀持RESP3协议的客户端来作为中转节点,转发来⾃Redis的失效消息(invalidation message)⾄特定的订阅频道。⼯作原理如下: 图1 工作原理
  • 支持SSL Redis 6.0开始⽀持SSL/TLS⽅式的加密连接及加密传输,可通过在服务控制台上开启SSL服务,⽣成实例的SSL/TLS证书及密钥,在使⽤客户端连接时,指定该证书/密钥即可,连接⽰例如下: redis-cli --tls --cert /etc/redis/ssl/redis.crt --key /etc/redis/ssl/redis.key --cacert /etc/redis/ssl/redis.crt 详情请参见:SSL设置。
  • 导出备份文件 执行命令进入解压后的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} 修改后按下Esc键退出编辑模式,输入:wq!按回车键保存配置并退出编辑界面。 执行以下命令导出源Redis集群的RDB格式备份文件。 ./redis-shake -type dump -conf redis-shake.conf 执行日志中出现如下信息时导出备份文件完成: execute runner[*run.CmdDump] finished!
  • 安装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 如果源Cluster部署在数据中心内网,则需在内网服务器上安装RedisShake,并参考导出备份文件导出源Cluster备份文件,然后将备份文件上传到云服务器。
  • 导入备份文件 将导出的RDB备份文件(含多个)上传到与云服务器上。云服务器与目标端DCS Cluster集群实例的网络连通。 编辑RedisShake工具配置文件redis-shake.conf。补充目标端所有master节点的连接信息。 vim redis-shake.conf 修改内容如下: 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和目标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端口,如下如所示:
  • 前提条件 如果您还没有目标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!按回车键保存配置并退出编辑界面。