应用开发简介
Elasticsearh简介
Elasticsearch是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎和分析引擎。设计用于大数据中,能够稳定、可靠、快速地实现实时搜索和分析,并且安装使用的方法十分简单方便。
Elasticsearch相比传统关系数据库,通过时间戳或者精确匹配做过滤的基本功能外,还能够进行全文搜索,处理同义词和根据相关性给文档打分,根据同一份数据生成分析和聚合的结果,在没有大量工作进程的情况下能做到对数据的实时处理。这也是Elasticsearch存在的重要意义。它让你以前所未有的速度处理大数据。
常用概念
基本概念
-
cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。Elasticsearch的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看Elasticsearch集群,在逻辑上是个整体,你与任何一个节点的通信和与整个Elasticsearch集群通信是等价的。
-
shards
代表索引分片,Elasticsearch可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
-
replicas
代表索引副本,Elasticsearch可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡。
-
recovery
代表数据恢复或叫数据重新分布,Elasticsearch在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
-
river
代表Elasticsearch的一个数据源,也是其它存储方式(如:数据库)同步数据到Elasticsearch的一个方法。它是以插件方式存在的一个Elasticsearch服务,通过读取river中的数据并把它索引到Elasticsearch中,官方的river有couchDB、RabbitMQ、Twitter、Wikipedia的。
-
gateway
代表Elasticsearch索引快照的存储方式,Elasticsearch默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个Elasticsearch集群关闭再重新启动时就会从gateway中读取索引备份数据。Elasticsearch支持多种类型的gateway,有本地文件系统(默认),分布式文件系统和Hadoop的HDFS。
-
discovery.zen
代表Elasticsearch的自动发现节点机制,Elasticsearch是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
-
Transport
代表Elasticsearch内部节点或集群与客户端的交互方式,默认内部是使用TCP协议进行交互,同时它支持HTTP协议(json格式)、Thrift、Servlet、Memcached、ZeroMQ等的传输协议(通过插件方式集成)。
-
Index
这是Elasticsearch存储数据的地方,类似于关系数据库的database。
-
Document type
类似关系数据库的表,一个index里面只可以有一个Document type。
-
Document
这个类似关系数据库的一行,每一Document都有一个唯一的ID作为区分;
-
Field
类似关系数据库的某一列,这是Elasticsearch数据存储的最小单位。
下载客户端
操作场景
您可以执行如下操作来完成运行环境准备。
操作步骤
- 确认服务端Elasticsearch组件已经安装,并正常运行。
- 下载Elasticsearch客户端程序到本地。
- 登录FusionInsight Manager系统。
在浏览器地址栏中输入访问地址,地址格式为“http://FusionInsight Manager系统的WebService浮动IP地址:8080/web”。
例如,在IE浏览器地址栏中,输入“http://10.10.10.172:8080/web”。
- 单击“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 更多 > 下载客户端”,“客户端类型”勾选“完整客户端”,单击“确定”开始下载客户端,等待下载完成。
- 获取并解压缩安装包“FusionInsight_Cluster_<集群ID>_Elasticsearch_Client.tar”。
- 登录FusionInsight Manager系统。
配置并导入样例工程
概述
背景信息
Elasticsearch客户端安装程序目录中包含了Elasticsearch开发样例工程,将工程导入到IntelliJ IDEA开始样例学习。
前提条件
确保本地PC的时间与FusionInsight集群的时间差要小于5分钟,若无法确定,请联系系统管理员。FusionInsight集群的时间可通过FusionInsight Manager页面右下角查看。
导入Rest Client客户端样例工程
操作步骤
- 将在下载的客户端压缩文件包“FusionInsight_Cluster_<集群ID>_Elasticsearch_Client.tar”解压。
- 压缩包解压后,在“FusionInsight_Cluster_<集群ID>_Elasticsearch_ClientConfig\Elasticsearch”目录可获取样例工程“elasticsearch-rest-client-example ”。
- 在应用开发环境中,导入样例工程到IntelliJ IDEA开发环境。
- 选择“File > New > Project from Existing Sources”。
- 在显示的“Select File or Directory to Import”对话框中,选择"“elasticsearch-rest-client-example”"文件夹中的“.project”文件,单击“OK”。
- 确认后续配置,单击“Next”;如无特殊需求,使用默认值即可。
- 选择推荐的JDK版本,单击“Finish”完成导入。
- 获取新建用户的认证凭据文件。参考“准备开发用户”获取解压得到的用户user.keytab文件与krb5.conf文件,复制到样例工程的conf目录下,用于在样例工程中进行安全认证。
- 在客户端压缩文件包的“FusionInsight_Cluster_<集群ID>_Elasticsearch_ClientConfig\Elasticsearch\config”目录下存在配置文件“es-rest-client-example.properties”,请拷贝该文件的相关参数值赋值给样例工程conf目录下的文件“esParams.properties”。
- 在开发环境IntelliJ IDEA中,样例工程的conf目录下,打开文件“esParams.properties”,按需修改如下表1-9中提供的参数。
表1-9 配置说明表
配置名称 |
默认值 |
含义 |
---|---|---|
esServerHost |
形如ip1:port1,ip2:port2,ip3:port3...... |
Elasticsearch集群中任意节点IP与该IP节点上已安装的Elasticsearch实例的HTTP端口组合的列表,EsMaster实例除外 |
connectTimeout |
5000 |
客户端和服务端建立连接的超时时间,以毫秒为单位 |
socketTimeout |
60000 |
客户端获取服务器响应的超时时间,以毫秒为单位 |
connectionRequestTimeout |
100000 |
从连接池获取连接的超时时间,以毫秒为单位 |
isSecureMode |
true |
客户端是否开启安全模式,true为开启安全模式,false为开启普通模式 |
principal |
esuser@<系统域名> |
认证主体 |
snifferEnable |
true |
Rest client是否开启嗅探功能,true为开启,false为不开启 |
customJaasPath |
空 |
用户自定义jaas.conf文件路径,具体到文件名,不填将自动生成 |
7. 确认样例工程conf目录下的“esParams.properties”中的参数“isSecureMode”=“true”,使用安全模式。
说明:
- 导入样例代码时,加载如果报错,请使用较新的IntelliJ IDEA版本。
- EsMaster实例的http请求功能已经关闭,esServerHost参数的值中,请不要包含EsMaster实例,即24148端口,否则会导致请求失败。
- 配置参数“esServerHost”为已安装Elasticsearch集群中任意节点IP与该IP节点上已安装的任意Elasticsearch实例的HTTP端口组合的列表,形如“ip1:port1,ip2:port2,ip3:port3......”。该端口值可以通过以下方式查看:FusionInsight Manager界面选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 配置 > 全部配置”,单击对应实例“端口”,查看对应实例的“SERVER_PORT”参数值。
- 如果要确认当前Elasticsearch集群是安全模式还是普通模式,请登录Fusioninsight集群界面,选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 配置 > 全部配置”,单击“安全”,找到参数“ELASTICSEARCH_SECURITY_ENABLE”,如果该值为true,则Elasticsearch集群为安全模式,如果为false,则Elasticsearch集群为普通模式。
- 用户可登录FusionInsight Manager,选择“系统 > 权限 > 域和互信”,“本端域”参数的值即为当前系统域名。例如“本端域”参数为“9427068F-6EFA-4833-B43E-60CB641E5B6C.COM”,则“principal”的值为“esuser@9427068F-6EFA-4833-B43E-60CB641E5B6C.COM”。
- 用户可通过配置参数“customJaasPath”自定义jaas.conf文件路径,如无该需求,可以不填,将自动生成。
- 参数“customJaasPath”需要安装了6.5.1.5及以后的补丁才支持。
导入Transport客户端样例工程
操作步骤
- 将在下载的客户端压缩文件包“FusionInsight_Cluster_<集群ID>_Elasticsearch_Client.tar”解压。
- 压缩包解压后,在“FusionInsight_Cluster_<集群ID>_Elasticsearch_ClientConfig\Elasticsearch”目录可获取样例工程“elasticsearch-transport-client-example ”。
- 在应用开发环境中,导入样例工程到IntelliJ IDEA开发环境。
- 选择“File > New > Project from Existing Sources”。
- 在显示的“Select File or Directory to Import”对话框中,选择"“elasticsearch-transport-client-example”"文件夹中的“.project”文件,单击“OK”。
- 确认后续配置,单击“Next”;如无特殊需求,使用默认值即可。
- 选择推荐的JDK版本,单击“Finish”完成导入。
4. 获取新建用户的认证凭据文件。参考“准备开发用户”获取解压得到的用户user.keytab文件与krb5.conf文件,复制到样例工程的conf目录下,用于在样例工程中进行安全认证。
5. 在客户端压缩文件包的“FusionInsight_Cluster_<集群ID>_Elasticsearch_ClientConfig\Elasticsearch\config”目录下存在配置文件“es-transport-client-example.properties”,该文件已包含当前Elasticsearch集群中的所有实例列表,请拷贝该文件的相关内容覆盖样例工程conf目录下的“esParams.properties”。
6. 在开发环境IntelliJ IDEA中,样例工程的conf目录下,打开文件“esParams.properties”,按需修改表1-10中提供的参数。
表1-10 配置说明表
配置名称 |
默认值 |
含义 |
---|---|---|
clusterName |
elasticsearch_cluster |
Elasticsearch集群的名称 |
esServerHosts |
ip1:port1,ip2:port2 |
集群中节点的ip和transport端口,多个用逗号隔开 |
principal |
esuser@系统域名 |
认证主体 |
krb5Path |
/D:/workspace/esuser/ |
krb5文件的路径 |
keytabPath |
/D:/workspace/esuser/ |
keytab文件的路径 |
isSecureMode |
true |
是否为安全模式,true表示安全模式,false表示普通模式 |
isSniff |
true |
是否开启嗅探功能,true表示开启嗅探,false表示不开启嗅探 |
customJaasPath |
空 |
用户自定义jaas.conf文件路径,具体到文件名,不填将自动生成 |
说明:
- 集群名称“clusterName”可以在装有Elasticsearch客户端的节点上执行以下命令查看:
curl -XGET --negotiate --tlsv1.2 -k -u : "https://ip:httpPort/_cluster/health?pretty" | grep cluster_name
命令中的“ip”参数为Elasticsearch集群中任意节点的“ip”,参数“httpport”为该IP节点上已安装的任意EsNode实例的HTTP端口,该端口值可以在FusionInsight Manager界面的Elasticsearch服务下,选择该实例的“配置”,选择“全部配置”右上角搜索参数“SERVER_PORT”获取。
- “principal”的格式为“用户名+域名”。用户在FusionInsight Manager的“系统 > 权限 > 用户”中创建。可登录FusionInsight Manager,选择“系统 > 权限 > 域和互信”,查看“本端域”参数值,即为当前系统域名。例如“本端域”参数为“9427068F-6EFA-4833-B43E-60CB641E5B6C.COM”,则“principal”的值为“esuser@9427068F-6EFA-4833-B43E-60CB641E5B6C.COM”。
- 配置参数“esServerHosts”为已安装Elasticsearch集群中任意节点IP与该IP节点上已安装的任意Elasticsearch实例的HTTP端口组合的列表,形如“ip1:port1,ip2:port2,ip3:port3......”。该端口值可以通过以下方式查看:FusionInsight Manager界面选择“集群 > 待操作集群的名称 > 服务 > Elasticsearch > 服务配置”,参数类别选择“全部配置”,单击对应实例“端口”,查看对应实例的“TRANSPORT_TCP_PORT”参数值。
- 用户可通过配置参数“customJaasPath”自定义jaas.conf文件路径,如无该需求,可以不填,将自动生成。
- 参数“customJaasPath”需要安装了6.5.1.5及以后的补丁才支持。
准备安全认证
准备认证机制代码
场景说明
在安全集群环境下,各个组件之间的相互通信不能够简单的互通,而需要在通信之前进行相互认证,以确保通信的安全性。Elasticsearch应用开发需要进行Spnego安全认证。Spnego认证是一种扩展了Kerberos,使用GSS-API认证机制的安全协议。安全认证主要采用代码认证方式,需要“krb5.conf”和“user.keytab”,支持Oracle JAVA平台和IBM JAVA平台。
“krb5.conf”和“user.keytab”文件已经通过“准备开发用户”获得,并放置于样例工程conf目录下。文章来源:https://www.toymoban.com/news/detail-768586.html
- Rest Client客户端修改样例工程conf目录下配置文件esParams.properties的参数principal为“新建的用户名@<系统域名>”。
- Transport客户端修改样例工程conf目录下配置文件esParams.properties的参数principal为“新建的用户名@<系统域名>”。
Transport客户端认证还需进行如下处理:文章来源地址https://www.toymoban.com/news/detail-768586.html
- 安全模式和非安全模式下不同的处理
if (isSecureMode.equals("true")) {
setSecConfig();} else {
System.setProperty("es.security.indication", "false");
}
builder = RestClient.builder(HostArray);
- 设置安全认证需要的环境变量
private static void setSecConfig() {
try {
String path = System.getProperty("user.dir") + File.separator + "conf" + File.separator;
LOG.info("FilePath is " + path);
LoginUtil.setJaasFile(principal, path + "user.keytab");
LoginUtil.setKrb5Config(path + "krb5.conf");
System.setProperty("elasticsearch.kerberos.jaas.appname", "EsClient");
// add for ES security indication
System.setProperty("es.security.indication", "true");
LOG.info("es.security.indication is " + System.getProperty("es.security.indication"));
} catch (Exception e) {
LOG.error("Failed to set security conf", e);
}
}
到了这里,关于华为云Elasticsearch(FusionInsight HD) 连接和开发教程-环境准备的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!