Elasticsearch安装、共能介绍、避坑指南

一、Elasticsearch基础知识

1、Lucene

        Lucene是Apache的开源搜索引擎类库,提供了搜索引擎的核心API,Elasticsearch底层是基于Lucene来实现的。

        Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。

2、Elasticsearch

        Elasticsearch是一个开源的分布式搜索引擎,可以用来实现搜索日志统计分析系统监控等功能。

        Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。Elasticsearch 是索引、搜索和分析魔法发生的地方。

        Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和聚合信息来发现数据中的趋势和模式。随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长

        需要注意的是,elasticsearch不支持root启动,需要额外创建一个用户例如:es;虚拟内存不能过小,且注意集群名称节点要和实际的集群部署个数一致等。

3、Elastic Stack

        Elastic Stack是以Elasticsearch为核心的技术栈,包括Beats、Logstash、Kibana、Elasticsearch。

        实际上ELK是三款软件的简称,分别是Elasticsearch、Logstash、Kibana组成,在发展的过程中,又有新成员Beats的加入,所以就形成了Elastic Stack。所以说,ELK是旧的称呼,Elastic Stack是新的名字。

4、Logstash

        Logstash是具有实时流水线能力的开源的数据收集引擎。Logstash可以动态统一不同来源的数据,并将数据标准化到您选择的目标输出。它提供了大量插件,可帮助我们解析,丰富,转换和缓冲任何类型的数据。

二、安装

1、创建网络,用于容器间互联,创建自定义网络的好处

docker network create es-net

2、拉取镜像

docker pull elasticsearch:8.4.0
docker pull kibana:8.4.0

这个地方有坑,如果直接docker pull latest获取到的实际上是6.4的版本,所以最好还是指定一下版本号

docker查询最新版本号命令 

curl https://registry.hub.docker.com/v1/repositories/kibana/tags\
| tr -d '[\[\]" ]' | tr '}' '\n'\
| awk -F: -v image='kibana' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'

3、部署镜像

部署elasticsearch

docker run -d \
--name es \
--net es-net \
-p 9200:9200 \
-p 9300:9300 \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \ # 非集群模式
-v es-data:/home/es/data \ # 挂载逻辑卷,绑定es的数据目录
-v es-plugins:/home/es/plugins \ # 挂载逻辑卷,绑定es的插件目录
--privileged \ # 授予逻辑卷访问权
elasticsearch:8.1.0
docker run -d --name es --net es-net -p 9200:9200 -p 9300:9300 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" -v /home/plugins:/usr/share/elasticsearch/plugins --privileged elasticsearch:8.4.0

 

部署kibana

docker run -d \
--name kibana \
--net es-net \ # 与Elasticsearch加入同一个网络
-e ELASTICSEARCH_HOSTS=http://es:9200 \ # 设置Elasticsearch的地址,Kibana可以用容器名直接访问Elasticsearch
-p 5601:5601 \
kibana:8.1.0

问题:这个地方会有一个问题,老版本的可以加-e ELASTICSEARCH_HOSTS=http://es:9200,新版本的如果在配置文件配了,在启动命令再加会一直提示

Kibana server is not ready yet.

网上很多会告诉你地址配错了, 这个地方也有,就是配置文件里要配置docker内部分配的IP地址

但是如果改了还不对,就检查一下启动命令

docker run -d --name kibana --net es-net -e -p 5601:5601 kibana:8.4.0

# Kibana 端口号
#server.port: 5601
 
# 远程访问kibana地址
#server.host: "localhost"
 
# 使您能够在运行于代理之后指定挂载Kibana的路径。这只会影响到由Kibana生成的url,
# 您的代理在将请求转发到Kibana之前应该删除basePath值。
# 此设置不能以斜线结束。
#server.basePath: ""
 
# 传入服务器请求的最大有效负载大小(以字节为单位)。
#server.maxPayloadBytes: 1048576
 
# Kibana 服务名
#server.name: "your-hostname"
 
# 要用于所有查询的Elasticsearch实例的URL。
# 也可以配置多个ES
# elasticsearch.hosts: ["http://IP:PORT","http://IP:PORT"]  
 elasticsearch.url: "http://127.0.0.1:9200"
 
 
# 当该设置的值为true时,Kibana使用服务器中指定的主机名设置
# 当这个设置的值为false时,Kibana使用连接到这个Kibana实例的主机的主机名。
#elasticsearch.preserveHost: true
 
# Kibana在Elasticsearch中使用索引来存储保存的搜索、可视化和仪表板。
# 如果索引不存在,则Kibana创建一个新索引。
#kibana.index: ".kibana"
 
