云服务器内容精选

  • 步骤四: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请求内容。
  • 步骤四:全量迁移 使用putty登录准备工作中创建的Linux虚拟机。 执行python migrateTemplate.py 迁移索引模板。 执行 python migrateMapping.py迁移索引。 在Logstash集群管理页面,单击步骤一:创建Logstash集群中创建的集群名称,进入集群的基本信息页面。选择“配置中心”,或者直接单击目标集群操作列的“配置中心”,进入配置中心页面。 选择步骤三:配置Logstash全量迁移任务中所创建的配置文件,单击左上角的“启动”。 根据界面提示,选择是否启动Logstash服务会立刻开始迁移数据。 如果选择“是”,则可以在管道下面看到启动的配置文件。 数据迁移完毕检查数据一致性,使用putty登录linux虚拟机,执行python checkIndices.py 对比数据结果。
  • 步骤一:创建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 设置网络规格 单击“下一步:高级配置”,高级配置可选择默认配置和自定义。此样例保持默认配置即可。 单击“下一步:确认配置”,确认完成后单击“立即创建”开始创建集群。 单击“返回集群列表”,系统将跳转到“集群管理”页面。您创建的集群将展现在集群列表中,且集群状态为“创建中”,创建成功后集群状态会变为“可用”。
  • 约束和限制 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可以使用迁移任务不用单独分析索引,简化分析工作。
  • 准备工作 创建迁移虚拟机。 创建迁移虚拟机,用于迁移源集群的元数据。 创建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" }
  • 操作步骤 登录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证书的存放路径及其密码。
  • 使用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 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。
  • 迁移场景 不同数据来源的集群,迁移方案会有差别,本章主要介以下场景的迁移方案。 源端为Elasticsearch的集群迁移 Elasticsearch集群的数据迁移有多种方式可以选择,例如使用Logstash、CDM、OBS备份与恢复、ESM、跨集群复制插件等进行数据迁移。 Logstash:CSS提供Logstash,可以完成不同数据源和ES数据的迁移,还可以进行数据的清洗和加工。具体操作可以参考使用云服务Logstash全量迁移集群数据。 CDM:华为云服务提供的云迁移工具,实现不同云服务间的集群迁移能力。具体操作可以参考Elasticsearch整库迁移到云搜索服务。 备份与恢复:Elasticsearch提供备份恢复能力,可以把一个集群的数据备份到OBS,在另一个集群恢复数据,完成集群间的数据迁移。CSS Elasticsearch集群之间的数据迁移操作可以参考使用备份与恢复迁移集群数据(源端为CSS Elasticsearch);自建Elasticsearch集群或其他第三方Elasticsearch集群数据迁移到CSS Elasticsearch集群的操作可以参考使用备份与恢复迁移集群数据(源端为第三方Elasticsearch)。 源端为数据库的集群迁移
  • 处理步骤 在Kibana的“Dev Tools”页面,执行命令GET _cluster/allocation/explain?pretty查看索引分片未分配的原因。 返回结果中显示索引名称“index” 和未分配解释“explanation” : “primary shard for this replica is not yet active”,表示分片副本未激活。 图1 索引分片未分配 尝试修改该索引的配置,执行命令将其副本数置为0。 PUT /index_name/_settings { "number_of_replicas": 0 } 返回信息“reason”中表示在恢复的数据中存在CSS集群不支持的数据类型。 图2 数据不兼容 根据问题根因,将数据中CSS集群不支持的数据类型删除或选择支持该数据类型的CSS集群版本,再进行备份恢复或数据迁移。