美文网首页
Elasticsearch系列(1)介绍和安装

Elasticsearch系列(1)介绍和安装

作者: 正义的杰克船长 | 来源:发表于2020-08-27 00:42 被阅读0次

    1. 简介

    • Elasticsearch(简称ES)是一个分布式的搜索和分析引擎,具有分布式、高性能、检索快等特点,内部使用Lucene全文搜索框架进行索引和搜索。
    • ES为所有类型的数据提供实时的搜索和分析,无论是结构化或非结构化文本、数字数据,还是地理空间数据等其他类型数据,ES都可将其存储和索引并支持快速搜索。
    • ES支持弹性扩容。我们可以根据数据和访问量的实际情况,对ES集群规模动态调整。按照官方描述,ES集群规模支持“上百”个节点。
    • Lucene是Java语言编写的一个全文搜索引擎工具包。Lucene提供了完整的查询引擎和索引引擎,是一个全文检索引擎的架构,但它不是一个完整的全文搜索引擎,它的目的只是提供一个简单易用的工具包,来方便应用系统实现全文搜索功能。ES是在Lucene基础上建立起完整的全文搜索引擎。

    2. 基本概念

    2.1 索引结构

    ES是一个面向文档的分布式存储系统。一般使用JSON作为文档的序列化格式。

    • 索引(_index):指向一个或多个物理分片的逻辑命名空间,每个索引可以有若干个文档。
    • 类型(_type):用于归类在同一个索引中的文档集合,在ES 6.x版本中,一个索引只允许存在一个类型_type,在ES 7.x版本后将会移除_type概念。
    • 文档:索引中的文档由_id唯一标识,这个标识符由使用者提供或者系统自动生成。每个文档可以有若干个字段,每个字段有对应的数据类型,以key-value键值对形式存储着数据。默认情况下,ES会索引每个字段中的所有数据,每个索引字段都有一个特定的数据结构。例如,文本字段存储在倒排索引中,数字和地理字段存储在BKD树(动态可伸缩的多维索引结构树)中。

    2.2 分片和副本

    • 分片(shard)是基本的物理读写单元。从数据存储逻辑来说,一个ES索引包括若干个分片,一个分片有若干个副本,副本分为主分片(primary shard)和副分片(replica shard),副本是分片数据的复制,即同一个分片的主分片上的数据和副分片上的数据是相同的。主分片负责数据的写过程,写成功之后再同步到副分片。
    • 数据分片提高了ES的水平扩展能力,可扩展分片到集群内的各个节点,提高系统吞吐量;ES的多副本机制提高了系统可用性,多个数据副本可使读操作并发执行,分担了集群的压力,同时通过多副本机制实现故障自动转移,副本存储在集群的不同节点上,如果主分片出现故障,则可以从副分片中选举新的主分片负责对外服务。


      数据索引和分片、副本关系
    • 如上图所示,索引1包括两个分片,每个分片有一个主分片,两个副分片;索引2包括两个分片,每个分片有一个主分片,两个副分片,集群节点1,节点2,节点3存储着索引1和2的不同分片。
    • 底层实现上,ES的一个分片是一个Lucene索引,可以独立执行索引操作和搜索任务。Lucene索引由多个分段文件组成,每个分段都是一个倒排索引,存储着若干个文档的处理数据。在分段文件内,文档的不同字段被单独建立索引。每个字段的值由若干词(term)组成。term是原文本内容经过分词器等处理后的值。Lucene索引结构如下图所示:


      Lucene索引结构图

    2.3 查询类型

    • ES REST API支持结构化查询、全文查询和结合两者的复杂查询。
    • 结构化查询类似于在SQL中构造的查询类型。例如,可以在雇员索引中搜索性别和年龄字段,并根据hire_date字段对匹配项进行排序。
    • 全文查询是从所有文档中查找与输入搜索词匹配的所有文档,并根据与搜索词相关性返回这些文档。
    • 此外,还支持短语搜索、相似性搜索和前缀搜索,并获得自动完成建议(suggestions)。

    3. 安装Elasticsearch

    下面基于Mac操作系统安装Elasticsearch。

    (1)打开Elasticsearch官网下载地址,下载对应的安装包:

    curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-darwin-x86_64.tar.gz
    

    (2)解压安装包到Elasticsearch工作目录:

    tar -xvf elasticsearch-7.6.2-darwin-x86_64.tar.gz
    

    (3)ES不允许root用户操作,需要添加用户:

    // 创建用户
    sudo dscl . -create /Users/用户名
    // 创建UserShell
    sudo dscl . -create /Users/用户名 UserShell /bin/bash
    // 创建真实名字 RealName
    sudo dscl . -create /Users/用户名 RealName "真实名字"
    // 为新用户添加UniqueID
    sudo dscl . -create /Users/用户名  UniqueID "数字"
    // 为新用户添加PrimaryGroupID
    sudo dscl . -create /Users/用户名  PrimaryGroupID 数字
    // 为新用户添加NFSHomeDirectory
    sudo dscl . -create /Users/用户名  NFSHomeDirectory /Users/用户名
    // 将某用户添加到某组中
    sudo dscl . -append /Groups/组名 GroupMembership 用户名
    // 授权Elasticsearch工作目录给新用户
    chown -R 用户名 $ES_HOME
    

    (4)启动Elasticsearch,在$ES_HOME/bin目录直接启动:

    ./elasticsearch
    

    如果出现下图所示情况,表示单节点的Elasticsearch 已经启动

    启动日志
    (5)在浏览器输入http://localhost:9200查看节点信息验证,出现下图,表示启动成功。
    节点名称信息
    (6)部署多节点Elasticsearch集群。再启动两个Elasticsearch实例,需为每个节点指定唯一的数据目录和日志目录。
    ./elasticsearch -Epath.data=data2 -Epath.logs=log2
    ./elasticsearch -Epath.data=data3 -Epath.logs=log3
    

    然后使用jps命令查看,会发现有三个Elasticsearch实例启动。

    运行中JVM进程

    ES会给新启动的两个节点分别分配唯一id。因为在本机同时运行了三个节点,所以新启动的节点自动加入第一个节点的集群。

    4. Elasticsearch配置

    4.1 Elasticsearch配置文件

    配置文件存放在目录$ES_HOME/config下,重要配置文件如下:
    (1)elasticsearch.yml:用于存放Elasticsearch实例相关的配置。
    (2)jvm.options:用于存放java虚拟机运行相关的配置。
    (3)log4j2.properties:用于存放Elasticsearch日志相关的配置。
    (4)elasticsearch.keystore:密钥存储库配置文件。用于存放特别敏感的配置信息。Elasticsearch提供了elasticsearch-keystore工具来管理keystore中的配置信息。

    4.2 重要配置参数

    4.2.1 elasticsearch.yml配置

    在配置文件elasticsearch.yml中有一些重要的参数,在实例部署到生产环境前,需要修改为适合生产环境的参数值。

    • cluster.name:当前节点加入的集群名称,默认集群名称elasticsearch,该值名称相同的节点组成一个集群。
    • node.name:当前节点名称,默认为机器的hostname。
    • path.data:当前节点数据存储路径,可设置多个路径,多个用逗号隔开,同一个分片的数据存储于同一个路径下。
    • path.logs:当前节点日志文件的路径,可设置多个路径,多个目录用逗号隔开。
    • network.host: 设置网络环回地址,支持IP4和IP6地址,默认为127.0.0.1和[::1]。
    • discovery.seed_hosts: 配置当前节点与哪些种子节点地址通信。该参数值可以是IP地址或者主机名集合。如果是单一主机的集群环境,Elasticsearch将绑定到可用的环回地址,并扫描本机端口9300到9305,尝试连接到运行在同一服务器上的其他节点。这提供了无需进行任何配置的自动集群体验。但是在实际的生产环境,一般是多台主机的集群环境,所以多台主机环境需要配置该参数来与候选节点网络通信。
    • cluster.initial_master_nodes: 集群初始化时的master候选节点列表,第一次启动全新的ES集群时从该参数值中选举获取master节点,需要确保该值填写的是参数node.name值,该值默认是主机名。

    4.2.2 JVM堆配置

    • 堆大小设置:默认情况下,Elasticsearch会设置JVM堆的大小为1G。可以通过配置文件jvm.options中参数Xms (最小堆大小) 和参数Xmx (最大堆大小) 设置。一般来说,如果Elasticsearch可用的堆越多,那么用于内部缓存的内存越多,但是留给操作系统就会越少,所以堆也不可设置过大。
    • Heap Dump路径:通过配置文件jvm.options中参数-XX:HeapDumpPath修改堆转储内存溢出存放的数据目录。JVM将根据运行实例的PID为堆转储生成一个文件名。

    相关文章

      网友评论

          本文标题:Elasticsearch系列(1)介绍和安装

          本文链接:https://www.haomeiwen.com/subject/mdfzjktx.html