华为云用户手册

  • 2024年6月 序号 功能名称 功能描述 阶段 相关文档 1 Astro大屏应用服务文档首次独立发布 Astro大屏应用(Astro Canvas,简称AstroCanvas)是华为云Astro低代码平台提供的可视化页面构建服务,提供了丰富的可视化组件、灵活的数据接入和多种方式页面构建能力,支持多屏适配,帮助开发者快速构建和发布专业水准的实时可视化应用。 商用 产品介绍 计费说明 快速入门 用户指南 最佳实践 2 新增AstroCanvas企业版实例 购买AstroCanvas实例时,支持购买企业版实例。企业版实例适用于3D场景开发,支持私有化部署。 商用 购买Astro大屏应用实例 3 AstroCanvas支持私有化部署 在AstroCanvas企业版实例中,支持将开发好的页面整个打包下载,并安装部署到您的企业内网中运行。 商用 AstroCanvas私有化部署 4 AstroCanvas预置组件能力增强 AstroCanvas预置组件新增高德地图和3D场景编辑器。 高德地图:高德地图是地图组件的一种,支持底图、样式、2D、3D模式、图标和飞线等动态配置,用于满足用户在GIS或IOC等场景对地图的要求。 3D场景编辑器:在AstroCanvas企业版实例中,为您预置了3D场景编辑器组件,用于实现3D模型的展示和编辑。 商用 高德地图 3D场景编辑器 5 AstroCanvas控制台支持新风格界面 AstroCanvas控制台全新升级,支持新风格界面。 商用 购买Astro大屏应用实例
  • 步骤四:IAM用户登录并验证权限 在登录页面,单击登录下方的“IAM用户”“子用户登录”,在“IAM用户登录”页面,输入“租户名/原华为云账号名”、“IAM用户名/邮件地址”和“密码”。 图10 IAM用户登录 租户名/原华为云账号名:IAM用户所属的账号。 IAM用户名/邮件地址:在IAM创建用户时,输入的IAM用户名/邮件地址,例如“James”。如果不知道用户名及初始密码,请向管理员获取。 IAM用户密码:IAM用户的密码,非账号密码。 单击“登录”,登录华为云。 在“服务列表”中选择云搜索服务。 在云搜索服务总览页面右上角,单击“创建集群”按钮,按照创建集群的步骤创建集群,如果创建成功,则表示权限配置成功。
  • 步骤二:给用户组授权 在用户组列表中,单击新建用户组操作列的“授权”。 在用户组选择策略页面中,在搜索框中搜索“CSS FullAccess”勾选并单击“下一步”。 一般创建集群的权限有“CSS FullAccess”和“Elasticsearch Administrator”,可根据表1的对应的常用操作和系统权限的关系进行对应的配置设置。表2包含了CSS所有的系统权限。 如果还需要查看资源的消费情况,请在同区域选择“BSS Administrator”权限。 表1 常用操作与系统权限的关系 操作 CSS FullAccess CSS ReadOnlyAccess Elasticsearch Administrator 备注 创建集群 √ x √ - 查询集群列表 √ √ √ - 查询集群详情 √ √ √ - 删除集群 √ x √ - 重启集群 √ x √ - 扩容集群 √ x √ - 扩容实例的数量和存储容量 √ x √ - 查询指定集群的标签 √ √ √ - 查询所有标签 √ √ √ - 加载自定义词库 √ x √ 依赖OBS和IAM权限 查询自定义词库状态 √ √ √ - 删除自定义词库 √ x √ - 自动设置集群快照的基础配置 √ x √ 依赖OBS和IAM权限 修改集群快照的基础配置 √ x √ 依赖OBS和IAM权限 设置自动创建快照策略 √ x √ - 查询集群的自动创建快照策略 √ √ √ - 手动创建快照 √ x √ - 查询快照列表 √ √ √ - 恢复快照 √ x √ - 删除快照 √ x √ - 停用快照功能 √ x √ - 更改规格 √ x √ - 缩容集群 √ x √ - 表2 CSS系统权限 系统角色/策略名称 类别 权限描述 依赖关系 Elasticsearch Administrator 系统角色 CSS服务的所有执行权限。 该角色有依赖,需要在同项目中勾选依赖的Tenant Guest和Server Administrator角色。 Tenant Guest:全局级角色,在全局项目中勾选。 Server Administrator:项目级角色,在同项目中勾选。 CSS FullAccess 系统策略 基于策略授权的CSS服务的所有权限,拥有该权限的用户可以完成基于策略授权的CSS服务的所有执行权限。 无 CSS ReadOnlyAccess 系统策略 CSS服务的只读权限,拥有该权限的用户仅能查看CSS服务数据。 无 设置最小授权范围。 此处以仅为“华北-北京四”区域的资源设置权限为例,选择授权范围方案为“指定区域项目资源”,并选择“cn-north-4 [华北-北京四]”区域。 图6 设置最小授权范围 单击“确定”,完成用户组授权。
  • 通过Kibana访问集群 登录云搜索服务管理控制台。 在“集群管理”页面选择需要登录的集群,单击“操作”列中的“Kibana”进入Kibana登录界面。 非安全模式的集群:将直接进入Kibana操作界面。 安全模式的集群:需要在登录页面输入用户名和密码,单击“Log In”进入Kibana操作界面。用户名默认为admin,密码为创建集群时设置的管理员密码。 登录成功后,可在Kibana界面进行相关操作访问集群。
  • 注意事项 建议Rest High Level Client的版本和Elasticsearch的版本保持一致,例如需要访问的ES集群版本是7.6.2,则使用的Rest High Level Client客户端版本建议也是7.6.2。如果您使用相比Elasticsearch集群更高版本的Java Rest High Level Client且存在少量请求的兼容性问题,您可以使用“RestHighLevelClient.getLowLevelClient()”方式直接获取Low Level Client,实现自定义的Elasticsearch请求内容。
  • 步骤一:创建Logstash集群 迁移数据使用Logstash,创建logstash服务需要费用,默认是按需收费,用户迁移完毕数据及时释放Logstash节省费用。 可以基于集群的索引不同创建多个Logstash集群分别配置不同的迁移任务。 登录云搜索服务管理控制台。 在“总览”或者“集群管理”页面,选择“Logstash”,进入Logsash类型集群管理页面。 单击“创建集群”,进入“创建集群”页面。 选择“当前区域”和“可用区”。 指定集群基本信息,选择“集群类型”和“集群版本”,并输入“集群名称”。 表2 基本参数说明 参数 说明 集群类型 选择“Logstash”。 集群版本 当前支持5.6.16、7.10.0。 对应ES集群是5.x, 6.x 选择logstash版本5.6.16, 对应ES版本是7.X 选择logstash版本7.10.0。 集群名称 自定义的集群名称,可输入的字符范围为4~32个字符,只能包含数字、字母、中划线和下划线,且必须以字母开头。 图2 基本信息配置 指定集群的主机规格相关参数。“节点数量”设置为“1”。“节点规格”选择“8U16G”,其余参数保持默认值。 图3 设置主机规格 设置集群的企业项目,保持默认值即可。 单击“下一步,网络配置”,设置集群的网络配置。 表3 参数说明 参数 说明 虚拟私有云 VPC即虚拟私有云,是通过逻辑方式进行网络隔离,提供安全、隔离的网络环境。 选择创建集群需要的VPC,单击“查看虚拟私有云”进入VPC服务查看已创建的VPC名称和ID。如果没有VPC,需要创建一个新的VPC。 说明: 此处您选择的VPC必须包含网段(CIDR),否则集群将无法创建成功。新建的VPC默认包含网段(CIDR)。 子网 通过子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全。 选择创建集群需要的子网,可进入VPC服务查看VPC下已创建的子网名称和ID。 安全组 安全组是一个逻辑上的分组,为同一个VPC内具有相同安全保护需求并相互信任的弹性云服务器提供访问策略。单击“查看安全组”可了解安全组详情。 说明: 请确保安全组的“端口范围/ICMP类型”为“Any”或者包含端口9200的端口范围。 图4 设置网络规格 单击“下一步:高级配置”,高级配置可选择默认配置和自定义。此样例保持默认配置即可。 单击“下一步:确认配置”,确认完成后单击“立即创建”开始创建集群。 单击“返回集群列表”,系统将跳转到“集群管理”页面。您创建的集群将展现在集群列表中,且集群状态为“创建中”,创建成功后集群状态会变为“可用”。
  • 步骤四:全量迁移 使用putty登录准备工作中创建的Linux虚拟机。 执行python migrateTemplate.py 迁移索引模板。 执行 python migrateMapping.py迁移索引。 在Logstash集群管理页面,单击步骤一:创建Logstash集群中创建的集群名称,进入集群的基本信息页面。选择“配置中心”,或者直接单击目标集群操作列的“配置中心”,进入配置中心页面。 选择步骤三:配置Logstash全量迁移任务中所创建的配置文件,单击左上角的“启动”。 根据界面提示,选择是否启动Logstash服务会立刻开始迁移数据。 如果选择“是”,则可以在管道下面看到启动的配置文件。 数据迁移完毕检查数据一致性,使用putty登录linux虚拟机,执行python checkIndices.py 对比数据结果。
  • 准备工作 创建迁移虚拟机。 创建迁移虚拟机,用于迁移源集群的元数据。 创建ECS虚拟机,虚拟机需要创建linux系统,规格选择2U4G。 测试虚拟机和源集群和目标集群保持连通性,执行命令curl http:// {ip}:{port}可以测试结果。 IP是源集群和目的集群访问地址,端口默认是9200,如果不是9200使用集群实际端口。 如下示例仅适用于非安全集群。 curl http://10.234.73.128:9200 { "name" : "voc_es_cluster_new-ess-esn-1-1", "cluster_name" : "voc_es_cluster_new", "cluster_uuid" : "1VbP7-39QNOx_R-llXKKtA", "version" : { "number" : "6.5.4", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "d2ef93d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "Tagline" : "You Know, for Search" }
  • 约束和限制 Logstash版本约束: CSS 支持5.5.1,6.3.2,6.5.4,7.1.1,7.6.2,7.10.2多个版本,迁移集群尽量保持大版本一致。 对应ES集群是5.x, 6.x 选择logstash版本5.6.16, 对应ES版本是7.X 选择logstash版本7.10.0。 集群迁移过程禁止修改索引,修改索引会导致原数据和目标数据内容不一致。 索引大小小于100G可以使用迁移任务不用单独分析索引,简化分析工作。
  • 操作步骤 登录Elasticsearch所在的第三方友商云,创建一个支持s3协议的共享存储仓库,例如登录阿里云的进入OSS服务创建目录patent-esbak, 或者登录腾讯云进入COS服务创建目录patent-esbak。 在自建或第三方友商Elasticsearch中创建快照备份仓库,用于存放ES快照数据。 例如,在Elasticsearch中创建一个“my_backup”的备份仓库,关联到存储仓库OSS。 PUT _snapshot/my_backup { # 存储仓库类型。 "type": "oss", "settings": { # 步骤1中存储仓库的内网访问域名。 "endpoint": "http://oss-xxx.xxx.com", # 存储仓库的用户ID和密码。认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密, 确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ak和sk。 "access_key_id": "ak", "secret_access_key": "sk", # 步骤1创建的存储仓库的bucket名称。 "bucket": "patent-esbak", # 是否打开快照文件的压缩功能。 "compress": false, # 配置此参数可以限制快照数据的分块大小。当上传的快照数据超过这个数值,数据就会被分块上传到存储仓库中。 "chunk_size": "1g", # 仓库的起始位置,默认是根目录。 "base_path": "snapshot/" } } 为自建或第三方友商Elasticsearch创建快照。 为所有索引创建快照 例如,创建一个名为“snapshot_1”的快照。 PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true 为指定索引创建快照 例如,创建一个名为“snapshot_test”的快照,该快照包含索引“patent_analyse”和“patent”。 PUT _snapshot/my_backup/snapshot_test { "indices": "patent_analyse,patent" } 查看集群的快照创建进度。 执行如下命令可以查看所有快照信息: GET _snapshot/my_backup/_all 执行如下命令可以查看指定快照“snapshot_1”的信息: GET _snapshot/my_backup/snapshot_1 将快照数据从存储仓库迁移到对象存储服务OBS中。 对象存储迁移服务(OMS)支持多种云服务商数据迁移到对象存储服务OBS中,具体请参见各云服务商迁移教程。 在OMS创建迁移任务时,“元数据迁移方式”一定要选择“保留元数据”,否则数据迁移会有异常。 在CSS服务的Elasticsearch集群中创建一个存储仓库关联到OBS,用于恢复自建或第三方友商Elasticsearch的快照数据。 例如,在集群中创建一个“my_backup_all”的存储仓库,关联上一步数据迁移目的端的OBS。 PUT _snapshot/my_backup_all/ { "type" : "obs", "settings" : { # OBS的内网访问域名。 "endpoint" : "obs.xxx.xxx.com", "region" : "xxx", # 访问OBS的用户名和密码。认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险, 建议在配置文件或者环境变量中密文存放, 使用时解密, 确保安全;本示例以ak和sk保存在环境变量中为例, 运行本示例前请先在本地环境中设置环境变量ak和sk。 "access_key": "ak", "secret_key": "sk", # OBS的桶名称,和上一步迁移目的端的OBS桶名保持一致。 "bucket" : "esbak", "compress" : "false", "chunk_size" : "1g", # 注意“snapshot”后面没有/。 "base_path" : "snapshot", "max_restore_bytes_per_sec": "100mb", "max_snapshot_bytes_per_sec": "100mb" } } 在CSS服务的Elasticsearch集群中恢复快照数据。 查看所有快照信息。 GET _snapshot 恢复快照。 恢复某一快照的所有索引。例如恢复名为“snapshot_1”的快照的所有索引数据。 POST _snapshot/my_backup_all/snapshot_1/_restore?wait_for_completion=true 恢复某一快照的部分索引。例如名为“snapshot_1”的快照中只恢复非“.”开头的索引。 POST _snapshot/my_backup/snapshot_1/_restore {"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"} 恢复某一快照中的指定索引,并重命名。例如在名为“snapshot_1”的快照中,将索引“index_1”恢复为“restored_index_1”,“index_2”恢复为“restored_index_2”。 POST /_snapshot/my_backup/snapshot_1/_restore { # 只恢复索引“index_1”和“index_2”,忽略快照中的其他索引。 "indices": "index_1,index_2" # 查找正在恢复的索引,该索引名称需要与提供的模板匹配。 "rename_pattern": "index_(.+)", # 重命名查找到的索引。 "rename_replacement": "restored_index_$1" } 查看快照恢复结果。 查看所有快照的恢复结果: GET /_recovery/ 查看指定索引的快照恢复结果: GET {index_name}/_recovery GET {index_name}/_recovery
  • 使用Spring Boot接入HTTPS集群(使用安全证书) 该场景适用于使用安全证书连接安全模式+HTTPS协议的集群。 获取安全证书(CloudSearchService.cer)。 登录云搜索服务控制台。 选择“集群管理”进入集群列表。 单击对应集群的名称,进入集群基本信息页面。 在“基本信息”页面,单击“HTTPS访问”后面的“下载证书”。 图1 下载证书 转换安全证书(CloudSearchService.cer)。将下载的安全证书上传到客户端机器上,使用keytool工具将“.cer”证书转换成Java可以读取的“.jks”证书格式。 在Linux系统中,执行如下命令转换证书。 keytool -import -alias newname -keystore ./truststore.jks -file ./CloudSearchService.cer 在Windows系统中,执行如下命令转换证书。 keytool -import -alias newname -keystore .\truststore.jks -file .\CloudSearchService.cer 其中,newname是由用户自定义的证书名称。 该命令执行后,会提示设置证书密码,并确认密码。请保存该密码,后续接入集群会使用。 application.properties配置文件: 1 2 3 elasticsearch.url=host1:9200,host2:9200 elasticsearch.username=username elasticsearch.password=password 表3 参数说明 参数 描述 host Elasticsearch集群节点的IP地址。 username 访问集群的用户名。 password 用户名对应的密码。 配置代码: com.xxx为项目目录,例如com.company.project。 com.xxx.repository为仓库目录,通过extends org.springframework.data.elasticsearch.repository.ElasticsearchRepository进行具体定义。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 package com.xxx.configuration; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.RestClients; import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.security.KeyStore; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; @Configuration @EnableElasticsearchRepositories(basePackages = "com.xxx.repository") @ComponentScan(basePackages = "com.xxx") public class Config extends AbstractElasticsearchConfiguration { @Value("${elasticsearch.url}") public String elasticsearchUrl; @Value("${elasticsearch.username}") public String elasticsearchUsername; @Value("${elasticsearch.password}") public String elasticsearchPassword; @Override @Bean public RestHighLevelClient elasticsearchClient() { SSLContext sc = null; try { TrustManager[] tm = {new MyX509TrustManager(cerFilePath, cerPassword)}; sc = SSLContext.getInstance("SSL", "SunJSSE"); sc.init(null, tm, new SecureRandom()); } catch (Exception e) { e.printStackTrace(); } final ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo(elasticsearchUrl) .usingSsl(sc, new NullHostNameVerifier()) .withBasicAuth(elasticsearchUsername, elasticsearchPassword) .build(); return RestClients.create(clientConfiguration).rest(); } public static class MyX509TrustManager implements X509TrustManager { X509TrustManager sunJSSEX509TrustManager; MyX509TrustManager(String cerFilePath, String cerPassword) throws Exception { File file = new File(cerFilePath); if (!file.isFile()) { throw new Exception("Wrong Certification Path"); } System.out.println("Loading KeyStore " + file + "..."); InputStream in = new FileInputStream(file); KeyStore ks = KeyStore.getInstance("JKS"); ks.load(in, cerPassword.toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509", "SunJSSE"); tmf.init(ks); TrustManager[] tms = tmf.getTrustManagers(); for (TrustManager tm : tms) { if (tm instanceof X509TrustManager) { sunJSSEX509TrustManager = (X509TrustManager) tm; return; } } throw new Exception("Couldn't initialize"); } @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } public static class NullHostNameVerifier implements HostnameVerifier { @Override public boolean verify(String arg0, SSLSession arg1) { return true; } } } 其中,cerFilePath和cerPassword是生成的.jks证书的存放路径及其密码。
  • 注意事项 建议Elasticsearch Rest High Level Client的版本和Elasticsearch的版本保持一致,例如需要访问的Elasticsearch集群版本是7.10.2,则使用的Elasticsearch Rest High Level Client客户端版本建议也是7.10.2。 本章节以2.5.5版本Spring Boot为例介绍Spring Boot接入集群的方式,对应的spring data elasticsearch版本是4.2.x。
  • 使用Spring Boot接入HTTPS集群(不使用安全证书) 该场景适用于不使用安全证书连接安全模式+HTTPS协议的集群。 配置文件: 1 2 3 elasticsearch.url=host1:9200,host2:9200 elasticsearch.username=username elasticsearch.password=password 表2 参数说明 参数 描述 host Elasticsearch集群节点的IP地址。 username 访问集群的用户名。 password 用户名对应的密码。 配置代码: com.xxx为项目目录,例如com.company.project。 com.xxx.repository为仓库目录,通过extends org.springframework.data.elasticsearch.repository.ElasticsearchRepository进行具体定义。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 package com.xxx.configuration; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.RestClients; import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; @Configuration @EnableElasticsearchRepositories(basePackages = "com.xxx.repository") @ComponentScan(basePackages = "com.xxx") public class Config extends AbstractElasticsearchConfiguration { @Value("${elasticsearch.url}") public String elasticsearchUrl; @Value("${elasticsearch.username}") public String elasticsearchUsername; @Value("${elasticsearch.password}") public String elasticsearchPassword; @Override @Bean public RestHighLevelClient elasticsearchClient() { SSLContext sc = null; try { sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new SecureRandom()); } catch (KeyManagementException | NoSuchAlgorithmException e) { e.printStackTrace(); } final ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo(elasticsearchUrl) .usingSsl(sc, new NullHostNameVerifier()) .withBasicAuth(elasticsearchUsername, elasticsearchPassword) .build(); return RestClients.create(clientConfiguration).rest(); } public static TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return null; } } }; public static class NullHostNameVerifier implements HostnameVerifier { @Override public boolean verify(String arg0, SSLSession arg1) { return true; } } }
  • 通过Spring Boot接入HTTP集群 该场景适用于连接非安全模式的集群或是安全模式+HTTP协议的集群。 配置文件: 1 2 3 4 elasticsearch.url=host1:9200,host2:9200 //非安全集群不用配置如下两行。 elasticsearch.username=username elasticsearch.password=password 表1 参数说明 参数 描述 host Elasticsearch集群节点的IP地址。 username 访问集群的用户名。 password 用户名对应的密码。 配置代码: com.xxx为项目目录,例如com.company.project。 com.xxx.repository为仓库目录,通过extends org.springframework.data.elasticsearch.repository.ElasticsearchRepository进行具体定义。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 package com.xxx.configuration; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.RestClients; import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; @Configuration @EnableElasticsearchRepositories(basePackages = "com.xxx.repository") @ComponentScan(basePackages = "com.xxx") public class Config extends AbstractElasticsearchConfiguration { @Value("${elasticsearch.url}") public String elasticsearchUrl; //非安全集群不用配置如下两个参数。 @Value("${elasticsearch.username}") public String elasticsearchUsername; @Value("${elasticsearch.password}") public String elasticsearchPassword; @Override @Bean public RestHighLevelClient elasticsearchClient() { final ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo(elasticsearchUrl) //非安全集群不用配置“.withBasicAuth”。 .withBasicAuth(elasticsearchUsername, elasticsearchPassword) .build(); return RestClients.create(clientConfiguration).rest(); } }
  • 迁移场景 不同数据来源的集群,迁移方案会有差别,本章主要介以下场景的迁移方案。 源端为Elasticsearch的集群迁移 Elasticsearch集群的数据迁移有多种方式可以选择,例如使用Logstash、CDM、OBS备份与恢复、ESM、跨集群复制插件等进行数据迁移。 Logstash:CSS提供Logstash,可以完成不同数据源和ES数据的迁移,还可以进行数据的清洗和加工。具体操作可以参考使用云服务Logstash全量迁移集群数据。 CDM:华为云服务提供的云迁移工具,实现不同云服务间的集群迁移能力。具体操作可以参考Elasticsearch整库迁移到云搜索服务。 备份与恢复:Elasticsearch提供备份恢复能力,可以把一个集群的数据备份到OBS,在另一个集群恢复数据,完成集群间的数据迁移。CSS Elasticsearch集群之间的数据迁移操作可以参考使用备份与恢复迁移集群数据(源端为CSS Elasticsearch);自建Elasticsearch集群或其他第三方Elasticsearch集群数据迁移到CSS Elasticsearch集群的操作可以参考使用备份与恢复迁移集群数据(源端为第三方Elasticsearch)。 源端为数据库的集群迁移
  • 如何导出Redis实例数据? 除单机实例外,DCS其他类型实例都支持通过管理控制台导出实例数据: 进入DCS管理控制台“缓存管理”页面。 单击需要导出数据的实例名称,进入该实例详情页面。 单击“备份与恢复”,查看该实例的备份记录。 如没有备份记录,执行手动备份后,单击“下载”,根据提示完成数据的下载操作。 如果您的实例创建时间非常早,由于实例版本没有升级而无法兼容备份恢复功能,请联系技术支持将缓存实例升级到最新版本,升级后就可以支持备份恢复功能。 单机实例不支持备份功能,用户可以通过Redis-cli客户端导出rdb文件,但是使用Redis-cli导出rdb文件依赖SYNC命令。 放通了SYNC命令的单机实例(例如Redis 3.0单机实例,未禁用SYNC命令),可以通过执行以下命令,将单机实例上的数据导出: redis-cli -h {source_redis_address} -p 6379 [-a password] --rdb {output.rdb} 禁用了SYNC命令的单机实例(例如Redis 4.0/5.0/6.0单机实例,禁用了SYNC命令),建议将单机实例的数据迁移到主备实例,然后使用主备实例的控制台备份恢复功能。 父主题: 数据备份/导出/迁移
  • 实例无法删除是什么原因? 可能原因如下: 实例资源为包周期实例。 包周期的实例不支持删除操作,界面没有“删除”按钮,用户需要执行“退订”操作,退订实例资源。 实例状态不是“运行中”。 只有当实例处于“运行中”状态,才能执行删除操作。 确认实例是否为创建失败的实例。 单击缓存实例列表上方“创建失败的实例”后的图标或者数量,如果是创建失败的实例,会显示在弹出的“创建失败的实例”窗口中,请从该界面中进行删除。 父主题: Redis使用
  • 是否存在Redis的持久化重写操作 除单机及单副本Cluster集群实例外,华为云其他Redis实例默认开启AOF数据落盘,实例开启了AOF持久化功能后,会定期进行AofRewrite的磁盘整理,AOF磁盘持久化整理一般在以下2种场景执行: 数据量写入不大,AOF文件不大时,固定在每天的凌晨1-4点进行AOF持久化重写。所以容易出现这个时间点实例CPU使用率超高的现象。 数据量写入过大,AOF文件大小超过阈值(缓存实例容量的3-5倍)时,不论当前的所处的时间,会自动触发后台AOF持久化重写。 Redis的持久化重写操作(Bgsave或Bgrewriteaof)比较消耗CPU资源(请参考为什么使用Fork执行Bgsave和Bgrewriteaof),Bgsave和Bgrewriteaof会调用系统的Fork机制,造成CPU短暂时间冲高。 如果客户没有需要用到持久化功能,建议将该功能关闭(请根据实际业务慎重操作,关闭持久化功能会导致极端故障场景下恢复时,由于没有落盘造成的数据丢失)。关闭操作:在实例详情页面,选择“配置参数”页签,将“appendonly”修改为“no”。
  • 查找并禁用高消耗命令 使用了keys等消耗资源的命令,高消耗资源的命令即时间复杂度为O(N)或更高的命令,通常情况下,命令时间复杂度越高,在执行时消耗的资源越高,这会导致CPU使用率超高,容易触发主备倒换。关于各命令对应的时间复杂度信息请参见Redis官网。例如,使用了keys等消耗资源的命令,导致CPU超高,建议客户改成scan命令或者禁用keys命令。 通过性能监控功能,确认CPU使用率高的具体时间段。 通过下述方法,找出高消耗的命令。 慢查询功能会记录执行超过指定时间阈值的命令,通过分析慢查询的语句和执行时长可帮助您找出高消耗命令,具体操参见慢查询。 通过实例诊断功能,选择CPU冲高的时间点进行诊断后,可以看到报告中的对应时间段命令的执行情况以及CPU耗时百分比,具体操作参见实例诊断。 处理措施。 评估并禁用高风险命令和高消耗命令,例如FLUSHALL、KEYS、HGETALL等。 优化业务,例如避免频繁执行数据排序操作。 可选:根据业务情况,选择下述方法对实例进行调整: 调整实例为读写分离实例,对高消耗命令或应用进行分流。 扩容实例增强实例处理能力。
  • 不同编程语言如何使用Cluster集群客户端 当前DCS Cluster集群对比Proxy集群的优势和特性: 表1 Cluster集群与Proxy集群差异 对比项 Cluster集群 Proxy集群 原生兼容性 高 中 客户端兼容性 中(需要客户端开启集群模式) 高 性价比 高 中 时延 低时延 中等时延 读写分离 原生支持(客户端SDK配置) Proxy实现 性能 高 中 Cluster集群由于没有代理层,在时延和性能方面具备一定的优势;但是对于客户端使用方面,由于Cluster集群使用开源的Redis Cluster协议,在客户端的兼容性方面略差于Proxy集群。 推荐的Cluster集群客户端: 表2 Cluster集群客户端 客户端语言 客户端类型 Cluster集群参考文档 Java Jedis https://github.com/xetorthio/jedis#jedis-cluster Java Lettuce https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster PHP php redis https://github.com/phpredis/phpredis#readme Go Go Redis Cluster集群:https://pkg.go.dev/github.com/go-redis/redis/v8#NewClusterClient Proxy集群或单机主备:https://pkg.go.dev/github.com/go-redis/redis/v8#NewClient Python redis-py-cluster https://github.com/Grokzen/redis-py-cluster#usage-example C hiredis-vip https://github.com/vipshop/hiredis-vip?_ga=2.64990636.268662337.1603553558-977760105.1588733325 C++ redis-plus-plus https://github.com/sewenew/redis-plus-plus?_ga=2.64990636.268662337.1603553558-977760105.1588733325#redis-cluster Node.js node-redis io-redis https://github.com/NodeRedis/node-redis https://github.com/luin/ioredis 官方推荐的开源客户端列表:https://redis.io/clients。 父主题: Redis使用
  • Lazy free机制 解决的痛点/问题 Redis是单线程程序,当运行一个耗时较大的请求时,会导致所有请求排队等待,在请求处理完成前,Redis不能响应其他请求,因此容易引发性能问题。而Redis删除大的集合键时,就属于一种比较耗时的请求。 原理 Redis 4.0提供的一种惰性删除或者说延迟释放机制,主要用于解决删除大key对Redis进程的阻塞,从而避免带来性能与可用性问题。 删除key时,Redis异步延时释放key的内存,把key释放操作放在bio(Background I/O)单独的子线程处理中。 使用方法 主动删除 unlink unlink与del命令目的一样,删除某个key。unlink在删除集合类键时,如果集合键的元素个数大于64个,会把内存释放操作,给单独的bio(Background I/O)线程来执行。因此unlink删除操作能在非常短的时间内完成包含上百万个元素的大key删除。 flushall/flushdb 通过对flushall/flushdb添加ASYNC异步清理选项,Redis在清理整个实例或单个DB时,操作都是异步的。 过期key删除、大key驱逐删除 被动删除有四种场景,每种场景对应一个配置参数,默认都是关闭: lazyfree-lazy-eviction no //针对redis内存使用达到maxmeory,并设置有淘汰策略时,是否采用lazy free机制 lazyfree-lazy-expire no //针对设置有TTL的键,过期后,被redis清理删除时是否采用lazy free机制 lazyfree-lazy-server-del no //针对有些指令在处理已存在的键时,会带有一个隐式的DEL键的操作 slave-lazy-flush no //针对slave进行全量数据同步,slave在加载master的RDB文件前,会运行flushall来清理自己的数据场景
  • 开启/关闭AOF持久化的影响 开启AOF持久化后,由于Redis-Server进程需要在AOF文件中记录对应的操作信息,用来进行数据持久化。开启持久化可能存在的影响: 当出现底层计算节点磁盘硬件故障或者IO故障时,可能会造成时延冲高或者主备倒换等情况发生。 Redis-Server进程会定期进行AOF重写操作,重写期间可能会造成短暂的时延冲高,AOF重写规则请参考AOF文件在什么情况下会被重写?。 如果在缓存场景下使用DCS实例进行应用加速,建议可以关闭持久化参数以获得更高的性能和稳定性。 关闭持久化需根据实际业务慎重操作,关闭持久化后在极端故障场景(例如主备节点同时故障等)下可能出现缓存数据丢失的问题。 关闭操作:在实例详情的配置参数中将appendonly参数修改为no即可关闭AOF持久化。
  • Redis实例支持的持久化方式 Redis实例默认仅支持AOF的方式进行持久化,同时支持客户自行开关数据持久化配置。创建的实例(单机或单副本集群除外)默认开启AOF持久化。 Redis实例默认不支持RDB持久化,因此也无法支持客户自行配置save参数。如果需要进行RDB持久化,可以使用主备或者集群实例的备份恢复功能,备份恢复时,Redis 4.0及以上版本实例,可以支持选择生成RDB持久化文件并且自动转储到OBS中。
  • Redis实例是否支持开启主节点不持久化,仅从节点持久化 DCS Redis 4.0/5.0/6.0基础版的主备和集群实例、企业版高性能型主备实例,可以通过将实例参数appendonly设置为only-replica,开启实例仅从节点持久化。 其他版本和实例类型暂不支持该特性。 appendonly参数默认只有yes和no两个选项,如需设置为only-replica,需要联系运维人员放通该参数的白名单。 仅从节点持久化相对与主从节点同时持久化,因主节点减少了AOF写入和重写的影响,性能会有所提升,但可靠性会有所降低,请根据实际业务情况选择。
  • 是否支持控制台导出RDB格式的Redis备份文件? Redis 3.0实例 Redis 3.0是通过AOF文件持久化的,控制台仅支持备份和下载AOF格式的备份文件。如果需要RDB格式的备份文件可以通过Redis-cli导出: redis-cli -h {redis_address} -p 6379 [-a password] --rdb {output.rdb} Redis 4.0及以上基础版实例 Redis 4.0及以上基础版实例支持在控制台备份和下载AOF或RDB格式的备份文件。 Redis 6.0企业版实例 企业版高性能型实例支持备份和下载AOF或RDB格式的备份文件。 企业版存储型实例仅支持备份和下载RDB格式的备份文件。 父主题: 数据备份/导出/迁移
  • 建立企业IdP对华为云的信任关系 在企业IdP中配置华为云的元数据文件,以建立企业IdP对华为云的信任。常用企业IdP,如Microsoft Active Directory(AD FS)和Shibboleth的配置步骤,请参见:与华为云集成第三方IdP解决方案提供商示例。 下载华为云系统的元数据文件(metadata文件)。 访问网址:https://auth.huaweicloud.com/authui/saml/metadata.xml。下载华为云元数据文件,并设置文件名称,例如“SP-metadata.xml”。 将上述文件上传到企业IdP服务器上。上传方法请参见企业IdP的帮助文档。 获取企业IdP的元数据文件。获取方法请参见企业IdP的帮助文档。
  • 后续任务 配置企业IdP:在企业IdP系统中配置单点登录相关参数,决定向华为云提供哪些用户信息。 配置身份转换规则:在“身份转换规则”区域,配置身份转换规则,建立企业管理系统用户与IAM用户组间的映射关系,使得企业管理系统用户登录华为云后,获得对应的华为云操作权限。身份转换规则详情请参见:步骤3:配置身份转换规则。 登录验证:在企业管理系统中配置单点登录,使企业用户可以通过企业管理系统中的华为云登录入口直接访问华为云,方法请参考:步骤4:登录验证。
  • 在华为云上创建身份提供商 在IAM控制台上创建身份提供商,配置身份提供商的元数据文件后,可以在IAM中建立对企业IdP的信任关系,使得企业用户可以直接访问华为云。 进入IAM控制台,在左侧导航窗格中,选择“身份提供商”页签,单击右上方的“创建身份提供商”。 图1 创建身份提供商 在“创建身份提供商”窗口中设置名称、协议、类型、状态、描述。 图2 填写身份提供商参数 表1 身份提供商基本参数 参数 含义 名称 身份提供商的名称。身份提供商名称在全局范围内不能重复,建议以域名唯一标识命名。 协议 身份提供商协议。当前华为云支持基于SAML、OIDC的身份提供商,如需创建基于OIDC协议的联邦身份认证,请参考基于OIDC协议的虚拟用户SSO。 类型 身份提供商类型。一个账号下只能存在一种类型的身份提供商。本章介绍虚拟用户SSO,此处选择虚拟用户SSO。 虚拟用户SSO:该身份提供商中的用户登录华为云后,系统为其自动创建虚拟用户信息。一个账号可以创建多个虚拟用户SSO类型的身份提供商。 状态 身份提供商的状态。默认设置为“启用”。 单击“确定”,创建身份提供商成功。
  • 相关操作 查看身份提供商信息:在身份提供商列表中,单击“查看”,可查看身份提供商的基本信息、元数据详情、身份转换规则。 单击“查看身份提供商”页面下方的“修改身份提供商”,可直接进入“修改身份提供商”界面。 修改身份提供商信息:在身份提供商列表中,单击“修改”进入“修改身份提供商”界面。可修改身份提供商的状态(“启用”或“停用”)、描述信息、元数据信息和身份转换规则。 删除身份提供商:在身份提供商列表中,单击“删除”,删除对应的身份提供商。
  • 操作步骤 管理员登录IAM控制台。 在用户组列表中,单击新建用户组右侧的“授权”。 在授权页面进行授权时,管理员在权限列表的搜索框中搜索需要的角色。 选择角色,系统将自动勾选依赖角色。 图1 选择角色 单击勾选权限下方的,查看角色的依赖关系。 图2 查看角色的依赖关系 例如“DNS Administrator”,角色内容中存在“Depends”字段,表示存在依赖关系。给用户组授予“DNS Administrator”角色时,还需要在同项目同时授予“Tenant Guest”和“VPC Administrator”角色,“DNS Administrator”才能生效。 单击“确定”,完成依赖角色的授权。
共100000条