华为云用户手册

  • gpu 插件类型 OS 功能说明 采集GPU信息,每次采集都为每个GPU,以及总GPU维度分别生成消息,并上报给HCW。 执行nvidia-smi命令,分别获取每个GPU的GPU-Util、Bus-Id、mem_used、mem_total、mem_util信息,并整合总GPU信息上报给HCW。 参数配置 不需要配置。 消息样例及含义说明 {    "plugin_id":"gpu", #单位: | 类型:string | 说明:插件名    "metric":{ "node": "bj-xen-pdc-241-202", #单位: | 类型:string | 说明:主机名,消息来源标识 "timestamp": "1518078026000", #单位: | 类型:string | 说明:字符类型时间戳 "_id":"GPU-0", #单位: | 类型:string | 说明:GPU编号,总GPU编号为GPU-ALL "_name":"Tesla P100-PCIE", #单位: | 类型:string | 说明:GPU型号 "bus_id":"0000:04:00.0", #单位: | 类型:string | 说明:GPU的Bus-Id "util":"61", #单位: | 类型:string | 说明:GPU使用率 "mem_used":"1385", #单位: | 类型:string | 说明:GPU已使用显存 "mem_total":"16276", #单位: | 类型:string | 说明:GPU显存总量 "mem_util":"8.50" #单位: | 类型:string | 说明:GPU显存使用率     } }
  • mem 插件类型 OS 功能说明 采集全系统有关的内存信息。 原始数据来源:/proc/meminfo、/proc/vmstat 参数配置 不需配置。 消息样例及含义说明 { "plugin_id": "mem", "metric": { "node": "host-10-33-0-188", #单位: | 类型:string | 说明:主机名,消息来源标识 "timestamp": 1482161028000, #单位: | 类型:long | 说明:UTC时间戳 "active": "6476724", #单位:kB | 类型:int | 说明:活跃内存 "buffers": "1776864", #单位:kB | 类型:int | 说明:buffers缓存 "cached": "8662036", #单位:kB | 类型:int | 说明:cached缓存 "dirty": "152", #单位:kB | 类型:int | 说明:等待写回磁盘的内存 "inactive": "4966164", #单位:kB | 类型:int | 说明:不活跃内存 "mem_free": "3964160", #单位:kB | 类型:int | 说明:可用内存 "mem_free_in_buf_cache": "14403060", #单位:kB | 类型:int | 说明:实际可用内存(+buffers+cached) "mem_free_size": "15072556", #单位:kB | 类型:int | 说明:"MemFree + Cached + Buffers + SReclaimable + Swapcached + Nfs_unstable - Shmem" "mem_total": "16311792", #单位:kB | 类型:int | 说明:全部内存 "mem_used": "12347632", #单位:kB | 类型:int | 说明:已用内存 "mem_used_ex_buf_cache": "1908732", #单位:kB | 类型:int | 说明:实际内存占用(-buffers-cached) "mem_used_size": "1239236", #单位:kB | 类型:int | 说明:mem_total - mem_free_size "mem_util": "7.6", #单位:% | 类型:double | 说明:mem_used_size / mem_total "swap_cached": "2632", #单位:kB | 类型:int | 说明:交换内存被缓存的大小 "swap_free": "4151180", #单位:kB | 类型:int | 说明:当前未使用的交换空间数 "swap_total": "4192252", #单位:kB | 类型:int | 说明:可用的交换空间总数 "swap_util": "3", #单位:% | 类型:double | 说明:交换空间占用率 "writeback": "0", #单位:kB | 类型:int | 说明:正在写回磁盘的内存 "pgfault": "4123", #单位: | 类型:int | 说明:本周期page fault数 "pgin": "0", #单位: | 类型:int | 说明:本周期page in数 "pgmajfault": "0", #单位: | 类型:int | 说明:本周期major page fault数 "pgout": "0" #单位: | 类型:int | 说明:本周期page out数 }}
  • tomcat 插件类型 APP 功能说明 针对机器上运行性的多个Tomcat进程,周期采集其运行数据。 插件运行后,将首先在“agent框架lib/tomcat/”路径下生成TomcatJmx_fat.jar,后续每次执行时,都会通过该jar包使用JMX接口采集tomcat进程相关信息。每次采集结束,每个tomcat进程分别生成一条消息,http_port可作为区分标志。 参数配置 用户在使用该插件进行采集之前,需要先手动修改tomcat安装目录下bin/catalina.sh,在文件中添加以下字段以支持JMX采集功能: CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=58880 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 用户还需要为插件配置当前本机运行中的Tomcat对应的安装路径,可配置单个或多个,以”,”做分隔符。 tomcat_install_path #可以识别绝对路径以及环境变量。 如果采用环境变量来传递Tomcat安装路径,要求在~/.bashrc中添加export命令进行配置,如下图: 在配置生效后,可通过source ~/.bashrc或重启机器,再启动agent进行数据采集。 消息样例及含义说明 {      "plugin_id":"tomcat",     "metric":{ "node": " host-10-33-0-188", #单位: | 类型:string | 说明:主机名,消息来源标识 "timestamp": 1482161028000, #单位: | 类型:long long | 说明:UTC时间戳 "request_count":"0", #单位: | 类型:double | 说明:采集间隔内新增请求数 "request_errors_count":"0", #单位: | 类型:double | 说明:采集间隔内新增错误请求数 "thread_total":"47", #单位: | 类型:double | 说明:累计线程数 "http_port_id":"8080", #单位: | 类型:double | 说明:tomcat对外提供服务的端口号         } }
  • cpu 插件类型 OS 功能说明 统计cpu信息,每次采集都为每个vcpu,以及总cpu维度分别生成消息。 原始数据来源:/proc/loadavg、/proc/stat等。 参数配置 插件默认为CPU0、CPU1、...、CPU-ALL分别生成消息。用户可根据需要配置_filter_cpu_id项,进行消息筛选。如果用户只需要总维度的CPU统计信息,则可配置参数_filter_cpu_id为CPU-ALL。 消息样例及含义说明 { "plugin_id": "cpu", "metric": { "node": "host-10-33-0-188", #单位: | 类型:string | 说明:主机名,消息来源标识 "timestamp": 1482161028000, #单位: | 类型:long long | 说明:UTC时间戳 "cpu_id": "CPU1", #单位: | 类型:string | 说明:cpu编号(CPU-ALL:系统整体维度) "guest": "0.0", #单位:% | 类型:double | 说明:访客控制cpu时间占有率 "guest_nice": "0.0", #单位:% | 类型:double | 说明:低优先级访客控制cpu时间占有率 "idle": "100.0", #单位:% | 类型:double | 说明:空闲(不包含IO等待)时间占有率 "iowait": "0.0", #单位:% | 类型:double | 说明:等待IO响应的时间占有率 "irq": "0.0", #单位:% | 类型:double | 说明:处理硬件中断的时间占有率 "ldavg15m": "0.05", #单位: | 类型:double | 说明:近15分钟内平均负载 "ldavg1m": "0.01", #单位: | 类型:double | 说明:近1分钟内平均负载 "ldavg5m": "0.03", #单位: | 类型:double | 说明:近5分钟内平均负载 "nice": "0.0", #单位:% | 类型:double | 说明:低优先级用户态时间占有率 "softirq": "0.0", #单位:% | 类型:double | 说明:处理软件中断的时间占有率 "steal": "0.0", #单位:% | 类型:double | 说明:花在虚拟系统上的时间占有率 "system": "0.0", #单位:% | 类型:double | 说明:系统态时间占有率 "user": "0.0", #单位:% | 类型:double | 说明:用户态时间占有率 "util": "0.0", #单位:% | 类型:double | 说明:cpu占有率(1-idle) "vcpu_num": "48" #单位: | 类型:double | 说明:vcpu数量 } }
  • diskio 插件类型 OS 功能说明 统计磁盘IO信息,每次采集将针对每个磁盘分别生成一条消息。 插件先从/proc/partitions获取全部物理磁盘及逻辑分区的名字、主次设备号。然后根据得到的磁盘名单,从/proc/diskstats提取每个物理磁盘或逻辑分区的读写数据,并进一步进行计算得到IO数据。 参数配置 配置样例: _filter_disk_id:xvda,^1,^2 #筛选关键字 show_extra:true #是否按照磁盘分区生成多条消息 其中带“^”前缀的为反向筛选关键字(1、2),其余为正向筛选关键字(xvda),每条消息在最终生成之前,插件会先执行一次正向筛选(若disk_id的值包含xvda,则保留这条消息;反之则删掉。若没有配置正向筛选关键字,则跳过这步筛选,保留消息。)若该条消息得以保留,插件会继续执行一次反向筛选(若disk_id的值包含1或2当中的任一字段,则删掉这条消息;反之则保留。若没有配置反向筛选关键字,则跳过这步筛选,保留消息。) show_extra为true时表示按照磁盘分区生成多条消息。 假设某台服务器执行cat /proc/partitions命令结果如图1所示,共7行数据,按照“_filter_disk_id:xvda,^1,^2”配置正反向过滤后,仅生成第1行xvda对应的消息。 图1 示例1 消息样例及含义说明 { "plugin_id": "diskio", "metric": { "node": "host-10-33-0-188", #单位: | 类型:string | 说明:主机名,消息来源标识 "timestamp": 1482161028000, #单位: | 类型:long long | 说明:UTC时间戳 "avgqu_sz": "0.0000", #单位: | 类型:double | 说明:平均I/O队列长度 "avgrq_sz": "0.0000", #单位:扇区| 类型:double | 说明:平均每次设备I/O操作的数据大小 "await": "0.0000", #单位:ms | 类型:double | 说明:平均每次设备I/O操作的等待时间 "disk_id": "xvda", #单位: | 类型:string | 说明:物理磁盘号/逻辑分区号 "r_await": "0.0000", #单位:ms | 类型:double | 说明:平均每次读请求等待时间 "rkbps": "0.0000", #单位:kB/s | 类型:double | 说明:读操作的kbps数, 单位为KByte/s "rps": "0.0000", #单位:次/s | 类型:double | 说明:每秒完成的读I/O设备次数 "rrqmps": "0.0000", #单位:次/s | 类型:double | 说明:每秒进行merge的读操作数目 "svctm": "0.0000", #单位:ms | 类型:double | 说明:平均每次设备I/O操作的服务时间 "tps": "0.0000", #单位:次/s | 类型:double | 说明:每秒完成的读写I/O设备总次数 "util": "0.0", #单位:% | 类型:double | 说明:磁盘IO利用率 "w_await": "0.0000", #单位:ms | 类型:double | 说明:平均每次写请求等待时间 "wkbps": "0.0000", #单位:kB/s | 类型:double | 说明:写操作的kbps数, 单位为KByte/s "wps": "0.0000", #单位:次/s | 类型:double | 说明:每秒完成的写I/O设备次数 "wrqmps": "0.0000" #单位:次/s | 类型:double | 说明:每秒进行merge的写操作数目 } }
  • 修订记录 发布日期 修改说明 2024-05-30 第七十一次正式发布。 新增: 添加SQL白名单章节。 管理SQL白名单章节。 2024-05-13 第七十次正式发布。 新增共享VPC章节。 配置隐私数据保护规则补充结果集存储只支持agent方式审计数据库的说明。 2024-04-10 第六十九次正式发布。 控制台新风格升级。 2023-06-30 第六十八次正式发布。 新增如下章节: 查看趋势分析章节; 5.4-升级数据库审计实例版本章节。 2023-04-23 第六十七次正式发布。 修改流程指引章节,增加免Agent审计操作流程。 2022-11-30 第六十六次正式发布。 新增章节5.1-总览。 2022-11-16 第六十五次正式发布。 新增自动备份的延时说明。 2022-06-08 第六十四次正式发布。 DBSS对接CES功能上线,新增章节: DBSS监控指标说明 设置监控告警规则 查看监控指标 2022-03-24 第六十三次正式发布。 手动备份审计日志功能下线。 购买数据库安全审计:新增参数“企业项目”。 5.9-备份和恢复数据库审计日志:新增“OBS细粒度授权”操作;自动备份时,备份周期可选“每天”和“每小时”。 2022-01-07 第六十二次正式发布。 表1:新增“数据库类型”选择“MySQL”时,自动关联获取数据库列表,按需选择即可的说明。 2021-07-15 第六十一次正式发布。 修改内容:将服务列表入口“安全”修改为“安全与合规”。 新增内容如下: 添加SQL注入规则:新增“添加SQL注入规则”。 添加数据库:新增选择GaussDB(for MySQL)时自动关联库内所有实例说明。 添加Agent(ECS/BMS自建数据库):数据库端添加Agent时,新增阈值自定义功能。 操作步骤:告警信息新增“Agent异常”筛选。 2021-06-17 第六十次正式发布。 表1:新增“数据库类型”选择“GaussDB(for MySQL)”时,自动关联获取数据库列表,按需选择即可的说明。 2021-04-19 第五十九次正式发布。 安装Agent(Linux操作系统),修改Agent安装包命名。 管理添加的数据库和Agent,新增“SHA256校验值”,校验Agent包的完整性。 卸载Agent,修改Agent安装包命名。 2021-04-01 第五十八次正式发布。 “数据库安全防护”相关内容下线。 2021-03-22 第五十七次正式发布。 步骤二:添加Agent,优化相关内容描述。 添加风险操作,优化相关内容描述。 2021-01-19 第五十六次正式发布。 优化数据库安全审计步骤流程。 2020-12-18 第五十五次正式发布。 新增步骤四:添加安全组规则。 流程指引,新增添加安全组规则描述。 步骤二:添加Agent,优化相关内容描述。 步骤三:下载并安装Agent,优化相关内容描述。 5.6-查看审计结果,新增前提条件。 2020-12-15 第五十四次正式发布。 步骤一:添加数据库,优化相关内容描述。 2020-11-27 第五十三次正式发布。 添加审计范围,审计范围新增“例外IP”功能。 2020-10-14 第五十二次正式发布。 购买数据库安全审计,新增购买数据库安全审计实例时选择VPC的说明描述。 “购买数据库安全防护”,新增购买数据库安全防护实例时选择VPC的说明描述。 2020-09-23 第五十一次正式发布。 添加风险操作,新增一条默认风险操作“数据库拖库检测”。 2020-08-31 第五十次正式发布。 查看SQL语句详细信息,新增审计语句和结果集字数长度限制。 创建用户并授权使用DBSS,优化相关内容描述。 2020-07-31 第四十九次正式发布。 设置告警通知,告警通知方式变更,对接SMN服务,通知方式多样化。 下线“设置邮件通知”章节。 2020-07-20 第四十八次正式发布。 5.9-备份和恢复数据库审计日志,新增备份日志说明。 2020-07-08 第四十七次正式发布。 安装Agent(Linux操作系统),优化相关内容描述。 安装Agent(Windows操作系统),优化相关内容描述。 2020-06-29 第四十六次正式发布。 购买数据库安全审计,优化相关内容描述。 “购买数据库安全防护”,优化相关内容描述。 2020-06-16 第四十五次正式发布。 添加审计范围,优化相关内容描述。 设置告警通知,优化相关内容描述。 2020-06-08 第四十四次正式发布。 “步骤三:添加防护的数据库”,合并“添加防护的DDM”。 “步骤四:修改业务侧配置文件”,修改章标题并优化相关内容描述。 2020-06-05 第四十三次正式发布。 “购买数据库安全防护”,优化相关内容描述。 添加审计范围,新增审计范围的操作类型。 查看告警信息,新增“日志备份OBS失败”告警类型。 2020-04-30 第四十二次正式发布。 步骤二:添加Agent,优化相关内容描述。 下载Agent,优化相关内容描述。 2020-04-21 第四十一次正式发布。 “步骤四:修改业务侧配置文件”,优化相关内容描述。 2020-04-03 第四十次正式发布。 更新界面截图。 2020-03-20 第三十九次正式发布。 修改管理数据库安全审计实例,新增实例运行状态。 2020-03-16 第三十八次正式发布。 新增字符集“GBK”,oracle数据库增加“19c”版本。 “数据库安全防护故障排查”调整为FAQ。 “数据库安全审计故障排查”调整为FAQ。 2020-03-03 第三十七次正式发布。 修改“购买数据库安全防护”,新增防护实例创建失败相关内容。 修改“管理数据库安全防护实例”,新增查看详情操作说明。 修改购买数据库安全审计,新增审计实例创建失败相关内容。 修改步骤一:添加数据库,优化相关内容描述。 修改管理数据库安全审计实例,新增查看详情操作说明。 2020-02-21 第三十六次正式发布。 新增安装Agent(Windows操作系统)。 修改步骤二:添加Agent,新增添加Agent场景条件。 修改安装Agent(Linux操作系统)。 修改卸载Agent,新增Windows相关描述。 新增Windows相关描述。 2020-01-15 第三十五次正式发布。 修改添加Agent,优化内容描述。 修改安装Agent(Linux操作系统),优化内容描述。 修改备份和恢复数据库审计日志,优化内容描述。 2020-01-06 第三十四次正式发布。 修改权限管理章节,更新界面截图。 修改添加Agent,优化内容描述。 修改安装Agent(Linux操作系统),优化内容描述。 修改如何查看云审计日志,优化内容描述以及更新界面截图。 2019-12-23 第三十三次正式发布。 优化“数据库安全防护使用指导”章节架构。 更新Console界面截图。 2019-11-30 第三十二次正式发布。 新增安装Agent(Windows操作系统)。 修改“购买数据库安全防护”,更新截图以及相关内容描述。 修改添加数据库并开启审计,更新界面截图以及相关内容描述。 修改步骤二:添加Agent,更新界面截图以及相关内容描述。 2019-10-24 第三十一次正式发布。 修改步骤二:添加Agent,优化相关内容描述。 修改步骤三:下载并安装Agent,优化相关内容描述。 2019-10-16 第三十次正式发布。 修改步骤二:添加Agent,优化相关内容描述。 2019-08-29 第二十九次正式发布。 “登录HexaTier ”章节修改为常见问题“如何登录HexaTier?”。 修改“管理数据库安全防护实例”,更新界面截图以及相关内容描述。 2019-08-21 第二十八次正式发布。 修改“登录HexaTier”章节,优化操作入口描述。 修改“数据库安全防护相关操作”,优化操作入口描述。 修改“数据库安全审计使用指导”,优化操作入口描述。 修改“故障排查”章节,优化操作入口描述。 2019-08-01 第二十七次正式发布。 修改“登录HexaTier”章节,更新界面截图以及优化相关内容描述。 修改“数据库安全防护相关操作”,更新界面截图以及优化相关内容描述。 2019-07-30 第二十六次正式发布。 修改购买数据库安全审计,优化相关内容描述。 修改其他操作,优化相关内容描述。 2019-07-22 第二十五次正式发布。 新增“购买数据库安全防护”。 新增购买数据库安全审计。 新增“配置隐私数据保护规则”。 新增“管理隐私数据保护规则”。 修改“重置HexaTier登录密码”,优化相关内容描述。 修改管理添加的数据库和Agent,更新界面截图以及优化相关内容描述。 2019-06-28 第二十四次正式发布。 新增“数据库安全防护无法连接防护数据库”。 新增“无法访问数据库安全防护界面”。 2019-06-25 第二十三次正式发布。 新增“数据库安全审计运行正常但无审计记录”。 修改“Agent与数据库安全审计实例之间通信异常”,优化相关内容描述。 修改“无法使用数据库安全审计”,优化相关内容描述。 2019-06-14 第二十二次正式发布。 新增“重置HexaTier登录密码”。 修改“登录HexaTier”章节,更新界面截图以及修改相关内容描述。 修改“数据库安全防护相关操作”,更新界面截图以及修改相关内容描述。 2019-06-12 第二十一次正式发布。 修改“数据库安全审计使用指导”,调整了大纲,更新界面截图以及修改相关内容描述。 新增管理备份的审计日志。 2019-06-10 第二十次正式发布。 修改“数据库安全审计使用指导”章节,更新界面截图以及修改相关内容描述。 2019-05-30 第十九次正式发布。 修改添加数据库并开启审计,修改相关内容描述。 2019-05-22 第十八次正式发布。 新增权限管理章节。 新增“Agent与数据库安全审计实例之间通信异常”。 修改步骤二:添加Agent,优化相关内容描述。 修改“设置邮件和告警通知”,优化相关内容描述。 修改管理数据库审计报表,优化相关内容描述。 修改备份和恢复数据库审计日志,优化相关内容描述。 2019-05-10 第十七次正式发布。 修改“添加数据库”,更新截图以及优化相关内容描述。 修改“登录HexaTier”章节,更新截图以及相关内容描述。 修改“数据库安全防护相关操作”,更新截图以及相关内容描述。 2019-04-15 第十六次正式发布。 修改添加审计范围章节,优化相关内容描述。 2019-04-08 第十五次正式发布。 修改“数据库安全审计配置流程”章节,修改了流程图。 修改备份和恢复数据库审计日志,补充相关内容描述。 修改“数据库安全审计使用指导”,更新界面截图。 2019-03-30 第十四次正式发布。 修改添加数据库章节,优化相关内容描述。 2019-01-15 第十三次正式发布。 调整文档大纲,优化内容描述。 2018-12-25 第十二次正式发布。 新增“无法使用数据库安全审计”。 2018-12-06 第十一次正式发布。 新增“配置数据库防火墙策略”。 新增“基于发现结果生成规则”。 2018-10-15 第十次正式发布。 优化部分内容描述。 2018-09-27 第九次正式发布。 优化“登录HexaTier”章节内容描述。 2018-09-12 第八次正式发布。 优化了内容描述。 2018-07-19 第七次正式发布。 新增“HexaTier”章节。 新增“产品优势”章节。 新增“入门”章节。 新增“连接DDM作为受保护的数据库”章节。 新增“配置参数”章节。 修改“使用场景”章节,优化了内容描述。 2018-04-27 第六次正式发布。 新增5.11-云审计服务支持的关键操作章节。 2018-03-22 第五次正式发布。 调整了文档大纲,并修改了部分内容描述。 2018-01-30 第四次正式发布。 修改“申请DBSS实例”章节,更新界面截图和相关描述。 修改“数据库防护控制台操作指导”章节,更新相关内容描述。 2017-12-04 第三次正式发布。 新增“解绑弹性IP”章节。 2017-11-02 第二次正式发布。 修改“使用场景”章节,优化了内容描述。 修改“管理实例”章节,更新了界面截图以及相关内容描述。 修改“登录HexaTier”章节,修改了操作步骤。 修改“配置高可用模式”章节,修改了操作步骤。 2017-09-15 第一次正式发布。
  • 评估由配置变更触发的示例函数 Config服务检测到自定义合规规则范围内的资源发生更改时,会调用函数的示例如下: import time import http.client from huaweicloudsdkcore.auth.credentials import GlobalCredentials from huaweicloudsdkcore.exceptions.exceptions import ConnectionException from huaweicloudsdkcore.exceptions.exceptions import RequestTimeoutException from huaweicloudsdkcore.exceptions.exceptions import ServiceResponseException from huaweicloudsdkconfig.v1.region.config_region import ConfigRegion from huaweicloudsdkconfig.v1.config_client import ConfigClient from huaweicloudsdkconfig.v1 import PolicyResource, PolicyStateRequestBody from huaweicloudsdkconfig.v1 import UpdatePolicyStateRequest ''' 合规规则评估逻辑: 返回“Compliant” 或 “NonCompliant” 本示例中, 当资源类型为ecs.cloudservers, 且该ecs的vpcId字段不是合规规则参数所指定的vpcId时, 会返回不合规, 否则返回合规。 ''' def evaluate_compliance(resource, parameter): if resource.get("provider") != "ecs" or resource.get("type") != "cloudservers": return "Compliant" vpc_id = resource.get("properties", {}).get("metadata", {}).get("vpcId") return "Compliant" if vpc_id == parameter.get("vpcId") else "NonCompliant" def update_policy_state(context, domain_id, evaluation): auth = GlobalCredentials(ak=context.getAccessKey(), sk=context.getSecretKey(), domain_id=domain_id) client = ConfigClient.new_builder() \ .with_credentials(credentials=auth) \ .with_region(region=ConfigRegion.value_of(region_id="cn-north-4")) \ .build() try: response = client.update_policy_state(evaluation) return 200 except ConnectionException as e: print("A connect timeout exception occurs while the Config performs some operations, exception: ", e.error_msg) return e.status_code except RequestTimeoutException as e: print("A request timeout exception occurs while the Config performs some operations, exception: ", e.error_msg) return e.status_code except ServiceResponseException as e: print("There is service error, exception: ", e.status_code, e.error_msg) return e.status_code def handler(event, context): domain_id = event.get("domain_id") resource = event.get("invoking_event", {}) parameters = event.get("rule_parameter") compliance_state = evaluate_compliance(resource, parameters) request_body = UpdatePolicyStateRequest(PolicyStateRequestBody( policy_resource = PolicyResource( resource_id = resource.get("id"), resource_name = resource.get("name"), resource_provider = resource.get("provider"), resource_type = resource.get("type"), region_id = resource.get("region_id"), domain_id = domain_id ), trigger_type = event.get("trigger_type"), compliance_state = compliance_state, policy_assignment_id = event.get("policy_assignment_id"), policy_assignment_name = event.get("policy_assignment_name"), evaluation_time = event.get("evaluation_time"), evaluation_hash = event.get("evaluation_hash") )) for retry in range(5): status_code = update_policy_state(context, domain_id, request_body) if status_code == http.client.TOO_MANY_REQUESTS: print("TOO_MANY_REQUESTS: retry again") time.sleep(1) elif status_code == http.client.OK: print("Update policyState successfully.") break else: print("Failed to update policyState.") break
  • 方案架构 系统升级时,若采用蓝绿部署方式,开发人员先将A边服务器(原蓝环境)下线,同时访问流量将全部切分到B边服务器,此时对A边服务器进行升级操作。A边服务器升级完毕后,将A边服务器设为灰度测试环境,由测试人员对A边服务器进行灰度验证。灰度验证完毕且功能正常后,A边业务服务器(绿环境)正式上线,并将所有流量切分到A边业务服务器,此时蓝绿部署完毕。在服务运行过程中,如果A边服务器出现紧急情况,执行蓝绿倒换实现业务快速恢复。 图1 灰度发布原理 若采用金丝雀灰度部署方式,再重复前面的操作,将B边服务器进行升级,并完成灰度测试及正式上线,此时就完成新系统的灰度发布。
  • 附录 A边节点下线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 #server X.X.X.X:X; #A节点下线 # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } upstream portal_test { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP #if ( $remote_addr ~* "X.X.X.X") { # set $backend $test; #} proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 部署节点 # 获取应用进程id pid=`ps -ef | grep app_name | grep -v grep | awk '{print $2}'` if [ -z "$pid" ]; then echo "[app_name pid is not exist.]" else echo "app_name pid: $pid " # 停止该进程 kill -15 $pid fi # 重新启动应用,可通过执行部署脚本和部署命令两种方式启动应用,如下: # 方式一:通过执行部署脚本启动应用 # sh startup.sh # 方式二:通过执行命令启动应用,建议采用nohup后台启动方式 # nohup java -jar /usr/local/app/SpringbootDemo.jar & A边节点灰度上线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 #server X.X.X.X:X; #A节点下线 # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } upstream portal_test { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; #A节点灰度上线 # 下面填入B主机IP及应用服务端口 #server X.X.X.X:X; } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP if ( $remote_addr ~* "X.X.X.X") { set $backend $test; } proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } B边节点下线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 #server X.X.X.X:X; #B节点下线 } upstream portal_test { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP #if ( $remote_addr ~* "X.X.X.X") { # set $backend $test; #} proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } B边节点灰度上线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 #server X.X.X.X:X; #B节点下线 } upstream portal_test { # 下面填入A主机IP及应用服务端口 #server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; #B节点灰度上线 } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP if ( $remote_addr ~* "X.X.X.X") { set $backend $test; } proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 节点上线-代码示例 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$time_local|$remote_addr[$remote_port]|$request|$request_method|$content_length|' '$content_type|$http_referer|$host|$http_x_forwarded_for|' '$http_true_client_ip|$server_name|$request_uri|$server_addr|$server_port|' '$status|$request_time|$upstream_addr|$upstream_response_time|$cookie_domain_tag'; access_log logs/access.log main; #访问日志:存放路径,日志级别。 error_log logs/error.log; #错误日志:存放路径。 sendfile on; keepalive_timeout 65; upstream portal { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } upstream portal_test { # 下面填入A主机IP及应用服务端口 server X.X.X.X:X; # 下面填入B主机IP及应用服务端口 server X.X.X.X:X; } server { listen XXX;#填入Nginx端口 server_name localhost; location / { set $backend portal; set $test portal_test; #下面填入灰度验证机器IP #if ( $remote_addr ~* "X.X.X.X") { # set $backend $test; #} proxy_pass https://$backend; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
  • 方案架构 系统升级时,开发人员第一次部署应用会创建出一组灰度负载,此时灰度负载中的系统版本为新版本,此时Service将部分流量转发至灰度负载上,由测试人员在灰度负载中进行版本验证。版本验证结束后,开发人员开始第二次部署应用升级现网服务,此时Service将全部流量转发至灰度负载上并升级现网服务,现网服务升级到最新版本后,Service将全部流量转发回现网负载并释放灰度负载,完成新系统的发布。 图1 灰度发布原理
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 QPS:即Query Per Second,表示每秒处理的读写操作数,单位是次/秒。 平均/最大时延:操作的平均/最大延迟时间,单位为毫秒(ms)。 x%延迟:指x%操作的延迟时间,单位为毫秒(ms)。例如该指标的值为10ms,99.99%延迟表示99.99%的请求可以在10ms内被处理。 表1 SET操作命令测试结果(未开启SSL场景) 实例规格 实例CPU类型 并发连接数(个) QPS 平均时延(ms) 99%延迟(ms) 99.9%延迟(ms) 32G X86 1000 322899.21 2.661 4.319 8.511 3000 360336.14 7.757 13.055 29.439 10000 330378.22 29.411 97.279 153.599 表2 SET操作命令测试结果(开启SSL场景) 实例规格 实例CPU类型 并发连接数(个) QPS 平均时延(ms) 99%延迟(ms) 99.9%延迟(ms) 32G X86 1000 238307.26 3.603 5.151 6.527 3000 185455.62 13.196 20.607 352.255 10000 111913.19 57.537 96.767 121.343 表3 GET操作命令测试结果(未开启SSL场景) 实例规格 实例CPU类型 并发连接数(个) QPS 平均时延(ms) 99%延迟(ms) 99.9%延迟(ms) 32G X86 1000 450422.66 1.875 2.767 6.879 3000 432450.2 6.451 12.095 28.415 10000 507338.44 23.001 95.231 176.127 表4 GET操作命令测试结果(开启SSL场景) 实例规格 实例CPU类型 并发连接数(个) QPS 平均时延(ms) 99%延迟(ms) 99.9%延迟(ms) 32G X86 1000 274066.16 3.076 4.255 7.071 3000 201063.51 11.743 18.047 387.071 10000 116026.38 51.284 84.479 136.191
  • 测试命令 未开启SSL场景: ./memtier_benchmark -s {IP} -p {port} -c {connect_number} -t {thread} -n allkeys --key-prefix="xxxx" --key-minimum=1 --key-maximum={max_key} --key-pattern=P:P --ratio=1:0 -d {datasize} --cluster-mode 参数参考值:-c {connect_number}:1000,--key-maximum{max_key}:2000000,-d {datasize}:32。 开启SSL场景: ./memtier_benchmark -s {IP} -p {port} -c {connect_number} -t {thread} -n allkeys --key-prefix="xxxx" --key-minimum=1 --key-maximum={max_key} --key-pattern=P:P --ratio=1:0 -d {datasize} --cluster-mode --tls --cacert ca.crt 参数参考值:-c {connect_number}:1000,--key-maximum{max_key}:2000000,-d {datasize}:32。
  • 测试步骤 创建Redis缓存实例。 创建3台弹性云服务器(ECS),ECS选择与实例相同可用区、VPC、子网和安全组。 如果是测试单机或主备实例,创建1台ECS即可。 在每台ECS上安装memtier_benchmark。安装步骤参考下载与安装工具。 每台ECS上执行测试命令。 memtier_benchmark -s {IP} -n {nreqs} -c {connect_number} -t 4 -d {datasize} 如果实例类型为cluster集群,则命令为memtier_benchmark --cluster-mode -s {IP} -n {nreqs} -c {connect_number} -t 4 -d {datasize} 参数参考值:-c {connect_number}:200,-n {nreqs}:10000000,-d {datasize}:32。 -s表示实例的域名连接地址或IP地址。 -t表示基准测试使用的线程数量 -c表示客户端连接数 -d表示单条数据大小,单位byte -n表示测试包数量 不断调整客户端连接数,执行4,得到每秒最大操作数。 取3台测试ECS得到的每秒操作数总和,即为对应规格的性能数据。 如果测试Redis集群,建议每台测试ECS各开启两个benchmark客户端。
  • 下载与安装工具 以操作系统为CentOS 8.0为例进行安装。 准备工作。 安装编译所需的工具。 yum install -y autoconf yum install -y automake yum install -y make yum install -y gcc-c++ yum install -y git 启用PowerTools存储库的方法。 dnf config-manager --set-enabled PowerTools 安装需要的依赖库。 yum install -y pcre-devel yum install -y zlib-devel yum install -y libmemcached-devel yum install -y openssl-devel 安装libevent库。 yum install -y libevent-devel 下载、编译、安装memtier_benchmark的库。 根目录下创建文件夹,用于下载memtier_benchmark。 mkdir /env 下载memtier_benchmark源码。 cd /env git clone https://github.com/RedisLabs/memtier_benchmark.git 进入源码目录。 cd memtier_benchmark 编译生成可执行文件memtier_benchmark。 autoreconf -ivf ./configure make 将工具安装到系统中。 make install 运行帮助命令查看是否安装成功。 memtier_benchmark --help
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 QPS:即Query Per Second,表示每秒处理的读写操作数,单位是次/秒。 平均/最大时延:操作的平均/最大延迟时间,单位为毫秒(ms)。 x%延迟:指x%操作的延迟时间,单位为毫秒(ms)。例如该指标的值为10ms,99.99%延迟表示99.99%的请求可以在10ms内被处理。 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 平均时延(ms) 8G X86 500 132068.98 11 18 205 3.298 10000 82386.58 171 178 263 69.275 8G ARM 500 94811.89 10 12 13 3.476 10000 61264.37 340 350 351 83.848 32G X86 500 131385.33 9.5 16 17 3.333 10000 82275.41 157 162.18 162.43 62.105 32G ARM 500 117553.02 8 21 22 3.875 10000 76001.7 175 386 387 99.362 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 平均时延(ms) 8G X86 500 138652.02 7 11 12 2.117 10000 82710.94 123.7 281.6 282.9 61.078 8G ARM 500 95432.59 8.8 10 214 3.186 10000 60984.16 217 337.15 337.92 83.321 32G X86 500 139113.02 6.6 10 11 2.119 10000 82489.36 100 105.66 106 60.968 32G ARM 500 139041.45 6 10 11 2.487 10000 81563.41 141 149 150 63
  • 测试命令 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connection} -d {datasize} -t {command} 参数参考值:-c {connect_number}:500,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32,-t {command}:set。
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 QPS:即Query Per Second,表示每秒处理的读写操作数,单位是次/秒。 平均/最大时延:操作的平均/最大延迟时间,单位为毫秒(ms)。 x%延迟:指x%操作的延迟时间,单位为毫秒(ms)。例如该指标的值为10ms,99.99%延迟表示99.99%的请求可以在10ms内被处理。 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 95%左右延迟(ms) 99.99%延迟(ms) 最大时延(ms) 64G X86 3000 1,323,935.00 3.3 9.4 220 5000 1,373,756.00 5.3 13 240 10000 1,332,074.00 11 26 230 80000 946,032.00 110 460 6800 64G ARM 3000 837,864.92‬ 5.8 16 78 5000 763,609.69‬ 10 29 240 10000 703,808.39 20 47 250 80000 625,841.69 170 410 940 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 95%左右延迟(ms) 99.99%延迟(ms) 最大时延(ms) 64G X86 3000 1,366,153.00 3.3 9.3 230 5000 1,458,451.00 5.1 13 220 10000 1,376,399‬.00 11 29 440 80000 953,837‬.00 120 1300 2200 64G ARM 3000 764,114.55 6.1 17 100 5000 765,187.74 10 27 230 10000 731,310.95 20 47 250 80000 631,373.33 170 1300 1900
  • 测试步骤 创建Redis缓存实例。 创建3台弹性云服务器(ECS),ECS选择与实例相同可用区、VPC、子网和安全组。 如果是测试单机或主备实例,创建1台ECS即可。 在每台ECS上安装redis-benchmark。安装步骤参考下载与安装工具。 每台ECS上执行测试命令。 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connect_number} -d {datasize} -t {command} 参数参考值:-c {connect_number}:200,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。 -h表示实例的域名连接地址或IP地址。 -p表示实例的端口,默认为6379。 -a表示实例的连接密码,免密连接的实例无需输入-a {password}。 -t表示执行具体测试命令合集。例如只测试set命令时,使用-t set;如果要测试ping、get、set命令,则使用 -t ping,set,get,命令间使用“,”分隔。 -c表示客户端连接数。 -d表示单条数据大小,单位Byte。 -n表示测试包数量。 -r表示使用随机key数量。 不断调整客户端连接数,执行4,得到每秒最大操作数。 取3台测试ECS得到的每秒操作数总和,即为对应规格的性能数据。 如果测试Redis集群,建议每台测试ECS各开启两个benchmark客户端。 redis-benchmark 测试cluster集群实例时需要加 --cluster 参数,其他实例类型不需要加。 如果想对cluster集群的最大连接数进行性能压测,但是压测到1万连接时程序退出,或者报错 Cannot assign requested address。这说明是测试用的ECS本机性能不足,请先检查自己是否只用了1台ECS进行压测。想要对集群压测,建议准备3台ECS,每台ECS起3个redis-benchmark来测试redis实例的最大连接数。
  • 下载与安装工具 下载redis-6.0.9客户端。 wget http://download.redis.io/releases/redis-6.0.9.tar.gz 解压客户端压缩包。 tar xzf redis-6.0.9.tar.gz 进入redis-6.0.9的src目录下。 cd redis-6.0.9/src 编译源码。 make 查看是否有redis-benchmark可执行文件 ls 将工具安装到系统中。 make install
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 QPS:即Query Per Second,表示每秒处理的读写操作数,单位是次/秒。 平均/最大时延:操作的平均/最大延迟时间,单位为毫秒(ms)。 x%延迟:指x%操作的延迟时间,单位为毫秒(ms)。例如该指标的值为10ms,99.99%延迟表示99.99%的请求可以在10ms内被处理。 表1 SET操作命令测试结果(未开启SSL场景) 实例规格 实例CPU类型 并发连接数(个) QPS 平均时延(ms) 99%延迟(ms) 99.9%延迟(ms) 8G X86 500 151047.41 3.355 6.175 12.223 1000 149346.86 6.673 11.711 31.743 32G X86 500 143648.1 3.476 5.215 13.055 4000 104517.03 37.881 139.263 175.103 表2 SET操作命令测试结果(开启SSL场景) 实例规格 实例CPU类型 并发连接数(个) QPS 平均时延(ms) 99%延迟(ms) 99.9%延迟(ms) 8G X86 500 86827.84 5.537 8.575 9.535 1000 92413.99 10.055 15.615 17.279 32G X86 500 87385.5 5.584 8.383 9.343 4000 50813.67 62.623 100.863 104.959 表3 GET操作命令测试结果(未开启SSL场景) 实例规格 实例CPU类型 并发连接数(个) QPS 平均时延(ms) 99%延迟(ms) 99.9%延迟(ms) 8G X86 500 180413.66 2.764 4.287 11.583 1000 179113.5 5.586 8.959 29.823 32G X86 500 175268.86 2.848 4.079 11.839 4000 134755.17 29.161 126.463 166.911 表4 GET操作命令测试结果(开启SSL场景) 实例规格 实例CPU类型 并发连接数(个) QPS 平均时延(ms) 99%延迟(ms) 99.9%延迟(ms) 8G X86 500 113637.22 4.316 6.239 7.359 1000 105504.55 8.962 13.439 15.295 32G X86 500 100309.99 4.603 6.559 6.943 4000 57007.69 55.052 85.503 89.087
  • 测试命令 未开启SSL场景: ./memtier_benchmark -s {IP} -p {port} -c {connect_number} -t {thread} -n allkeys --key-prefix="xxxx" --key-minimum=1 --key-maximum={max_key} --key-pattern=P:P --ratio=1:0 -d {datasize} 参数参考值:-c {connect_number}:1000,--key-maximum{max_key}:2000000,-d {datasize}:32。 开启SSL场景: ./memtier_benchmark -s {IP} -p {port} -c {connect_number} -t {thread} -n allkeys --key-prefix="xxxx" --key-minimum=1 --key-maximum={max_key} --key-pattern=P:P --ratio=1:0 -d {datasize} --tls --cacert ca.crt 参数参考值:-c {connect_number}:1000,--key-maximum{max_key}:2000000,-d {datasize}:32。
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 QPS:即Query Per Second,表示每秒处理的读写操作数,单位是次/秒。 平均/最大时延:操作的平均/最大延迟时间,单位为毫秒(ms)。 x%延迟:指x%操作的延迟时间,单位为毫秒(ms)。例如该指标的值为10ms,99.99%延迟表示99.99%的请求可以在10ms内被处理。 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 32G X86 1000 371780.2‬ 5.6 6.3 44 10000 256073.11 90 220 460 32G ARM 1000 317053.78 17 34 230 10000 248832.33 410 490 750 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 32G X86 1000 427000.04 5.0 5.3 78 10000 302159.03‬ 63 220 460 32G ARM 1000 421402.06 13 14 65 10000 309359.18 180 260 500
  • Redis版本差异 DCS在创建实例时,Redis可选择“版本号”、“实例类型”。 DCS Redis 3.0已下线,暂停售卖,建议使用Redis 4.0/5.0/6.0。 由于Redis不同版本的底层架构不一样,在创建Redis实例时,确定Redis版本后,将不能修改,如Redis 3.0暂不支持升级到Redis 4.0或者Redis 5.0。如果需要由低版本升级到高版本,建议重新购买高版本实例,然后进行数据迁移。 版本号 版本号共有3.0,4.0,5.0,6.0版本可以选择,它们的区别如表1。更多Redis特性,请参考Redis4.0新特性介绍、Redis5.0新特性介绍和Redis6.0新特性介绍。 表1 不同版本支持的特性、性能差异说明 比较项 Redis 3.0(已停售) Redis 4.0 & Redis 5.0 Redis 6.0 兼容开源版本 Redis 3.0兼容开源3.0.7版本 Redis 4.0兼容开源4.0.14版本,Redis 5.0兼容开源5.0.9版本 Redis 6.0基础版兼容开源6.2.7版本 企业版兼容开源Redis 6 实例部署模式 采用虚拟机部署 在物理机上容器化部署 基础版在物理机上容器化部署 企业版采用虚拟机部署 创建实例耗时 3~15分钟,集群约10~30分钟 约8秒 基础版:约8秒 企业版:5~15分钟 QPS 单节点约10万QPS 单节点约10万QPS 基础版单节点约10万QPS 企业版单节点约40万QPS 公网访问 支持 暂不支持 暂不支持 域名连接 支持VPC内使用域名连接 支持VPC内使用域名连接 支持VPC内使用域名连接 可视化数据管理 不支持 提供Web CLI访问Redis,管理数据 提供Web CLI访问Redis,管理数据 实例类型 支持单机、主备、Proxy集群 支持单机、主备、Proxy集群、Cluster集群 基础版:单机、主备、Cluster集群 企业版:主备 扩容/缩容 支持在线扩容和缩容 支持在线扩容和缩容 支持在线扩容和缩容 备份恢复 主备和Proxy集群实例支持 主备、Proxy集群、Cluster集群和读写分离实例支持 主备、Cluster集群实例支持 实例类型 Redis实例类型分为单机、主备、Proxy集群、Cluster集群和读写分离,它们的架构与应用场景,请参考实例类型章节。 父主题: 产品规格差异
  • Redis 6.0禁用的命令 表5 Redis 6.0基础版实例的禁用命令 Generic (Key) Server Cluster MIGRATE SLAVEOF CLUSTER MEET - SHUTDOWN CLUSTER FLUSHSLOTS - LASTSAVE CLUSTER ADDSLOTS - DEBUG相关类 CLUSTER DELSLOTS - COMMAND CLUSTER SETSLOT - SAVE CLUSTER BUMPEPOCH - BGSAVE CLUSTER SAVECONFIG - BGREWRITEAOF CLUSTER FORGET - SYNC CLUSTER REPLICATE - PSYNC CLUSTER COUNT-FAILURE-REPORTS - - CLUSTER FAILOVER - - CLUSTER SET-CONFIG-EPOCH - - CLUSTER RESET 表6 Redis 6.0企业版实例的禁用命令 Generic (Key) Server HyperLoglog MIGRATE SLAVEOF PFDEBUG - SHUTDOWN - - SAVE - - BGSAVE - - BGREWRITEAOF - - SYNC - - PSYNC - - REPLICAOF -
  • Redis 6.0企业版支持的命令 以下列出了Redis 6.0企业版实例支持的命令。 表3 Redis 6.0 企业版实例支持命令清单1 Generic (Key) String Hash List Set Sorted Set Server COPY APPEND HDEL BLMOVE SADD BZPOPMAX FLUSHALL DEL BITCOUNT HEXISTS LINDEX SCARD BZPOPMIN FLUSHDB DUMP BITOP HGET LINSERT SDIFF ZADD DBSIZE EXISTS BITPOS HGETALL LLEN SDIFFSTORE ZCARD TIME EXPIRE BITFIELD HINCRBY LPOP SINTER ZCOUNT INFO MOVE DECR HINCRBYFLOAT LPUSHX SINTERSTORE ZDIFF CLIENT KILL PERSIST DECRBY HKEYS LRANGE SISMEMBER ZDIFFSTORE CLIENT LIST PTTL GET HMGET LREM SMEMBERS ZINCRBY CLIENT GETNAME RANDOMKEY GETRANGE HMSET LSET SMOVE ZINTER CLIENT SETNAME RENAME GETSET HSET LTRIM SPOP ZINTERSTORE CONFIG GET RENAMENX GETDEL HSETNX RPOP SRANDMEMBER ZLEXCOUNT MONITOR SORT GETEX HVALS LMOVE SREM ZMSCORE SLOWLOG TTL INCR HSCAN RPOPLPUSH SUNION ZPOPMAX ROLE TYPE INCRBY HSTRLEN RPUSH SUNIONSTORE ZPOPMIN SWAPDB SCAN INCRBYFLOAT HLEN RPUSHX SSCAN ZRANDMEMBER MEMORY PEXPIREAT MGET HRANDFIELD LPUSH SMISMEMBER ZRANGE LASTSAVE PEXPIRE MSET - BLPOP - ZRANGEBYLEX REPLCONF OBJECT ENCODING MSETNX - BRPOP - ZRANGEBYSCORE LASTSAVE OBJECT FREQ PSETEX - BRPOPLPUSH - ZRANGESTORE COMMAND OBJECT IDLETIME SET - LPOS - ZRANK COMMAND COUNT OBJECT REFCOUNT SETBIT - - - ZREM COMMAND GETKEYS RESTORE SETEX - - - ZREMRANGEBYLEX COMMAND INFO TOUCH SETNX - - - ZREMRANGEBYRANK CONFIG UNLINK SETRANGE - - - ZREMRANGEBYSCORE - EXPIREAT STRLEN - - - ZREVRANGE - KEYS SUBSTR - - - ZREVRANGEBYLEX - WAIT - - - - ZREVRANGEBYSCORE - - - - - - ZREVRANK - - - - - - ZSCAN - - - - - - ZSCORE - - - - - - ZUNION - - - - - - ZUNIONSTORE - 表4 Redis 6.0 企业版实例支持命令清单2 HyperLoglog Pub/Sub Connection Scripting Geo Stream Bitmaps PFADD PSUBSCRIBE AUTH EVAL GEOADD XACK BITCOUNT PFCOUNT PUBLISH CLIENT CACHING EVALSHA GEODIST XADD BITFIELD PFMERGE PUBSUB CLIENT GETNAME SCRIPT DEBUG GEOHASH XAUTOCLAIM BITFIELD_RO PFSELFTEST PUNSUBSCRIBE CLIENT GETREDIR SCRIPT EXISTS GEOPOS XCLAIM BITOP - SUBSCRIBE CLIENT ID SCRIPT FLUSH GEORADIUS XDEL BITPOS - UNSUBSCRIBE CLIENT INFO SCRIPT KILL GEORADIUSBYMEMBER XGROUP GETBIT - - CLIENT KILL SCRIPT LOAD GEORADIUSBYMEMBER_RO XINFO SETBIT - - CLIENT LIST - GEORADIUS_RO XLEN - - - CLIENT PAUSE - GEOSEARCH XPENDING - - - CLIENT REPLY - GEOSEARCHSTORE XRANGE - - - CLIENT SETNAME - - XREAD - - - CLIENT TRACKING - - XREADGROUP - - - CLIENT TRACKINGINFO - - XREVRANGE - - - CLIENT UNBLOCK - - XSETID - - - CLIENT UNPAUSE - - XTRIM - - - ECHO - - - - - - HELLO - - - - - - PING - - - - - - QUIT - - - - - - RESET - - - - - - SELECT - - - -
  • Redis 6.0基础版支持的命令 表1 Redis 6.0单机/主备/Cluster集群实例支持命令清单1 Generic (Key) String Hash List Set Sorted Set Server DEL APPEND HDEL BLPOP SADD ZADD FLUSHALL DUMP BITCOUNT HEXISTS BRPOP SCARD ZCARD FLUSHDB EXISTS BITOP HGET BRPOPLRUSH SDIFF ZCOUNT DBSIZE EXPIRE BITPOS HGETALL LINDEX SDIFFSTORE ZINCRBY TIME MOVE DECR HINCRBY LINSERT SINTER ZRANGE INFO PERSIST DECRBY HINCRBYFLOAT LLEN SINTERSTORE ZRANGEBYSCORE CONFIG GET PTTL GET HKEYS LPOP SISMEMBER ZRANK MONITOR RANDOMKEY GETRANGE HMGET LPUSHX SMEMBERS ZREMRANGEBYRANK SLOWLOG RENAME GETSET HMSET LRANGE SMOVE ZREMRANGEBYCORE ROLE RENAMENX INCR HSET LREM SPOP ZREVRANGE SWAPDB RESTORE INCRBY HSETNX LSET SRANDMEMBER ZREVRANGEBYSCORE MEMORY SORT INCRBYFLOAT HVALS LTRIM SREM ZREVRANK CONFIG TTL MGET HSCAN RPOP SUNION ZSCORE ACL TYPE MSET HSTRLEN RPOPLPU SUNIONSTORE ZUNIONSTORE - SCAN MSETNX HLEN RPOPLPUSH SSCAN ZINTERSTORE - OBJECT PSETEX - RPUSH SMISMEMBER ZSCAN - PEXPIREAT SET - RPUSHX - ZRANGEBYLEX - PEXPIRE SETBIT - LPUSH - ZLEXCOUNT - KEYS SETEX - BLMOVE - ZPOPMIN - COPY SETNX - LMOVE - ZPOPMAX - - SETRANGE - LPOS - ZREMRANGEBYSCORE - - STRLEN - - - ZREM - - BITFIELD - - - ZDIFF - - BITFIELD_RO - - - ZDIFFSTORE - - GETDEL - - - ZINTER - - GETEX - - - ZMSCORE - - - - - - ZRANDMEMBER - - - - - - ZRANGESTORE - - - - - - ZUNION - 表2 Redis 6.0单机/主备/Cluster集群实例支持命令清单2 HyperLoglog Pub/Sub Transactions Connection Scripting Geo Stream PFADD PSUBSCRIBE DISCARD AUTH EVAL GEOADD XACK PFCOUNT PUBLISH EXEC ECHO EVALSHA GEOHASH XADD PFMERGE PUBSUB MULTI PING SCRIPT EXISTS GEOPOS XCLAIM - PUNSUBSCRIBE UNWATCH QUIT SCRIPT FLUSH GEODIST XDEL - SUBSCRIBE WATCH SELECT(Cluster集群实例不支持) SCRIPT KILL GEORADIUS XGROUP - UNSUBSCRIBE - CLIENT CACHING SCRIPT LOAD GEORADIUSBYMEMBER XINFO - - - CLIENT GETREDIR - - XLEN - - - CLIENT INFO - - XPENDING - - - CLIENT TRACKING - - XRANGE - - - CLIENT TRACKINGINFO - - XREAD - - - CLIENT UNPAUSE - - XREADGROUP - - - CLIENT KILL - - XREVRANGE - - - CLIENT LIST - - XTRIM - - - CLIENT GETNAME - - XAUTOCLAIM - - - CLIENT SETNAME - - XGROUP CREATECONSUMER - - - HELLO - - - - - - RESET - - -
  • 网络隔离 VPC允许租户通过配置VPC入站IP范围,来控制连接缓存实例的IP地址段。DCS实例运行在租户独立的VPC内。租户可以创建一个跨可用区的子网组,之后可以根据业务需要,将部署DCS的高可用实例选择此子网完成,DCS在创建完实例后会为租户分配此子网的IP地址,用于缓存实例。DCS实例部署在租户VPC后,租户可通过VPN使其它VPC能够访问实例所在VPC,也可以在VPC内部创建ECS,通过私有IP连接缓存实例。租户可以综合运用子网、安全组、白名单等配置,来完成DCS实例的隔离,提升DCS实例的安全性。
  • 访问控制 租户创建DCS实例时,可以选择配置安全组(仅Redis 3.0/Redis 6.0企业版/Memcached实例支持)或者白名单(仅Redis 4.0、Redis 5.0和Redis 6.0基础版支持)。 租户可以通过VPC,对DCS实例所在的安全组或白名单入站、出站规则进行限制,从而控制可以连接实例的网络范围。 配置安全组/白名单不需要重启实例。 租户创建DCS实例时,建议将访问方式设置为密码访问,并为实例设置访问密码,防止未经认证的客户端误操作实例,以达到对客户端进行认证访问的目的,提高实例使用的安全性。
  • 传输和存储加密 Redis的传输协议RESP在Redis 6.0之前的版本仅支持明文传输。Redis 6.0基础版实例支持RESP3传输协议,支持SSL传输加密。 当前DCS实例在开启公网访问时(仅Redis 3.0实例支持),支持基于Stunnel的客户端与服务端TLS加密传输(参考文档:Stunnel安装和配置)。在开启公网访问时,指定的CA会为每个实例生成唯一的服务证书。客户端可以使用从服务控制台上下载的CA根证书,并在连接实例时提供该证书,对实例服务端进行认证并达到加密传输的目的。 由于需要兼容开源RESP协议,在未开启公网访问时,如果客户有传输加密诉求,建议在数据存储前使用加密算法进行加密后传输(例如AES 256等),并且控制在信任域内进行访问,加密后的数据在落盘保存时同样也会加密保存。
  • 数据复制 DCS的主备和集群实例支持部署高可用实例。租户可选择在单可用区或多可用区中部署实例。当租户选择跨AZ实例时,DCS实例会主动建立和维护Redis同步复制。在实例主节点故障的情况下,缓存实例会自动将备实例升为主节点,从而达到高可用的目的。如果租户使用缓存实例时,业务中读取数据比例大,可以选择4.0以上版本的读写分离实例或者集群多副本实例,缓存实例会自动维护主节点和多个备节点之间的数据同步复制,租户可以根据业务需要连接不同的地址进行读写分离。
共100000条