# 要加载的默认应用程序。
#kibana.defaultAppId: "discover"
 
#如果ES设置了用户验证,则需要配置可用的用户名密码 
#elasticsearch.username: "user"
#elasticsearch.password: "pass"
 
# 分别启用SSL和到peme格式SSL证书和SSL密钥文件的路径。
# 这些设置为从Kibana服务器发送到浏览器的请求启用SSL。
#server.ssl.enabled: false
#server.ssl.certificate: /path/to/your/server.crt
#server.ssl.key: /path/to/your/server.key
 
# 提供pemm格式SSL证书和密钥文件路径的可选设置。
# 这些文件将验证您的Elasticsearch后端是否使用了相同的密钥文件。
#elasticsearch.ssl.certificate: /path/to/your/client.crt
#elasticsearch.ssl.key: /path/to/your/client.key
 
# 可选设置,使您能够为您的Elasticsearch实例的证书颁发机构指定PEM文件的路径。
#elasticsearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ]
 
# 若要忽略SSL证书的有效性,请将此设置的值更改为“none”。
#elasticsearch.ssl.verificationMode: full
 
# 等待Elasticsearch响应ping的时间(毫秒)
# 默认使用elasticsearch.requestTimeout 的设置
#elasticsearch.pingTimeout: 1500
 
# 等待后端或Elasticsearch响应的时间(毫秒)
#elasticsearch.requestTimeout: 30000 

问题:启动以后直接访问:ip:9200这个时候提示未发送任何数据

是因为开启了 ssl 认证。
在 ES/config/elasticsearch.yml 文件中把 xpack.security.http.ssl:enabled 设置成 false 即可,或者直接再前边用https协议访问

 修改以后可直接用http访问

启动后直接访问IP+5601可直接打开kibana界面,第一次打开会让你输入用户名和密码

生成token

进入镜像
docker exec -it 14bdcb85f7e9  /bin/bash
生成密码
bin/elasticsearch-create-enrollment-token --scope kibana

将生成的token输入到页面token框中

 如果忘了密码可以重置

bin/elasticsearch-reset-password -u elastic

有的人习惯设置免密登录就是把
elasticsearch.yml 文件, 把 xpack.security.enabled 属性设置为 false 即可。

这个地方还有一个坑,就是如果改为false当你重置密码时是会失败的,如果忘记密码记得把这里改回true再重置,否则会失败 

xpack.security.enabled: false

ERROR: Failed to determine the health of the cluster

三、分词器的安装

1、查看数据卷目录

# docker volume inspect es-plugins
[
    {
        "CreatedAt": "2022-09-24T15:00:37+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
        "Name": "es-plugins",
        "Options": null,
        "Scope": "local"
    }
]

2、将分词器文件放到ES容器的插件数据卷中

插件数据卷目录:/var/lib/docker/volumes/es-plugins/_data
下载分词器:IK分词器GitHub地址:https://github.com/medcl/elasticsearch-analysis-ik

gitHub地址是分词器的源码地址,这里下载下来的不是分词器的安装文件

分词器的安装文件下载地址:Releases · medcl/elasticsearch-analysis-ik · GitHub 

下载分词器要选择和对应es版本相对应的版本下载。 

这里可以直接在挂载的时候直接将宿主机准备好的分词器挂载在对应目录,分词器挂载在/usr/share/elasticsearch/plugins即可,这是安装目录

-v /home/plugins:/usr/share/elasticsearch/plugins

这里记得把所要安装的分词器文件放在一个文件夹中。

进入es的 /usr/share/elasticsearch/bin查询安装的分词器

 这里遇到的坑是添加了一个数据的挂载,-v /home/data:/usr/share/elasticsearch/data结果es一直起不起来,报错信息如下:

