Elasticsearch 入门

由于工作需要,所以不得不接触es。而且还要我写相关的工具类,虽然说照葫芦画瓢容易,但是了解到这个东西之后,就想好好学习以下。当然了也算作我的个人笔记,大部分都是看官方文章的记录,所以不会标注版权什么的,官方链接下面会有,想深入了解可以去看看。

es介绍

Elasticsearch是一个搜索引擎

下面简称为es

Elasticsearch 是一个分布式、免费和开放的搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。 Elasticsearch 基于 Apache Lucene 构建,并于 2010 年由 Elasticsearch N.V. 首次发布(现在称为 Elastic)。Elasticsearch 以其简单的 REST API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件,Elastic Stack 是一组用于数据摄取、丰富、存储、分析和可视化的免费开放工具。 通常被称为 ELK Stack。

上面是官方原话,感兴趣的可以去看看。链接贴在这里

Elasticsearch 简介

es能做什么?

Elasticsearch 的速度和可扩展性及其为多种类型的内容编制索引的能力意味着它可用于多种用例:

应用搜索,比如我们常见的 github,linkedin,滴滴,美团,抖音,点评,音乐,视频,银行,证券,保险,电信 app 里的搜索
网站搜索
企业搜索
日志记录和日志分析
基础设施指标和容器监控
应用性能监控
地理空间数据分析和可视化
安全分析
商业分析

公司平常就用这个存一些数据,比如日志什么。速度确实快

es安装

公司用的是Linux,所以下面我会贴出win和Linux的安装方法。

Java(JVM)版本

Elasticsearch是使用Java构建的,包括JDK维护者的OpenJDK捆绑版本(GPLv2 + CE)。 在每个分布中。捆绑的 JVM 是推荐的 JVM 和 位于 Elasticsearch 主目录的目录中。jdk要使用您自己的 Java 版本,请设置环境变量。 如果必须使用与捆绑的 JVM 不同的 Java 版本。请看supported LTS version of Java

尽量选择LTS

Windows安装

从该位置下载.zip 文件

地址

下载完找个舒服的地方解压就行惹

在bin目录下找到 elasticsearch.bat 启动就好了。也可以通过cmd来启动,不过最好用管理员权限打开喔

然后我们在浏览器或者postman上面输入 http://localhost:9200/ 会出现以下信息

其中config里面的 elasticsearch.yml 是配置文件 里面的

1
network.host: 0.0.0.0

如果你想让其他人访问es 可以改成0.0.0.0,这样会绑定成任意IP 而非localhost 。这里和redis改bind差不多

Linux安装

下载:地址

  1. 创建用户

    es禁止root用户启动,所以我们创建一个新用户es

    1
    2
    3
    adduser es
    #修改密码
    passwes
  2. 创建es的数据、日志目录

    1
    2
    3
    4
    5
    #创建日志目录
    mkdir -p /data/elasticsearch/logs

    #授权
    chown es:es -R /data/
  3. 解压es安装包

    1
    tar -zxvf elasticsearch-oss-7.3.0-linux-x86_64.tar.gz
  4. 授权

    1
    chown es:es -R /opt/elasticsearch-oss-7.3.0-linux-x86_64

    将权限都给es这个用户

  5. 修改yml

    在elasticsearch.yml中修改下面属性

    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
    # 集群名称
    cluster.name: ihbe-cluster

    # 节点名称,其余两个节点分别为node-2 和node-3,别一样 (集群)
    node.name: node-1

    # 指定该节点是否有资格被选举成为master节点,默认为true (集群)
    node.master: true
    # 允许该节点存储数据(默认开启)
    node.data: true

    # 索引数据的存储路径
    path.data: /data/elasticsearch/data

    # 日志文件的存储路径
    path.logs: /data/elasticsearch/logs

    # 绑定当前机器节点的IP地址, 其他节点配置自己的IP地址
    network.host: *.*.*.*

    # 设置对外服务的http端口,默认为9200
    http.port: 9200

    # 设置节点间交互的tcp端口,默认为9300
    transport.tcp.port: 9300

    #集群的所有机器节点的IP地址
    discovery.zen.ping.unicast.hosts:["*.*.*.*","*.*.*.*","*.*.*.*"]

    #通过配置大多数节点(符合主节点数/ 2 + 1)来防止分裂。
    discovery.zen.minimum_master_nodes: 2

    #设置为true锁住内存。因为内存交换到磁盘对服务器性能是致命的
    bootstrap.memory_lock: true
  6. 修改jvm启动项

    进入config,找到jvm.options vi进入编辑

    1
    2
    3
    4
    5
    6
    7
    8
    # 配置ES占用物理内存大小,根据具体机器本身大小来定,一半物理内存
    -Xms20g

    -Xmx20g

    # 修正CVE-2021-44228漏洞

    -Dlog4j2.formatMsgNoLookups=true
  7. (集群) 拷贝目录到其他节点

    1
    scp -r /opt/elasticsearch root@*.*.*.*:/opt/

    注意这里的文件夹,是你安装的文件夹名,我这里简写了。不要直接复制改一改名字。
    同时重复第5步操作,将yml里面的network.host改成当前服务器的ip,然后找到node.name:改成其他名字,(与其他节点不重复)

  8. 启动服务
    到安装es的节点下

    1
    ./bin/elasticsearch -d -p pid

    使用jps看是否启动

    1
    jps
  9. 验证

    在任意的服务器上面
    验证集群

    1
    curl -XGET 'http://*.*.*.*:9200/_cat/nodes?pretty'

    如果能正确显示每个节点ip则成功

    查询集群状态

    1
    curl -XGET 'http://*.*.*.*:9200/_cluster/nodes?pretty'

    在返回的json中,看status的值
    -green 正常,表示集群一切正常。
    -yellow 黄表示集群不可靠但可用,一般单节时候就是这个状态。
    -red 红表示集群不可用,有故障。

    关闭es

    使用jps查询进程ID
    然后kill -9