云服务器内容精选
-
集群创建失败 如果集群创建失败后,失败任务会自动转入“失败任务管理”页面。选择“现有集群”,单击图4中进入“失败任务管理”页面,在“任务状态”列中,将鼠标移动到上可以查看到失败原因,如图5所示。可以参见查看失败的集群操作任务章节删除失败任务。 图4 失败任务管理 图5 失败原因 MRS 集群创建失败错误码列表如表6所示。 表6 错误码 错误码 说明 MRS.101 用户请求配额不足,请联系客服提升配额。 MRS.102 用户Token为空或不合法,请稍后重试或联系客服。 MRS.103 用户请求不合法,请稍后重试或联系客服。 MRS.104 用户资源不足,请稍后重试或联系客服。 MRS.105 现子网IP不足,请稍后重试或联系客服。 MRS.201 因E CS 服务导致失败,请稍后重试或联系客服。 MRS.202 因 IAM 服务导致失败,请稍后重试或联系客服。 MRS.203 因VPC服务导致失败,请稍后重试或联系客服。 MRS.400 MRS内部出错,请稍后重试或联系客服。
-
软件配置 表1 MRS集群软件配置 参数 参数说明 区域 选择区域。 不同区域的云服务产品之间内网互不相通。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。 计费模式 MRS提供两种计费模式: 包年/包月 按需计费 选择“按需计费”时,可能需要冻结一定的保证金。详细内容,请参见计费说明。 购买时长 包年/包月模式下该参数有效,表示购买集群的时长。最短时长为1个月,最长时长为1年。 如需开通自动续费功能,请勾选“自动续费”,开通后按月购买的集群自动续费周期为1个月,按年购买的集群自动续费周期为1年。 集群名称 集群名称不允许重复。 只能由字母、数字、中划线和下划线组成,并且长度为1~64个字符。 默认名称为mrs_xxxx,xxxx为字母和数字的四位随机组合数,系统自动组合。 集群类型 提供几种集群类型: 分析集群:用来做离线数据分析,提供的是Hadoop体系的组件。 流式集群:用来做流处理任务,提供的是流式处理组件。 混合集群:既可以用来做离线数据分析,也可以用来做流处理任务,提供的是Hadoop体系的组件和流式处理组件。建议同时需要做离线数据分析和流处理任务时使用混合集群。 自定义:用户可按照业务需求调整集群服务的部署方式,具体请参见购买自定义拓扑集群。(目前仅MRS 3.x版本支持) 说明: MRS流式集群不支持“作业管理”和“文件管理”功能。 如需在集群中安装全部组件,请选择“自定义”类型集群。 版本类型 提供以下版本类型: 普通版: 支持集群基础操作,如配置、管理和运维。 支持Presto、Impala、Kudu、Sqoop等组件。 LTS版: 除支持集群基础操作外,还提供版本升级能力。 支持多可用区部署。 支持HetuEngine、IoTDB、CDL组件。 默认版本类型为普通版。 集群版本 MRS目前支持MRS 1.9.2、MRS 3.1.0、MRS 3.1.2-LTS.3、MRS 3.1.5、MRS 3.2.0-LTS.1、MRS 3.3.0-LTS.1版本。默认值为当前最新版本。 组件选择 MRS集群配套的组件,MRS不同版本集群支持的组件版本请参见MRS组件版本一览表。 元数据 是否使用外部数据源存储元数据。 本地元数据: 元数据存储在集群本地。 外置数据连接:使用外部数据源元数据,若集群异常或删除时将不影响元数据,适用于存储计算分离的场景。 支持Hive或Ranger组件的集群支持该功能。 组件名 当“元数据”选择“外置数据连接”时该参数有效。用于表示可以设置外部数据源的组件类型。 Hive Ranger 数据连接类型 当“元数据”选择“外置数据连接”时该参数有效。用于表示外部数据源的类型。创建集群时“数据连接类型”仅支持“本地数据库”。 组件端口(目前仅LTS版本支持) 当前MRS集群内各组件默认通讯端口值的策略。 开源:组件的默认通讯端口遵循开源社区的规范不做修改,与开源社区保持一致。 定制:组件的默认通讯端口与开源社区不一致。 开源默认端口与定制默认端口区别请参考开源组件Web站点。
-
操作步骤 进入购买MRS集群页面。 在购买集群页面,选择“自定义购买”页签。 创建集群时需要注意配额提醒。当资源配额不足时,建议按照提示申请足够的资源,再创建集群。 参考软件配置配置集群信息后,单击“下一步”。 图1 软件配置 部分区域仅支持一种计费方式,请以控制台实际方式为准。 参考硬件配置配置集群信息后,单击“下一步”。 图2 硬件配置 当前MRS集群如需规划Task节点组进行弹性伸缩,在配置集群节点信息过程中,可参考以下步骤进行操作: 添加分析Task节点组: 对于集群类型为“分析集群”或“混合集群”的集群: 系统会自动添加分析Task节点组“task_node_analysis_group”,请根据实际需求设置节点数量、实例规格及节点磁盘配置。 若不需要该分析Task节点组,可手动删除。 对于集群类型为“自定义”的集群: 在集群节点配置区域,单击“添加节点组”,手动添加一个新的节点组。 配置“拓扑调整”参数为“开启”。 手动选择角色拓扑,使该节点组只包含NodeManager角色(NM)即可。 也可以在集群创建完成后,通过手动添加节点组的方式添加Task节点组,可参考添加Task节点。 添加流式Task节点组(仅MRS 1.9.2支持): 对于集群类型为“流式集群”、“混合集群”的集群: 系统会自动添加流式Task节点组“task_node_streaming_group”,请根据实际需求设置节点数量、实例规格及节点磁盘配置。 若不需要该流式Task节点组,可手动删除。 参考高级配置配置集群信息后,单击“下一步”。 图3 高级配置 在“确认配置”页面检查配置集群信息,如需调整配置,可单击,跳转到对应页签后重新设置参数。 勾选通信安全授权,通信安全授权详情请参考授权安全通信。 单击“立即购买”。 当集群开启Kerberos认证时,需要确认是否需要开启Kerberos认证,若确认开启请单击“继续”,若无需开启Kerberos认证请单击“返回”关闭Kerberos认证后再创建集群。购买集群后,不支持修改。 如果您对价格有疑问,可以单击页面左下角“了解计费详情”,根据计费详情来了解产品价格。 若您选择“按需计费”时,可能因为冻结保证金失败或者账号可能存在风险导致下单失败,请联系技术支持处理。 单击“返回集群列表”,可以查看到集群创建的状态。 集群创建的状态过程请参见表1中的“状态”参数说明。 集群创建需要时间,所创集群的初始状态为“启动中”,创建成功后状态更新为“运行中”,请您耐心等待。 MRS系统界面支持同一时间并发创建10个集群,且最多支持管理100个集群。
-
使用约束 尽管容灾提供了实时的数据复制功能,但实际的数据同步进展,由多方面的因素决定的,例如,当前主集群业务的繁忙程度,备集群进程的健康状态等。因此,在正常情形下,备集群不应该接管业务。极端情形下是否可以接管业务,可由系统维护人员以及决策人员根据当前的数据同步指标来决定。 容灾功能当前仅支持一主一备。 通常情况下,不允许对备集群的灾备表进行表级别的操作,例如修改表属性、删除表等,一旦误操作备集群后会造成主集群数据同步失败、备集群对应表的数据丢失。 主集群的HBase表已启用容灾功能同步数据,用户每次修改表的结构时,需要手动修改备集群的灾备表结构,保持与主集群表结构一致。
-
前提条件 主备集群都已经安装并启动成功,且获取集群的管理员权限。 必须保证主备集群间的网络畅通和端口的使用。 如果主集群部署为安全模式且不由一个 FusionInsight Manager管理,主备集群必须已配置跨集群互信。如果主集群部署为普通模式,不需要配置跨集群互信。 主备集群必须已配置跨集群拷贝。 主备集群上的时间必须一致,而且主备集群上的NTP服务必须使用同一个时间源。 必须在主备集群的所有节点的hosts文件中,配置主备集群所有机器的机器名与业务IP地址的对应关系。 如果主集群的客户端安装在集群外的节点上,也需在该节点的hosts文件中配置主备集群所有机器的机器名与业务IP地址的对应关系。 主备集群间的网络带宽需要根据业务流量而定,不应少于最大的可能业务流量。 主备集群安装的MRS版本需要保持一致。 备集群规模不小于主集群规模。
-
操作步骤 进入快速购买文档数据库DDS页面。 在“购买数据库实例”页面,选择计费模式,填写并选择实例相关信息后,单击“立即购买”。 图1 基础配置 表1 基础配置 参数 描述 计费模式 选择“包年/包月”或“按需计费”。 包年/包月 用户选购完服务配置后,可以根据需要设置购买时长,系统会一次性按照购买价格对账户余额进行扣费。 创建成功后,如果包周期实例到期后不再长期使用资源,可将“包年/包月”实例转为“按需计费”,到期后将转为按需计费实例。具体请参见包周期实例转按需计费。 说明: “包年/包月”方式购买的实例不能直接删除,仅支持资源退订操作,如何退订资源请参见退订包周期实例。 按需计费 用户选购完服务配置后,无需设置购买时长,系统会根据消费时长对账户余额进行扣费。 创建成功后,如果需要长期使用资源,可将“按需计费”实例转为“包年/包月”,继续使用这些资源的同时,享受包周期的低资费。具体请参见按需计费实例转包周期。 区域 资源所在的区域。 说明: 不同区域的内网不互通,且购买后不能更换,请谨慎选择。 项目 当前区域对应的项目,可进行切换。 可用区 可用区是指在同一区域下,电力、网络隔离的物理区域,可用区内部网络互通,不同可用区之间物理隔离。 目前支持将实例部署在单可用区或3可用区。 说明: 目前3可用区的功能只针对部分区域开放,如果您在当前区域的管理控制台上没有看到3可用区,请切换至其他支持3可用区的区域进行购买。 如果业务要求实例之间的网络延时较低,则建议您选择单可用区,将实例的组件部署在同一个可用区内。实例选择单可用区部署时,会默认配置为反亲和部署。反亲和部署是出于高可用性考虑,将您的Primary、Secondary和Hidden节点分别创建在不同的物理机上。 如果业务需要较高的容灾能力,建议您选择3可用区。此时,实例下的dds mongos节点、shard节点和config节点分别部署在3个不同的可用区内。 实例类型 选择“集群”。 集群类型的实例包含dds mongos、shard和config节点。其中,shard和config节点均采用三节点副本集架构,保证高可用。 兼容MongoDB版本 4.4 4.2 4.0 3.4 CPU类型 当前文档数据库实例的CPU架构支持x86和鲲鹏两种类型。 说明: MongoDB4.0、3.4版本可选,其他版本无需选择,默认X86。 x86 x86类型的CPU架构采用复杂指令集(CISC),CISC指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。由于指令执行较为复杂所以每条指令花费的时间较长。 鲲鹏 鲲鹏类型的CPU架构采用RISC精简指令集(RISC),RISC是一种执行较少类型计算机指令的微处理器,它能够以更快的速度执行操作,使计算机的结构更加简单合理地提高运行速度,相对于X86类型的CPU架构具有更加均衡的性能功耗比。 鲲鹏类型CPU架构的优势是高密度低功耗,可以提供更高的性价比,满足重载业务场景使用。 规格类型 x86 CPU架构下,针对不同的应用场景,可以选择不同的规格类型。 通用型(s6)。通用型的规格实例,适合平时不会持续高压力使用CPU,但偶尔需要提高计算性能完成工作负载的场景,包括但不限于:轻量级的Web服务器、开发、测试环境以及中低性能数据库等。 增强Ⅱ型(c6)。多项技术优化,计算性能强劲稳定,配套25GE(千兆以太网)智能高速网卡,提供超高网络带宽和PPS收发包能力。是高负载场景首选,对于计算与网络有更高性能要求的网站和Web应用、通用数据库及缓存服务器,中重载企业应用等更加适用。 支持的实例规格请参见集群实例规格。 dds mongos性能规格 dds mongos节点的CPU和内存,请参见集群实例规格。创建成功后,可进行规格变更,请参见变更集群实例的CPU和内存规格。 dds mongos数量 数量可选范围为2~32,创建成功后,可进行节点扩容,请参见添加集群实例的节点。 shard性能规格 shard节点的CPU和内存,请参见集群实例规格。shard存储用户的数据,用户不能直接连接shard。创建成功后,可进行规格变更,请参见变更集群实例的CPU和内存规格。 shard存储空间 存储空间最小10GB,最大2000GB,用户选择大小必须为10的整数倍。创建成功后可进行扩容,请参见扩容集群实例的磁盘空间。 说明: 用户购买的存储空间超过600GB,当剩余的可用存储空间为18GB时,实例状态将被设置为只读。 用户购买的存储空间小于等于600GB,当实际使用量到总存储空间的97%时,实例状态将被设置为只读。 此时建议您清理多余的资源或进行扩容。 shard数量 数量可选范围为2~32,创建成功后,可进行节点扩容,请参见添加集群实例的节点。 config性能规格 config节点的CPU和内存,请参见集群实例规格,存储实例的配置信息,用户不能直接连接。创建成功后,可进行规格变更,请参见变更集群实例的CPU和内存规格。 config存储空间 根据config节点的作用和最小需要,存储空间为20GB,创建成功后不可进行扩容。 图2 网络设置及购买时长与数量 表2 网络设置 参数 描述 虚拟私有云 文档数据库实例所在的 虚拟专用网络 ,可对不同业务进行网络隔离,方便地管理、配置内部网络,进行安全、快捷的网络变更。您需要创建或选择所需的虚拟私有云。如何创建虚拟私有云,请参见《虚拟私有云用户指南》中的创建虚拟私有云和子网。所需虚拟私有云的使用限制请参见实例连接方式介绍。 如果不创建或没有可选的虚拟私有云,文档数据库服务默认为您分配资源。 说明: 实例创建完成后不支持切换虚拟私有云,请谨慎选择所属虚拟私有云。 企业项目 该参数针对企业用户使用,如需使用该功能,请联系客服申请开通。 企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。 请在下拉框中选择所在的企业项目,其中,default为默认项目。更多企业项目相关的信息,请参见《企业管理用户指南》的项目管理。 如果需要自定义企业项目,请在控制台右上角单击“企业”,进入“企业项目”页面创建,具体请参见《企业管理用户指南》中“创建企业项目”的内容。 表3 购买时长与数量 参数 描述 购买时长 选择“包年/包月”方式的用户需要设置购买时长,最短为1个月,最长为3年。 自动续费 默认不勾选,不进行自动续费。 勾选后实例自动续费,自动续费周期与原订单周期一致。 购买数量 购买数量与集群实例配额有关,所需购买数量超出实例配额时,可根据界面提示申请扩大配额。批量购买的“包年/包月”实例,除实例名称和实例ID外,其余配置信息一致。 在“规格确认”页面,核对实例信息。 包年/包月 如果需要修改,单击“上一步”,修改实例信息。 核对无误后,单击“去支付”,进入“付款”页面,选择支付方式,完成支付。 按需计费 如果需要修改,单击“上一步”,修改实例信息。 核对无误后,单击“提交”,开始创建实例。 单击“返回实例列表”。实例创建成功后,用户可以在“实例管理”页面,查看并管理自己的数据库实例。 创建实例过程中,实例运行状态显示为“创建中”,此过程约15分钟。创建完成的实例的运行状态显示为“正常”。 创建实例时,默认开启自动备份策略,后期可修改。创建成功后,文档数据库服务会自动创建一个全量备份。
-
使用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 92 93 94 95 96 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(StringHostParse(elasticsearchUrl)) .usingSsl(sc, new NullHostNameVerifier()) .withBasicAuth(elasticsearchUsername, elasticsearchPassword) .build(); return RestClients.create(clientConfiguration).rest(); } private String[] StringHostParse(String hostAndPorts) { return hostAndPorts.split(","); } 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证书的存放路径及其密码。
-
通过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 40 41 42 43 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(StringHostParse(elasticsearchUrl)) //非安全集群无需配置withBasicAuth。 .withBasicAuth(elasticsearchUsername, elasticsearchPassword) .build(); return RestClients.create(clientConfiguration).rest(); } private String[] StringHostParse(String hostAndPorts) { return hostAndPorts.split(","); } }
-
使用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 69 70 71 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(StringHostParse(elasticsearchUrl)) .usingSsl(sc, new NullHostNameVerifier()) .withBasicAuth(elasticsearchUsername, elasticsearchPassword) .build(); return RestClients.create(clientConfiguration).rest(); } private String[] StringHostParse(String hostAndPorts) { return hostAndPorts.split(","); } 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; } } }
-
注意事项 建议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。
-
迁移指导 通过 数据复制服务 (DRS)可以实现 GaussDB for MySQL等关系型数据库之间的数据迁移和同步,支持的数据库类型请参见同步方案概览。 表1为DRS服务所支持的源数据库迁移至 CSS 服务的具体指导。 表1 数据同步指导 源数据库类型 目标数据库类型 同步模式 相关文档 RDS for MySQL CSS/ES 全量+增量数据同步 将MySQL同步到CSS/ES 本地自建MySQL数据库 ECS自建MySQL数据库 CSS/ES 全量+增量数据同步 将MySQL同步到CSS/ES GaussDB(for MySQL) CSS/ES 全量+增量数据同步 将GaussDB(for MySQL)同步到CSS/ES
-
迁移流程 因为Elasticsearch支持全文检索和Ad Hoc查询,所以经常作为关系型数据库(例如GaussDB for MySQL等)的补充,以此提升数据库的全文检索能力和高并发的Ad Hoc查询能力。 对于这种源端是数据库的集群,集群迁移流程如图1所示。 图1 源端为数据库的集群迁移流程 该迁移方案具有割接方便和通用性好的优点。 割接方便:当CSS进入增量同步状态,即可启动业务割接操作。 通用性好:两边均可同步对客户端的ES进行增删改查操作。
-
写入性能优化 基于Elasticsearch的数据写入流程分析,有以下几种性能优化方案。 表1 写入性能优化 序号 优化方案 方案说明 1 使用SSD盘或升级集群配置 使用SSD盘可以大幅提升数据写入与merge操作的速度,对应到CSS服务,建议选择“超高IO型”存储,或者超高IO型主机。 2 采用Bulk API 客户端采用批量数据的写入方式,每次批量写入的数据建议在1~10MB之间。 3 随机生成_id 如果采用指定_id的写入方式,数据写入时会先触发一次查询操作,进而影响数据写入性能。对于不需要通过_id检索数据的场景,建议使用随机生成的_id。 4 设置合适的分片数 分片数建议设置为集群数据节点的倍数,且分片的大小控制在50GB以内。 5 关闭副本 数据写入与查询错峰执行,在数据写入时关闭数据副本,待数据写入完成后再开启副本。 Elasticsearch 7.x版本中关闭副本的命令如下: PUT {index}/_settings { "number_of_replicas": 0 } 6 调整索引的刷新频率 数据批量写入时,可以将索引的刷新频率“refresh_interval”设置为更大的值或者设置为“-1”(表示不刷新),通过减少分片刷新次数提高写入性能。 Elasticsearch 7.x版本中,将更新时间设置为15s的命令如下: PUT {index}/_settings { "refresh_interval": "15s" } 7 优化写入线程数与写入队列大小 为应对突发流量,可以适当地提升写入线程数与写入队列的大小,防止突发流量导致出现错误状态码为429的情况。 Elasticsearch 7.x版本中,可以修改如下自定义参数实现写入优化:thread_pool.write.size,thread_pool.write.queue_size。 8 设置合适的字段类型 指定集群中各字段的类型,防止Elasticsearch默认将字段猜测为keyword和text的组合类型,增加不必要的数据量。其中keyword用于关键词搜索,text用于全文搜索。 对于不需要索引的字段,建议“index”设置为“false”。 Elasticsearch 7.x版本中,将字段“field1”设置为不建构索引的命令如下: PUT {index} { "mappings": { "properties": { "field1":{ "type": "text", "index": false } } } } 9 优化shard均衡策略 Elasticsearch默认采用基于磁盘容量大小的Load balance策略,在多节点场景下,尤其是在新扩容的节点上,可能出现shard在各节点上分配不均的问题。为避免这类问题,可以通过设置索引级别的参数“routing.allocation.total_shards_per_node”控制索引分片在各节点的分布情况。此参数可以在索引模板中配置,也可以修改已有索引的setting生效。 修改已有索引的setting的命令如下: PUT {index}/_settings { "index": { "routing.allocation.total_shards_per_node": 2 } }
-
数据写入流程 图1 数据写入流程 当从客户端往Elasticsearch中写入数据时,写入流程如下: 客户端向Node1发送写数据请求,此时Node1为协调节点。 节点Node1根据数据的_id将数据路由到分片2,此时请求会被转发到Node3,并执行写操作。 当主分片写入成功后,它将请求转发到Node2的副本分片上。当副本写入成功后,Node3将向协调节点报告写入成功,协调节点向客户端报告写入成功。 Elasticsearch中的单个索引由一个或多个分片(shard)组成,每个分片包含多个段(Segment),每一个Segment都是一个倒排索引。 图2 Elasticsearch的索引组成 将文档插入Elasticsearch时,文档首先会被写入缓冲区中,然后在刷新时定期从该缓冲区刷新到Segment中。刷新频率由refresh_interval参数控制,默认每1秒刷新一次。 图3 文档插入Elasticsearch的流程
-
如何选择区域? 选择区域时,您需要考虑以下几个因素: 地理位置 一般情况下,建议就近选择靠近您或者您的目标用户的区域,这样可以减少网络时延,提高访问速度。 在除中国大陆以外的亚太地区有业务的用户,可以选择“中国-香港”、“亚太-曼谷”或“亚太-新加坡”区域。 在非洲地区有业务的用户,可以选择“非洲-约翰内斯堡”区域。 在拉丁美洲地区有业务的用户,可以选择“拉美-圣地亚哥”区域。 “拉美-圣地亚哥”区域位于智利。 资源的价格 不同区域的资源价格可能有差异,请参见华为云服务价格详情。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格