{
    "@timestamp":"2022-09-27T07:54:34.056Z",
    "log.level":"ERROR",
    "message":"fatal exception while booting Elasticsearch",
    "ecs.version":"1.2.0",
    "service.name":"ES_ECS",
    "event.dataset":"elasticsearch.server",
    "process.thread.name":"main",
    "log.logger":"org.elasticsearch.bootstrap.Elasticsearch",
    "elasticsearch.node.name":"0b31a39fa094",
    "elasticsearch.cluster.name":"docker-cluster",
    "error.type":"java.lang.IllegalStateException",
    "error.message":"failed to obtain node locks, tried [/usr/share/elasticsearch/data]; maybe these locations are not writable or multiple nodes were started on the same data path?",
    "error.stack_trace":"java.lang.IllegalStateException: failed to obtain node locks, tried [/usr/share/elasticsearch/data]; maybe these locations are not writable or multiple nodes were started on the same data path?\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:285)\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.node.Node.<init>(Node.java:456)\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.node.Node.<init>(Node.java:311)\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.bootstrap.Elasticsearch$2.<init>(Elasticsearch.java:214)\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.bootstrap.Elasticsearch.initPhase3(Elasticsearch.java:214)\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:67)\nCaused by: java.io.IOException: failed to obtain lock on /usr/share/elasticsearch/data\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:230)\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:198)\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:277)\n\t... 5 more\nCaused by: java.nio.file.NoSuchFileException: /usr/share/elasticsearch/data/node.lock\n\tat java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)\n\tat java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)\n\tat java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)\n\tat java.base/sun.nio.fs.UnixPath.toRealPath(UnixPath.java:825)\n\tat org.apache.lucene.core@9.3.0/org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:94)\n\tat org.apache.lucene.core@9.3.0/org.apache.lucene.store.FSLockFactory.obtainLock(FSLockFactory.java:43)\n\tat org.apache.lucene.core@9.3.0/org.apache.lucene.store.BaseDirectory.obtainLock(BaseDirectory.java:44)\n\tat org.elasticsearch.server@8.4.0/org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:223)\n\t... 7 more\n\tSuppressed: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/node.lock\n\t\tat java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)\n\t\tat java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)\n\t\tat java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)\n\t\tat java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:218)\n\t\tat java.base/java.nio.file.Files.newByteChannel(Files.java:380)\n\t\tat java.base/java.nio.file.Files.createFile(Files.java:658)\n\t\tat org.apache.lucene.core@9.3.0/org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:84)\n\t\t... 10 more\n"
}

3、测试分词器 

这里的分词器名称不要用自己定义的文件名称,每个分词器都有自己的名称比如ik分词器实际是:ik_smart 

四、elasticsearch-head插件安装

1、下载镜像

docker pull mobz/elasticsearch-head:5-alpine

2、启动镜像

docker run -d \
  --name=elasticsearch-head \
  --restart=always \
  -p 9100:9100 \
  docker.io/mobz/elasticsearch-head:5-alpine

直接IP+9100,就可访问,这里如果你的elasticsearch配置的有用户名和密码放问的时候在url链接上加“?auth_user=用户名&auth_password=密码”

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装Elasticsearch,你可以按照以下步骤进行操作: 1. 首先,你可以从官方网站下载Elasticsearch安装包。官网下载地址为。 2. 下载完成后,解压缩安装包。你可以使用以下命令解压缩tar.gz文件: ```shell tar -zxvf elasticsearch-7.8.1-linux-x86_64.tar.gz ``` 3. 解压缩完成后,进入解压缩后的目录,找到配置文件elasticsearch.yml。你可以使用以下命令来编辑该文件并进行配置: ```shell vim /usr/local/elasticsearch-7.13.2/config/elasticsearch.yml ``` 4. 在编辑配置文件之前,你可能需要了解一些配置选项以满足你的需求。根据你的环境和需求,修改elasticsearch.yml文件中的配置选项。 5. 当你完成了配置文件的修改后,保存并退出编辑器。 6. 现在,可以启动Elasticsearch了。你可以使用以下命令启动Elasticsearch: ```shell ./bin/elasticsearch ``` 这是一个基本的安装和启动Elasticsearch的过程。请注意,具体的步骤可能因操作系统和版本而略有不同。确保你仔细阅读官方文档以获取更详细的安装指南。 关于卸载Elasticsearch,你可以按照以下步骤进行操作: 1. 首先,你可以通过以下命令来查看已安装Elasticsearch软件包: ```shell dpkg -l | grep elastic ``` 2. 接下来,你可以使用以下命令查找Elasticsearch安装关联: ```shell dpkg -L elasticsearch ``` 3. 然后,使用以下命令来移除已安装Elasticsearch软件包: ```shell dpkg -P elasticsearch ``` 4. 继续使用以下命令查找未卸载的目录和文件: ```shell find ./elasticsearch | grep elasticsearch ``` 注意:根据你的环境和安装方式,可能会有其他目录和文件与Elasticsearch相关。 5. 最后,根据你的环境,使用以下命令来移除相关的目录和文件: ```shell rm -r /var/lib/elasticsearch rm /var/lib/dpkg/info/elasticsearch.* rm /etc/default/elasticsearch rm /etc/init.d/elasticsearch ``` 请根据自己的具体环境和需求来执行移除目录和文件的操作,确保操作正确无误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [一、ElasticSearch安装](https://blog.csdn.net/m0_51295655/article/details/123193074)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值