elasticsearch学习笔记

ElasticSearch 官方中文手册
英文:https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html#_check_that_elasticsearch_is_running

中文:
mac或linux系统,从归档文件中安装Elasticsearch

elasticsearch为linux和mac提供.tar.gz的归档包,
这个包包含免费和订阅的功能。30天的试用期

注意:elasticsearch内建包含了OpenJDK。

1、下载和安装
#cd /home/source
#wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.3.2-linux-x86_64.tar.gz
#tar -zxvf elasticsearch-8.3.2-linux-x86_64.tar.gz
#cd elasticsearch-8.3.2
#pwd
目录/home/source/elasticsearch-8.3.2 将作为 $ES_HOME的值

2、开启系统的自动建立索引
部分商业特性自动建立索引。默认情况下,elasticsearch不需要额外步骤,启动后建立就被配置为自动建立索引。
如果你关闭了自动索引,你必须在配置文件elasticsearch.yml中配置active.auto_create_index,如下配置:
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

重要:如果你使用Logstash或Beats,大多数你需要在;action.autocreate_index增加索引名字,如果你不能确认该写什么参数,你可以写个*,这样会自动建立所有的索引

3、从命令行运行elasticsearch
$./bin/elasticsearch
第一次启动Elasticsearch时,安全会被配置,下面的是自动生成的:
. 验证被打开,用户elastic是内建的超级管理员,密码自动生成
. HTTP传输层的TLS的证书和秘钥生成,TLS会被配置使用此证书和密钥
. 为Kibana生成一个登记了的token,有效期30分钟
可以在其它任何时间更改内置超级管理员的密码:$bin/elasticsearch-reset-password -u elastic
可以在其它任何时间更改Kibana实例的token:$bin/elasticsearch-create-enrollment-token -s kibana
可以在其它任何时间更改Elasticsearch nodes的token:$bin/elasticsearch-create-enrollment-token -s node
如果你有一个受密码保护的Elasticsearch keystore,会被提示输入keystore的密码
Elasticsearch默认会打印日志到控制台,并且记录把日志记录到日志目录<clustername>.log。elasticsearch初始化时会打印一些信息,初始化完成后在前端运行时,不再打印日志,除非有值得记录的一些东西发生。Elasticsearch运行时,可以通过http接口9200端口和ElasticSearch交互。

在注册新节点之前,在集群中通常需要额外的操作,比如绑定到localhost以外的地址或满足elasticsearch引导程序检查。 在此期间,自动生成的注册令牌可能会过期,这就是为什么注册令牌不会自动生成的原因。
此外,同一主机上的节点加入集群,不需要额外的配置。 如果希望其他主机上的节点加入集群,则需要设置transport.host,指定一个受支持的值(如取消transport.host:0.0.0.0的注释),或者指定一个绑定到服务器的某个ip地址。
要在集群中注册新节点,可以在集群中的任何现有节点上使用elasticsearch-create-enrollment-token工具创建一个注册令牌。 然后,您可以使用–enrollment-token参数启动一个新节点,以便它加入现有的集群。
a、在运行Elasticsearch的另一个终端中,在Elasticsearch的安装目录,运行elasticsearch-create-enrollment-token工具,为新节点生成注册令牌。
$bin/elasticsearch-create-enrollment-token -s node
复制注册令牌,注册新节点。
b、 从新节点的安装目录中,启动Elasticsearch,并通过–enrollment-token参数传递注册令牌。
$bin/elasticsearch –enrollment-token <entollment-token>
这样,Elasticsearch 会在config/certs目录中自动生成证书和密钥
c、其它新节点加入重复以上步骤即可

4、检查Elasticsearch的运行
发送一个https的请求到本地端口9200来测试elasticsearch状态
$curl –cacert $ES_HOME/config/certs/http_ca.crt -u elastic https://localhost:9200
上面的$ES_HOME,也就是/home/source/elasticsearch-8.3.2

