华为云用户手册

  • 请求消息 请求参数 无 请求示例 GET https://bss.myhuaweicloud.com/v2/products/usage-types?offset=0&limit=3 HTTP/1.1 Content-Type: application/json X-Auth-Token:MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ X-Language: zh_CN
  • URI GET /v2/products/usage-types 表1 Header参数 参数 是否必选 取值范围 描述 X-Language 否 最大长度:8 语言。 中文:zh_CN 英文:en_US 缺省为zh_CN。 表2 查询参数 参数 是否必选 参数类型 取值范围 描述 resource_type_code 否 String 最大长度:64 资源类型编码,例如E CS 的VM为“hws.resource.type.vm”。您可以调用查询资源类型列表接口获取。 此参数不携带或携带值为空时,不作为筛选条件;携带值为空串或携带值为null时,作为筛选条件。 offset 否 Integer [0-100000000] 偏移量,从0开始。默认值为0。 此参数不携带或携带值为空或携带值为null时,取默认值0;不支持携带值为空串。 说明: offset用于分页处理,如不涉及分页,请使用默认值0。offset表示相对于满足条件的第一个数据的偏移量。如offset = 1,则返回满足条件的第二个数据至最后一个数据。 示例1,满足查询条件的结果共10条数据,limit取值为10,offset取值为1,则返回的数据为2~10,第一条数据不返回。 示例2,查询总数20条,期望每页返回10条数据,则获取第一页数据,入参offset填写0,limit填写10;获取第二页数据,入参offset填写10,limit填写10。 limit 否 Integer [1-100] 每次查询的数量,默认值为10。 此参数不携带或携带值为空或携带值为null时,取默认值10;不支持携带值为空串。
  • 共享 基于 资源访问管理 (Resource Access Manager,简称 RAM )服务,资源所有者可以依据最小权限原则和不同的使用诉求,选择不同的共享权限,资源使用者只能对资源进行权限内的访问,保证共享资源在满足资源使用者业务诉求的同时,提升资源管理的安全性。关于RAM服务的更多信息请参见什么是资源访问管理。 当您的账号由华为云组织管理时,您还可以利用此优势更轻松地共享资源。如果您的账号在组织中,则您可以与单个账号共享,也可以与组织或OU中的所有账号共享,而不必枚举每个账号,具体请参见启用与组织共享资源。 共享VPC 更新共享 退出共享
  • 设备端开发 完成云端配置后,需要进行设备端业务开发。完整的设备开发流程可参考设备侧开发。本章节以MQTT.fx为例,介绍在设备迁移场景下,设备侧如何在尽量少改动的情况下,实现设备建立MQTT连接、数据上报、指令接收等功能。 设备同 物联网平台 建立MQTT连接。 参考下表配置鉴权参数。 参数 必选/可选 参数描述 Broker Address 必选 华为云物联网平台的MQTT协议接入地址,请参考此处获取。 Broker Port 必选 8883。若设备侧MQTT接入端口不是8883,且无法修改,可以开通企业版实例。 Client ID 可选 使用设备迁移前的Client ID。 User Name 必选 填写步骤3注册设备时生成的设备ID,默认通过控制台生成的设备ID会添加产品ID前缀。在设备迁移场景,设备侧User Name参数无法修改时可以调用创建设备接口,指定设备ID参数值同迁移前的User Name参数值保持一致。 Password 必选 加密后的设备密钥。Password的值为使用“HMACSHA256”算法以时间戳为密钥,对secret进行加密后的值。 secret为注册设备时平台返回的secret。 参考下表配置“SSL/TLS”认证参数,然后单击“Apply”。 参数 必选/可选 参数描述 Enable SSL/TLS 必选 选择“Enable SSL/TLS” CA certificate file 必选 上传证书资源页面获取的CA证书。 设备同物联网平台建立连接后,设备沿用迁移前的topic和payload格式上报数据。物联网平台针对这类非系统预定义的topic,统一按照“设备消息”的处理流程将设备上报的数据转发给第三方应用或者华为云的其他云服务处理。 图2 设备在线 根据迁移前的topic进行订阅,接收应用服务器下发的指令。
  • 整体方案 假设企业终端设备接入自建MQTT集群,业务架构如下图所示。 基于MQTT协议的上行数据和下行指令的业务定义如下: 业务场景 通信Topic 报文Payload 设备上报数据 /aircondition/data/up { "temperature": 26.0 } 服务端控制指令 /aircondition/cmd { "switch": "off" } 为减少企业改造成本,华为云物联网平台提供如下迁移方案,设备侧不用改变原有的topic和payload报文格式,就可以快速迁移设备到华为云物联网平台。 企业设备迁移上云有三个核心变更点: 设备侧修改接入 域名 为华为云物联网平台的接入点。 配置规则引擎,把设备数据流转到应用服务器、AMQP消费组或华为云第三方云服务产品。 应用服务器适配设备消息下发接口往指定topic下发消息。
  • 测试模型 workload模型 表2 测试模型 测试模型编号 测试模型 读多写少场景 workload-read-mostly 95% read, 5% update 读写均衡场景 workload-read-write-combination 50% update, 50% read 读改写均衡场景 workload-read-modify-write 50% read, 50% readmodifywrite 读更新写混合场景 workload-mixed-operational-analytical 65% read, 25% update, 10% insert 写多读少场景 workload-insert-mostly 90% insert, 10% read 数据模型 fieldlength=100, fieldcount=10 预置数据量 本次性能测试中,针对每种规格的实例,测试了如下预置数据量的性能。 预置数据具体如下表所示: 表3 预置数据量 编号 规格 预置数据量 cluster1 4U16GB 50GB cluster2 8U32GB 100GB cluster3 16U64GB 200GB cluster4 32U128GB 400GB
  • 测试环境 区域:华北-北京四 可用区:可用区1+可用区2+可用区3(跨3个可用区部署) 弹性云服务器(Elastic Cloud Server,简称ECS):规格选择h3.4xlarge.2,16U32GB,操作系统镜像使用CentOS 7.5 64位版本。 被测试实例的配置:每个实例均包含3个节点。 被测试实例的规格:覆盖以下规格类型,详见表1 实例规格。 表1 实例规格 编号 规格 cluster1 4U16GB cluster2 8U32GB cluster3 16U64GB cluster4 32U128GB
  • 性能测试数据 不同测试模型下,不同规格且预置相当数据量,测试的OPS*数据(表格中黑色字体),详见表1 测试数据中加粗内容。 表1 测试数据 节点规格 4U16GB 8U32GB 16U64GB 32U128GB 客户端并发数 32 64 128 256 预置数据量 50GB 100GB 200GB 400GB 读多写少场景 workload-read-mostly 15627 44612 90713 169037 读写均衡场景 workload-read-write-combination 19565 46240 95065 158793 读改写均衡场景 workload-read-modify-write 11768 29488 59332 96964 读更新写混合场景 workload-mixed-operational-analytical 17534 40214 80661 137616 写多读少场景 workload-insert-mostly 23830 44548 67290 111540 OPS:Operation Per Second,数据库每秒执行的操作数。 测试模型编号:测试模型编号对应的测试模型,请参见表2 测试模型。 父主题: 性能白皮书
  • 事件监控支持的事件说明 表1 云数据库 GeminiDB事件监控支持的事件说明 事件来源 事件名称 事件ID 事件级别 事件说明 处理建议 事件影响 NoSQL 创建实例业务失败 NoSQLCreateInstanceFailed 重要 一般是由于实例配额不足或底层资源不足等原因导致。 先释放不再使用的实例再尝试重新发放,或者提交工单调整配额上限。 无法创建数据库实例。 变更规格失败 NoSQLResizeInstanceFailed 重要 一般是由于底层资源不足等原因导致。 提交工单让运维在后台协调资源再重试规格变更操作。 业务中断。 添加节点失败 NoSQLAddNodesFailed 重要 一般是由于底层资源不足等原因导致。 提交工单让运维在后台协调资源,删除添加失败的节点,重新尝试添加新节点。 无 删除节点失败 NoSQLDeleteNodesFailed 重要 一般是由于底层释放资源失败导致。 重新尝试删除节点。 无 扩卷失败 NoSQLScaleUpStorageFailed 重要 一般是由于底层资源不足等原因导致。 提交工单让运维在后台协调资源再重试扩卷操作。 如果磁盘满,会导致业务中断。 重置密码失败 NoSQLResetPasswordFailed 重要 一般是由于重置密码命令超时导致。 重新尝试重置密码操作。 无 修改参数模板失败 NoSQLUpdateInstanceParamGroupFailed 重要 一般是由于修改参数模板命令超时导致。 重新尝试修改参数模板操作。 无 设置备份策略失败 NoSQLSetBackupPolicyFailed 重要 一般是由于数据库连接异常导致。 重新重试设置备份策略操作。 无 创建手动备份失败 NoSQLCreateManualBackupFailed 重要 一般是备份文件导出失败或上传失败等原因导致。 提交工单让运维处理。 无法备份数据。 创建自动备份失败 NoSQLCreateAutomatedBackupFailed 重要 一般是备份文件导出失败或上传失败等原因导致。 提交工单让运维处理。 无法备份数据。 实例运行状态异常 NoSQLFaultyDBInstance 重要 由于灾难或者物理机故障导致实例故障时,会上报该事件,属于关键告警事件。 提交工单。 可能导致数据库服务不可用。 实例运行状态异常已恢复 NoSQLDBInstanceRecovered 重要 针对灾难性的故障,NoSQL有高可用工具会自动进行恢复或者手动恢复,执行完成后会上报该事件。 不需要处理。 无 节点运行状态异常 NoSQLFaultyDBNode 重要 由于灾难或者物理机故障导致数据库节点故障时,会上报该事件,属于关键告警事件。 检查数据库服务是否可以正常使用,并提交工单。 可能导致数据库服务不可用。 节点运行状态异常已恢复 NoSQLDBNodeRecovered 重要 针对灾难性的故障,NoSQL有高可用工具会自动进行恢复或者手动恢复,执行完成后会上报该事件。 不需要处理。 无 实例主备切换 NoSQLPrimaryStandbySwitched 重要 在手动触发的主备倒换或节点故障自动触发的故障倒换场景下,会上报该事件。 不需要处理。 无 出现热点分区键 HotKeyOccurs 重要 客观上是因为主键设置不合理,使得热点数据集中分布在一个分区。客户端不合理的应用程序设计,造成对某一key的频繁读写。 1. 选择合理的分区键。 2. 业务增加缓存,业务应用先从缓存中读取热点数据。 影响业务请求成功率,存在影响集群性能及稳定性的风险。 出现超大分区键 BigKeyOccurs 重要 主键设计不合理,单个分区的记录数或数据量过大,引起了节点负载不均。 1. 选择合理的分区键 2. 基于现有分区键,增加分区键散列。 随着数据量增长,集群稳定性会下降。 数据盘空间不足 NoSQLRiskyDataDiskUsage 重要 数据盘空间不足,产生此告警。 请参见对应服务用户指南中“扩容磁盘”的内容,进行磁盘扩容。 实例被设为只读模式,数据无法写入。 数据盘空间已扩容并恢复可写 NoSQLDataDiskUsageRecovered 重要 数据盘空间已扩容并恢复可写,产生此事件。 无需处理。 无 创建索引失败 NoSQLCreateIndexFailed 重要 业务负载超过实例规格瓶颈,此时再创建索引会耗费更多实例资源,导致响应变慢甚至卡顿,最终超时,引起索引创建失败。 1、根据业务负载,选择匹配的实例规格 2、在业务低峰期创建索引 3、使用后台方式创建索引 4、索引字段,结合业务进行合理选择。 索引创建失败或不完整,导致索引无效,需要删掉索引重新创建。 发生写入降速 NoSQLStallingOccurs 重要 写入速度快,接近集群规模和实例规格范围允许最大写能力,从而触发数据库自身的限流机制,会发生请求失败情况 1. 根据业务的最大写请求速率,调整集群规模或者节点规格 2. 衡量业务的最大写请求速率,分散业务写峰值速率 影响业务的请求的成功率 发生写入停止 NoSQLStoppingOccurs 重要 写入速度过快,达到集群规模和实例规格范围允许最大写能力,从而触发数据库自身的限流机制,会发生请求失败情况 1. 根据业务的最大写请求速率,调整集群规模或者节点规格 2. 衡量业务的最大写请求速率,分散业务写峰值速率 影响业务的请求的成功率 重启数据库失败 NoSQLRestartDBFailed 重要 一般是由于实例状态异常等原因导致。 提交工单让运维处理。 数据库实例状态可能存在异常。 恢复到新实例失败 NoSQLRestoreToNewInstanceFailed 重要 一般是由于底层资源不足等原因导致。 提交工单让运维在后台协调资源,重新尝试添加新节点。 无法恢复到新的数据库实例。 恢复到已有实例失败 NoSQLRestoreToExistInstanceFailed 重要 一般是由于备份文件下载或恢复失败等原因导致。 提交工单让运维处理。 当前数据库实例可能处于不可用状态。 删除备份文件失败 NoSQLDeleteBackupFailed 重要 一般是由于备份文件从obs删除失败导致。 重新尝试删除备份文件。 无 切换慢日志明文开关失败 NoSQLSwitchSlowlogPlainTextFailed 重要 一般是由于接口不支持切换等原因导致。 请查阅NoSQL用户指南,确认接口支持打开慢日志明文开关。提交工单让运维处理。 无 绑定EIP失败 NoSQLBindEipFailed 重要 一般是由于节点状态不正常,节点已经绑定EIP或EIP非法等原因导致。 检查节点是否正常,EIP是否合法。 无法通过公网访问数据库实例。 解绑EIP失败 NoSQLUnbindEipFailed 重要 一般是由于节点状态不正常,节点已经未绑定EIP等原因导致。 检查节点和EIP状态是否正常。 无 修改参数失败 NoSQLModifyParameterFailed 重要 一般是由于参数取值非法等原因导致。 排查参数值是否符合在合法范围内,提交工单让运维处理。 无 参数模板应用失败 NoSQLApplyParameterGroupFailed 重要 一般是由于实例状态异常导致参数模板无法应用等原因导致。 提交工单让运维处理。 无 开启或关闭SSL失败 NoSQLSwitchSSLFailed 重要 一般是由于修改SSL命令超时导致。 重新提交一次或者提交工单处理,并先保持切换之前使用SSL的连接方式。 是否使用SSL连接。 单行数据量太大 LargeRowOccurs 重要 用户单行数据量过大,可能会导致查询超时,进而节点OOM异常等各种故障发生。 1. 对每列和每行的写入长度做限制,遵从规范,使得单行的的key和value长度和不超过阈值。 2. 排查业务是否出现异常写入和异常编码,导致写入大row。 过大的单行记录,随着数据量增长,集群稳定性会下降。 父主题: 事件监控
  • 查询性能测试数据 不同业务模型和实例规格下,查询性能测试数据不同,详情请参见如下表格。 不同业务模型说明请参见表1。 测试实例类型:集群,规格:4U16GB,测试并发数:20,执行100万次,计算平均值 表3 测试数据 测试模型 OPS(单位:queries/sec) 平均时延(单位:ms) 最小时延(单位:ms) 最大时延(单位:ms) high-cpu-all 710.81 28.12 9.35 714.11 single-groupby-1-8-1 1308.56 13.74 2.56 148.96 single-groupby-1-1-1 6393.67 3.10 1.43 45.02 cpu-max-all-1 850.51 23.49 6.16 715.23
  • 支持审计的关键操作列表 通过 云审计 服务,您可以记录与GeminiDB Influx相关的操作事件,便于日后的查询、审计和回溯。 表1 GeminiDB Influx的关键操作列表 操作名称 资源类型 事件名称 创建实例 instance NoSQLCreateInstance 删除实例 instance NoSQLDeleteInstance 扩容节点 instance NoSQLEnlargeInstance 缩容节点 instance NoSQLReduceInstance 重启实例 instance NoSQLRestartInstance 恢复到新实例 instance NoSQLRestoreNewInstance 磁盘扩容 instance NoSQLExtendInstanceVolume 重置密码 instance NoSQLResetPassword 修改实例名称 instance NoSQLRenameInstance 规格变更 instance NoSQLResizeInstance 绑定弹性公网IP instance NoSQLBindEIP 解绑弹性公网IP instance NoSQLUnBindEIP 实例冻结 instance NoSQLFreezeInstance 实例解冻 instance NoSQLUnfreezeInstance 创建备份 backup NoSQLCreateBackup 删除备份 backup NoSQLDeleteBackup 设置备份策略 backup NoSQLSetBackupPolicy 添加实例标签 tag NoSQLAddTags 修改实例标签 tag NoSQLModifyInstanceTag 删除实例标签 tag NoSQLDeleteInstanceTag 创建参数模板 parameterGroup NoSQLCreateConfigurations 修改参数模板 parameterGroup NoSQLUpdateConfigurations 修改实例参数 parameterGroup NoSQLUpdateInstanceConfigurations 复制参数模板 parameterGroup NoSQLCopyConfigurations 重置参数模板 parameterGroup NoSQLResetConfigurations 应用参数模板 parameterGroup NoSQLApplyConfigurations 删除参数模板 parameterGroup NoSQLDeleteConfigurations 删除扩容失败的节点 instance NoSQLDeleteEnlargeFailNode 切换SSL instance NoSQLSwitchSSL 修改实例安全组 instance NoSQLModifySecurityGroup 实例导出参数模板 instance NoSQLSaveConfigurations 回收站策略 instance NoSQLModifyRecyclePolicy 父主题: 审计
  • 性能测试结果 基于上述样本,预先注入1TB+数据并进行压力测试,测试结果如下: 数据压缩率: 写入1.1TB数据(约38亿条),压缩后数据占用约为155GB,数据压缩比约为13.8%; 性能表现: 维持业务总QPS达到约160w,此时读请求总流量约为1.5Gb/s,实例CPU利用率在60%-70%。 平均时延约为0.7ms,P99长尾时延约为1.77ms。 本次测试结果表明,在大规模RTA场景,GeminiDB Redis有稳定的时延性能,同时基于数据压缩和支持计算/存储独立选配的特性,非常适合作为广告业务的KV数据库选型。 父主题: GeminiDB Redis接口广告RTA场景性能数据
  • 修订记录 发布日期 修订记录 2023-08-30 第三十五次正式发布。 新增计费说明。 2023-07-18 第三十四次正式发布。 新增入门实践 2023-06-30 第三十三次正式发布。 新增事件监控。 2023-05-30 第三十二次正式发布。 新增实例会话。 新增命令重命名。 2023-04-28 第三十一次正式发布。 实例规格说明,单节点最小持久化数据存储空间(GB)变更为原来的一半。 GeminiDB Redis支持的监控指标,新增“redis669_connection_usage”和“redis670_hit_rate”两个指标。 2023-03-31 第三十次正式发布。 新增操作系统更新。 2023-03-06 第二十九次正式发布。 账号管理,账号管理支持账号变更(如创建账号、修改账号、删除账号)。 2022-07-07 第二十八次正式发布。 命令兼容列表,新增布隆过滤器使用说明。 2022-06-02 第二十七次正式发布。 购买实例(集群版),规格选择模式新增快速选择模式。 购买实例(集群版),实例类型支持Proxy通用版、实例版本支持5.0及以下。 通过负载均衡地址连接实例(推荐),负载均衡地址展示端口信息。 2022-04-27 第二十六次正式发布。 刷新客户端通过代码连接实例示例。 2022-03-15 第二十五次正式发布。 新增控制台连接GeminiDB Redis。 新增keyspace通知功能。 2022-03-07 第二十四次正式发布。 新增常见问题:GeminiDB Redis是否支持多DB。 购买实例(集群版),修改实例名称,优化中文名称长度。 2022-01-27 第二十三次正式发布。 包周期实例支持规格变更。 支持批量续费、退订、按需计费转包年/包月、包年/包月转按需计费操作。 2022-01-10 第二十二次正式发布。 更新使用规范。 2021-09-27 第二十一次正式发布。 购买实例(集群版)、通过内网IP连接实例、通过弹性公网IP连接实例、设置SSL 数据加密 ,支持公网SSL协议访问加密。 3.3.13.2-慢日志,支持慢日志。 2021-06-30 第二十次正式发布。 修改实例安全组,GeminiDB Redis支持修改安全组。 购买实例(集群版),GeminiDB Redis实例名称支持中文。 2021-06-15 第十九次正式发布。 调整文档结构。 2021-04-30 第十八次正式发布。 实例规格说明,增加不同规格实例支持的最小存储容量。 实例规格说明,存储空间上限从内存的4倍调整成8倍。 2021-04-15 第十七次正式发布。 调整文档结构。 GeminiDB Redis监控指标更新。 GeminiDB Redis购买页面优化。 2021-01-30 第十六次正式发布。 GeminiDB Redis支持绑定解绑弹性公网IP。 GeminiDB Redis购买页面优化。 实例操作列增加规格变更、添加节点和磁盘扩容入口。 2020-12-30 第十五次正式发布。 GeminiDB Redis支持负载均衡地址。 2020-11-30 第十四次正式发布。 GeminiDB Redis增加命令限制列表。 2020-10-30 第十三次正式发布。 资源标签支持20个配额。 扩容磁盘支持每次至少选择1GB扩容量。 GeminiDB Redis支持通过高级运维功能。 GeminiDB Redis支持通过控制台修改密码。 2020-08-30 第十一次正式发布。 GeminiDB Redis支持如下功能: 支持修改实例名称 支持实例回收站 支持包周期计费模式 新增监控指标 2020-06-30 第九次正式发布。 GeminiDB Redis支持跨AZ级容灾。 2020-05-30 第九次正式发布。 GeminiDB Redis支持存储扩容。 GeminiDB Redis支持重启实例。 GeminiDB Redis支持全量备份恢复到新实例。 GeminiDB Redis支持自动备份管理。 GeminiDB Redis支持手动备份管理。 2020-01-20 第五次正式发布。 GeminiDB Redis公测。
  • 使用连接池方式连接实例的Java代码示例 package nosql.cloud.huawei.jedis; import redis.clients.jedis.*; public class MainBitMao { public static void main(String[] args) { // 初始化Jedis资源池配置 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); // 设置资源池中的最大连接数 jedisPoolConfig.setMaxTotal(10); // 设置资源池允许的最大空闲连接数 jedisPoolConfig.setMaxIdle(10); // 设置资源池确保的最少空闲连接数 jedisPoolConfig.setMinIdle(2); // 根据配置初始化Jedis资源池 // note: 若版本不支持user ACL机制, user必须为null JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 8635, null, "********"); // 从资源池里获取连接 try (Jedis jedis = jedisPool.getResource()){ // 初始化key value String key = "test_key", value = "test_value"; // do something... // set存储(key, value)对 jedis.set(key, value); // get获取key对应的value值 jedis.get(key); // do something... } // 关闭资源池 jedisPool.close(); } }
  • Lua脚本中禁止执行的命令 Hash:hscan List:blpop、brpop、brpoplpush Set:sscan Sorted Set:bzpopmax、bzpopmin、zscan Stream:xread、xreadgroup Generic:rename、renamenx、restore、scan、client、command、config、dbsize、flushall、flushdb、info、keys Lua:eval、evalsha、script Pub/Sub:psubscribe、publish、punsubscribe、subscribe、unsubscribe Transactions:discard、exec、multi、unwatch、watch
  • 与开源Redis Lua的区别 EVAL/EVALSHA命令 命令格式: EVAL script numkeys key [key …] arg [arg …] EVALSHA sha1 numkeys key [key …] arg [arg …] 上述命令的语法与操作与开源Redis一致。用户需自己保证将脚本中使用到的Redis key显式的通过key参数传入,而不是直接在脚本中编码。 若使用集群版实例,如果带有多个key参数,则要求所有的key参数必须拥有相同的hash tag。 如果不遵循上述约束,则在Lua中执行涉及这些key的Redis操作时,可能会返回错误信息,甚至可能导致数据的一致性被破坏。 SCRIPT命令 SCRIPT命令包含了一组管理Lua脚本的子命令,具体可以通过SCRIPT HELP命令查询具体的操作。 SCRIPT大部分命令都与开源Redis兼容,其中需要特别说明的命令如下: SCRIPT KILL GeminiDB Redis是多线程执行的环境,允许同时执行多个Lua脚本,执行SCRIPT KILL,会终止所有正在运行的Lua脚本。 为了方便使用,GeminiDB Redis扩展了SCRIPT KILL命令,用户可以通过‘SCRIPT KILL SHA1’来终止指定哈希值的脚本。若同一时间存在多个节点在执行哈希值相同的脚本,那么这些脚本都会被终止。 另外,由于用户无法设置Lua超时时间(config set lua-time-limit),因此在任意时刻执行SCRIPT KILL都能直接终止脚本,而不是等待脚本超时后才终止。 SCRIPT DEBUG 目前GeminiDB Redis不支持DEBUG功能,所以该命令执行无效。 SCRIPT GET GeminiDB Redis新增命令, 可用来查询通过 "SCRIPT LOAD" 保存到数据库中的脚本内容。 语法为:SCRIPT GET SHA1。 Lua脚本中执行Redis命令 与开源Redis一致,GeminiDB Redis的Lua环境中也提供了一个全局的“redis”表,用于提供各类和Redis Server交互的函数。 如表1为GeminiDB Redis目前支持和不支持的操作列表。 表1 函数列表 支持的操作 不支持的操作 redis.call() redis.pcall() redis.sha1hex() redis.error_reply() redis.status_reply() redis.log() redis. LOG _DEBUG redis.LOG_VERBOSE redis.LOG_NOTICE redis.LOG_WARNING redis.replicate_commands() redis.set_repl() redis.REPL_NONE redis.REPL_AOF redis.REPL_SLAVE redis.REPL_REPLICA redis.REPL_ALL redis.breakpoint() redis.debug() Lua执行环境限制 开源Redis对Lua脚本的执行有一定的限制,比如限制脚本操作全局变量,限制随机函数的结果,限定能够使用的系统库和第三方库等。 GeminiDB Redis也继承了绝大多数的限制,但是针对如下情况,GeminiDB Redis与开源Redis存在差异: Write Dirty 开源Redis规定,如果某个脚本已经执行了写操作,那么就不能被SCRIPT KILL停止执行,必须使用SHUTDOWN NOSAVE来直接关闭Redis Server。 GeminiDB Redis不支持执行SHUTDOWN命令,因此这条限制不会被执行,用户仍然可以通过SCRIPT KILL来停止脚本的执行。 Random Dirty 由于主从复制的原因,开源Redis规定,若脚本执行了带有随机性质的命令(Time, randomkey),则不允许再执行写语义的命令。 例如,如下Lua脚本: local t = redis.call("time") return redis.call("set", "time", t[1]); 当该脚本的执行传递到从节点时,Time命令获取到的时间一定晚于主节点,因此从节点执行的Set命令的值就会和主节点产生冲突。开源Redis引入了replicate_commands来允许用户决定这种场景下的行为模式。 对于GeminiDB Redis来说,由于没有主从的概念,数据在逻辑上只有一份,因此也就不存在该限制。
  • DCS资源 资源是服务中存在的对象。在DCS中,资源包括:instance,您可以在创建自定义策略时,通过指定资源路径来选择特定资源。 表1 DCS的指定资源与对应路径 指定资源 资源名称 资源路径 instance 实例 【格式】 DCS:*:*:instance:实例ID 【说明】 对于实例资源,DCS自动生成资源路径前缀DCS:*:*:instance: 通过实例ID指定具体的资源路径,支持通配符*。例如: DCS:*:*:instance:*表示任意DCS实例。
  • 示例流程 图1 给用户授权DCS权限流程 创建用户组并授权 在 IAM 控制台创建用户组,并授予分布式缓存服务的只读权限“DCS ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,验证分布式缓存服务的只读权限。 在“服务列表”中选择分布式缓存服务,进入DCS主界面,单击右上角“购买缓存实例”,尝试购买缓存实例,如果无法购买缓存实例(假设当前权限仅包含DCS ReadOnlyAccess),表示“DCS ReadOnlyAccess”已生效。 在“服务列表”中选择除分布式缓存服务外(假设当前策略仅包含DCS ReadOnlyAccess)的任一服务,若提示权限不足,表示“DCS ReadOnlyAccess”已生效。
  • DCS自定义策略 如果系统预置的DCS权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考细粒度策略支持的授权项。 目前华为云支持以下两种方式创建自定义策略: 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。 JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。 具体创建步骤请参见:创建自定义策略。本章为您介绍常用的DCS自定义策略样例。 由于缓存的存在,对用户、用户组以及企业项目授予OBS相关的细粒度策略后,大概需要等待5分钟细粒度策略才能生效。
  • DCS自定义策略样例 示例1:授权用户删除缓存实例、重启实例及清空实例数据。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ " dcs:instance:delete dcs:instance:modifyStatus " ] } ] } 示例2:拒绝用户删除缓存实例 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先。 如果您给用户授予DCS FullAccess的系统策略,但不希望用户拥有DCS FullAccess中定义的删除缓存实例权限,您可以创建一条拒绝删除缓存实例的自定义策略,然后同时将DCS FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对DCS执行除了删除缓存实例外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "dcs:instance:delete" ] } ] }
  • DCS常用的监控指标 本章节主要列举Redis的常用监控指标。 表1 常用监控指标说明 指标名称 说明 CPU利用率 该指标统计的是每个统计周期(分钟级就是每1分钟,秒级就是每5秒)内的最大值。 如果是单机和主备实例,支持查看实例级别的CPU使用情况。 如果是Proxy集群实例,支持查看数据节点和Proxy节点的CPU使用情况。 如果是Cluster集群,仅支持查看数据节点的CPU使用情况。 内存利用率 该指标统计的是每个统计周期(分钟级就是每1分钟,秒级就是每5秒)内的内存使用情况。 如果是单机和主备实例,支持查看实例级别的内存使用情况。 如果是Proxy集群实例,支持查看实例级别和节点级别的内存使用情况。 如果是Cluster集群,仅支持查看数据节点的内存使用情况。 须知: 内存利用率统计是扣除预留内存的。 活跃的客户端数量 该指标统计的是瞬时的已连接客户端数量,也叫连接并发数。 如果是主备和集群实例,不包括从节点的连接。 活跃的客户端数量上限,可以查看实例规格下对应实例类型的“连接数上限”。 每秒并发操作数 该指标统计的是瞬时的每秒处理的命令数。 每秒并发操作数上限,可以查看实例规格下对应实例类型的“参考性能(QPS)”。 网络瞬时输入流量 该指标用于统计瞬时的输入数据流量。 如果是实例级别的网络瞬时输入流量,所有节点输入数据流量汇总后展示。 如果是节点级别,统计的是本节点的输入数据流量。 网络瞬时输出流量 该指标用于统计瞬时的输出数据流量。 如果是实例级别的网络瞬时输出流量,所有节点输出数据流量汇总后展示。 如果是节点级别,统计的是本节点的输出数据流量。 带宽使用率 该指标计算当前流量带宽与最大带宽限制的百分比。 带宽使用率=(网络瞬时输入流量+网络瞬时输出流量)/(2*最大带宽限制)* 100% 处理的命令数 该指标统计的是周期内处理的命令数,周期默认为1分钟。 和每秒并发操作数主要区别在于监控周期。每秒并发操作数,统计的是周期内的一个瞬时的处理命令数;处理的命令数,统计的是周期内处理的命令数总和。 流控次数 该指标用于统计周期内流量超过该实例规格对应的最大带宽的次数。 实例规格对应的最大带宽,可以查看实例规格下对应实例类型的“基准/最大带宽”。 慢查询 该指标用于统计实例是否存在慢查询。 慢查询产生的原因,请查看慢查询。 父主题: 查看监控指标与配置告警
  • 测试命令 未开启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。
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 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
  • 测试命令 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connection} -d {datasize} -t {command} 参数参考值:-c {connect_number}:1000,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。
  • 测试结果 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 8G X86 1000 107657.69 20 23 27 10000 72750.55 362 366 371 32G X86 1000 121088.83 9 12 12 10000 79235.53 203 204 267 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 8G X86 1000 119350.25 6 24 27 10000 77574.7 152 358 365 32G X86 1000 124650.98 16 17 17 10000 81991.41 195 196 199 Redis 3.0实例暂不支持ARM CPU类型实例,仅提供X86类型的实例测试结果。
  • 测试步骤 创建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客户端。
  • 步骤2:导出RDB文件 建议选择业务量较少的时间段进行迁移。 导出Redis源生集群的数据时,需要针对集群的每个节点分别导出数据,然后逐一导入。 使用如下命令导出RDB文件: redis-cli -h {source_redis_address} -p 6379 -a {password} --rdb {output.rdb} 执行命令后回显"Transfer finished with success.",表示文件导出成功。
  • 测试结果 以下测试结果仅供参考,不同局点环境和网络波动等客观条件可能产生性能差异。 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
  • 测试结果 表1 SET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 64G X86 1000 534960.92 24 34 209 10000 511362.67 108 171 315 表2 GET操作命令测试结果 实例规格 实例CPU类型 并发连接数(个) QPS 99.99%延迟(ms) 第一个100%延迟(ms) 最后一个100%延迟(ms) 64G X86 1000 584669.15 23 31 82 10000 533178.04 144 184 370 Redis 3.0实例暂不支持ARM CPU类型实例,仅提供X86类型的实例测试结果。
  • 测试命令 redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connection} -d {datasize} -t {command} 参数参考值:-c {connect_number}:1000,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。
共100000条