5、Run as daemon
$./bin/elasticsearch -d -p pid
日志会记录在$ES_HOME/logs/
pkill -F pid
注意:elasticsearch的tar.gz包,不包含systemd模块,如果希望以服务运行,那就使用rpm包

6、命令行配置Elasticsearch
elasticSearch默认读取$ES_HOME/config/elasticsearch.yml配置,yml中可以配置所有的参数,参数参考这里https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html
命令行也支持所以参数,使用-E参数,如
$./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
小技巧:通常,关于集群的配置都会放在yml配置中,而特点于节点的配置会放在命令行,如node.name,节点名

7、客户端连接elasticsearch
首次启动Elasticsearch时,会自动为HTTP层配置TLS。 生成CA证书并存储在磁盘上:
$ES_HOME/config/certs/http_ca.crt
该证书的十六进制SHA-256指纹也输出到终端。 任何连接到Elasticsearch的客户端,如Elasticsearch客户端、Beats、独立的Elastic Agents和Logstash,都必须验证他们是否信任Elasticsearch用于HTTPS的证书。 Fleet Server和Fleet-managed Elastic agent会自动配置为信任CA证书。 其他客户端可以使用CA证书的指纹或CA证书本身建立信任。
如果已完成自动配置,仍可获取安全证书的指纹信息。 您还可以将CA证书复制到您的计算机并配置您的客户端以使用它。

8、使用CA指纹
复制Elasticsearch启动时输出到终端的指纹值,并配置客户机在连接到Elasticsearch时使用该指纹建立信任。
如果已经完成自动配置,仍然可以通过以下命令获取安全证书的指纹信息。 路径为自动生成的HTTP层CA证书。
$openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt
该命令将返回安全证书,包括指纹。 颁发者应该是 Elasticsearch security auto-configuration HTTP CA。

9、使用CA 证书
如果您的库不支持验证指纹的方法,Elasticsearch节点自动生成的CA证书位于以下目录中:
$ES_HOME/config/certs/http_ca.crt
复制http_ca。 并将您的客户端配置为在连接到Elasticsearch时使用这个证书来建立信任。

10、目录说明
存档发行版是完全独立的。 默认情况下,所有文件和目录都包含在$ES_HOME中——解压缩时创建的目录。
这非常方便,因为您不需要创建任何目录就可以开始使用Elasticsearch,而卸载Elasticsearch就像删除$ES_HOME目录一样简单。 但建议修改config目录、data目录和logs目录的默认位置,以免后续删除重要数据。
home -> $ES_HOME
bin -> 可执行脚本目录,包含elesticsearch,用于启动node和elasticsearch-plugin,用于安装插件
conf -> 配置文件目录,包含elasticsearch.yml $ES_PATH_CONF,实际目录是$ES_HOME/config
conf -> 传输层和http层生成的密钥和证书的位置 $ES_HOME/config/certs
data -> 分配在节点上的每个索引/分片的数据文件的位置 $ES_HOME/data
logs ->
plugins -> 插件文件所在目录,一个插件一个子目录 $ES_HOME/plugins
repo -> 共享文件存储位置。 可容纳多个位置。 文件系统存储库可以放在这里指定的任何目录的任何子目录中。

11、证书和密码安全
安装Elasticsearch时,将在Elasticsearch配置目录中生成以下证书和密钥,用于将Kibana实例连接到您的Elasticsearch集群,并对节点间通信进行加密。 这里列出的文件供参考。
http_ca.crt 用于对这个Elasticsearch集群的HTTP层证书进行签名的CA证书。
http.p12 包含此节点HTTP层的密钥和证书的密钥存储库。
transport.p12 包含集群中所有节点的传输层密钥和证书的密钥存储库。
http.p12和运输。 p12是有密码保护的pkcs# 12密钥存储库。 Elasticsearch将这些密钥库的密码作为安全设置存储。 要检索密码,以便检查或更改密钥存储库内容,请使用bin/elasticsearch-keystore工具。
使用如下命令找回http.p12的密码:
$bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
使用如下命令找回transport.p12的密码:
bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password

 

 

 

 

 

 

 

 

 

 

 

1、安装,设置监听ip后,启动出错

| ERROR: [2] bootstrap checks failed. You must address the points described in the following [2] lin

[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
编辑 /etc/security/limits.conf,追加以下内容;

#* soft core 0
#* hard rss 10000
* soft nofile 65536
* hard nofile 65536

此文件修改后需要重新登录用户,才会生效

[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

编辑 /etc/sysctl.conf,追加以下内容:

vm.max_map_count=655360

2,报错:[2022-07-23T18:44:55,440][ERROR][o.e.i.g.GeoIpDownloader ] [localhost.localdomain] exception during geoip databases update
org.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active
at org.elasticsearch.ingest.geoip.GeoIpDownloader.updateDatabases(GeoIpDownloader.java:134) ~[ingest-geoip-8.3.2.jar:8.3.2]
at org.elasticsearch.ingest.geoip.GeoIpDownloader.runDownloader(GeoIpDownloader.java:274) [ingest-geoip-8.3.2.jar:8.3.2]
at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:102) [ingest-geoip-8.3.2.jar:8.3.2]
at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:48) [ingest-geoip-8.3.2.jar:8.3.2]
at org.elasticsearch.persistent.NodePersistentTasksExecutor$1.doRun(NodePersistentTasksExecutor.java:42) [elasticsearch-8.3.2.jar:?]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:769) [elasticsearch-8.3.2.jar:?]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) [elasticsearch-8.3.2.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:833) [?:?]

因为他启动时会去更新地图的一些数据库,这里直接禁掉即可,用到时再说,配置文件conf/elasticsearch.yml,增加配置

1
ingest.geoip.downloader.enabled: false

 

 

 

 

 

 

curl:测试语句
1、curl –user elastic:xEjB13-nuDEGVNLhCvhm -XGET ‘https://localhost:9200/dangjian_articles/_source/506’ –tlsv1.2 -k

2、curl –user elastic:xEjB13-nuDEGVNLhCvhm -XGET ‘https://localhost:9200/_cat/health?v‘ –tlsv1.2 -k    获取健康状态

3、curl –user elastic:xEjB13-nuDEGVNLhCvhm -H “Content-Type:application/json” -XGET ‘https://localhost:9200/_cat/indices‘ –tlsv1.2 -k  获取所有索引

curl –user elastic:xEjB13-nuDEGVNLhCvhm -H “Content-Type:application/json” -X PUT ‘https://localhost:9200/test/_doc/1’ -d ‘{“user”:”zhangsan”,”uid”:”8888″}’ –tlsv1.2 -k

curl –user elastic:xEjB13-nuDEGVNLhCvhm -H “Content-Type:application/json” -X GET ‘https://localhost:9200/twitter/_doc/ZYtFTYIBk4Inmlc-1jup?pretty’ –tlsv1.2 -k

 

curl –user elastic:xEjB13-nuDEGVNLhCvhm -H “Content-Type:application/json” -X POST ‘https://localhost:9200/twitter/_create/4′ -d ‘{“user”:”GBX2″,”uid”:4,”city”:”shijiazhuang”,”province”:”Hebei”,”country”:”China”,”DOB”:”2008-06-05″}’ –tlsv1.2 -k    如果id存在,则冲突,不能增加,如果id不存在,则能增加

 

 

 

 

 

 

 

 

 

 

 

其它:

Lucene全文检索就是对文档中全部内容进行分词,然后对所有单词建立倒排索引的过程
lucene是一套用于全文检索和搜寻的开源程序库
lucene可以用来制作搜索引擎产品
放一张图说明倒排索引:

发表评论

您的电子邮箱地址不会被公开。