Elasticsearch安装与应用

Elasticsearch

Elasticsearch是一个分布式搜索和分析引擎,具有高扩展性和高可用性。它由Elastic公司提供,是Elastic Stack(ELK Stack)的核心技术之一,ELK Stack包括Elasticsearch、Kibana和Logstash等组件。本文将详细介绍Elasticsearch的安装使用、分片机制以及其它相关功能。

一、Elasticsearch的安装

Elasticsearch的安装可以通过多种方式完成,包括从官方网站下载安装包、使用wget命令下载、通过Docker启动等。以下是具体的安装步骤:

  1. 下载安装包

  2. 解压安装包

    将下载的安装包解压到指定目录。例如:

    tar -xvf elasticsearch-7.x.x-linux-x86_64.tar.gz
  3. 创建数据目录

    进入解压后的Elasticsearch目录,并创建data文件夹用于存储数据。

  4. 配置参数

    • 进入config文件夹,编辑elasticsearch.yml配置文件,设置网络访问权限等参数。例如,将network.host修改为0.0.0.0,以允许所有服务器访问。
    • 修改内存配置,编辑config/jvm.options文件,根据服务器内存情况调整JVM参数。
    • 修改系统配置,编辑/etc/sysctl.conf文件,增加一行vm.max_map_count=262144,然后执行sysctl -p使配置生效。
  5. 创建专用账号

    Elasticsearch 5.0之后不能使用root账号启动,因此需要创建专用账号并设置密码。赋予专用账号对Elasticsearch目录的读写权限。

  6. 启动服务

    • 进入Elasticsearch的bin目录,执行./elasticsearch命令启动服务。
    • 或者,可以使用Docker命令启动Elasticsearch服务。例如:
      docker run -d \
      --name es \
      -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
      -e "discovery.type=single-node" \
      -v es-data:/usr/share/elasticsearch/data \
      -v es-plugins:/usr/share/elasticsearch/plugins \
      --privileged \
      --network host \
      -p 9200:9200 \
      -p 9300:9300 \
      elasticsearch:7.x.x
      请将7.x.x替换为具体的版本号。
  7. 访问服务

    在浏览器中访问http://<服务器IP>:9200,查看Elasticsearch服务是否启动成功。

二、Elasticsearch的使用

Elasticsearch提供了丰富的API,用于创建索引、查看索引、删除索引、创建文档、查看文档、修改文档、删除文档、创建映射、查看映射以及分词器和聚合查询等操作。

  1. 创建索引

    使用PUT请求向Elasticsearch发送创建索引的请求。例如:

    PUT /my_index
    {
    "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
    }
    }
  2. 查看索引

    使用GET请求查看所有索引或单个索引的信息。例如:

    GET /_cat/indices?v
    GET /my_index
  3. 删除索引

    使用DELETE请求删除指定索引。例如:

    DELETE /my_index
  4. 创建文档

    使用POST请求向指定索引中添加文档。例如:

    POST /my_index/_doc/1
    {
    "name": "John Doe",
    "age": 30
    }
  5. 查看文档

    使用GET请求查看指定索引中的文档。例如:

    GET /my_index/_doc/1
  6. 修改文档

    可以使用POST请求或PUT请求修改文档。PUT请求会替换整个文档,而POST请求可以部分更新文档。例如:

    PUT /my_index/_doc/1
    {
    "name": "John Smith",
    "age": 31
    }
    POST /my_index/_update/1
    {
    "doc": {
    "age": 32
    }
    }
  7. 删除文档

    使用DELETE请求删除指定索引中的文档。注意,删除文档是逻辑删除,文档不会立即从磁盘上移除。例如:

    DELETE /my_index/_doc/1
  8. 创建映射

    定义索引中文档的字段及其数据类型等属性。使用PUT请求向指定索引发送创建映射的请求。例如:

     

    bash复制代码

    PUT /my_index
    {
    "mappings": {
    "properties": {
    "name": {
    "type": "text"
    },
    "age": {
    "type": "integer"
    }
    }
    }
    }
  9. 查看映射

    使用GET请求查看指定索引的映射信息。例如:

    GET /my_index/_mapping
  10. 分词器

    Elasticsearch支持多种分词器,可以对文本进行分词处理,以便进行更精确的搜索。例如,可以使用IK分词器对中文文本进行分词。

  11. 聚合查询

    Elasticsearch支持复杂的聚合查询,可以对数据进行统计分析、分组等操作。例如:

    POST /my_index/_search
    {
    "size": 0,
    "aggs": {
    "age_groups": {
    "terms": {
    "field": "age"
    }
    }
    }
    }
  12. 全文搜索

    Elasticsearch擅长处理海量数据的全文搜索,支持多种查询语法和过滤器,可以实现高效的搜索功能。例如:

    GET /my_index/_search
    {
    "query": {
    "match": {
    "name": "John"
    }
    }
    }
三、Elasticsearch的分片机制

Elasticsearch通过分片(Shard)和副本(Replica)的概念实现了高扩展性和高可用性。

  1. 分片的定义

    分片是Elasticsearch中存储数据的基本单位。一个索引可以由多个分片组成,每个分片都是一个独立的Lucene索引。通过分片,Elasticsearch可以将数据分布到多个节点上,从而实现数据的分布式存储和并行处理。

  2. 分片的重要性

    分片机制使Elasticsearch具有以下优势:

    • 水平扩展:通过增加分片数量,可以水平扩展索引的存储容量和处理能力。
    • 并行处理:分片可以分布在不同的节点上,允许多个节点并行处理查询和索引请求,提高系统的性能和吞吐量。
    • 数据分布:分片机制使数据可以分布在集群的多个节点上,减少单点故障的风险,提高数据的可用性和可靠性。
  3. 分片的类型

    Elasticsearch中的分片分为两种类型:

    • 主分片(Primary Shard):主分片是原始的数据分片,所有的写操作(如索引和删除)都首先作用于主分片。
    • 副本分片(Replica Shard):副本分片是主分片的复制品,用于提高数据的可用性和查询性能。副本分片接收来自主分片的数据更新,并在主分片不可用时提供冗余。
  4. 分片的分配

    Elasticsearch会自动管理分片和副本的分配,确保它们分布在集群的不同节点上,以最大限度地提高系统的容错能力和性能。

    • 分片创建:Elasticsearch根据索引的分片设置,创建指定数量的主分片。
    • 分片分配:Elasticsearch将主分片分配到集群中的不同节点上,确保分片均匀分布。
    • 副本创建:Elasticsearch根据索引的副本设置,为每个主分片创建副本分片。
    • 副本分配:Elasticsearch将副本分片分配到与主分片不同的节点上,确保数据冗余。
  5. 数据写入过程

    在Elasticsearch中,数据的写入过程包括以下步骤:

    • 写请求发送到主分片:所有的写操作(如索引和删除)首先发送到主分片。
    • 主分片处理写请求:主分片处理写请求,将数据写入到分片中。
    • 写请求同步到副本分片:主分片将写操作同步到副本分片。一旦主分片处理完写请求,它会将这个更改同步到它所有的副本分片上。这是为了确保数据的冗余和一致性。
    • 副本分片应用更改:副本分片接收来自主分片的更改,并将其应用到自己的数据结构中。
    • 写操作确认:一旦所有的副本分片都应用了更改,并且主分片确认了这个同步过程,写操作就被认为是成功的。

       
    • 数据读取过程

      在Elasticsearch中,数据的读取过程(即查询过程)可以是从主分片读取,也可以是从副本分片读取,这取决于Elasticsearch的路由策略和负载均衡设置。

      • 查询发送到协调节点:查询请求首先发送到集群中的一个协调节点(通常是接收查询请求的节点)。
      • 协调节点确定分片:协调节点根据查询的路由键(如文档的ID)确定哪些分片包含所需的数据。
      • 协调节点分发查询:协调节点将查询请求分发到包含数据的分片上,这些分片可以是主分片,也可以是副本分片。
      • 分片处理查询:每个分片在自己的数据上执行查询,并将结果返回给协调节点。
      • 协调节点合并结果:协调节点接收来自各个分片的查询结果,将它们合并成一个完整的查询结果,然后返回给客户端。
    • 分片的重新平衡

      随着集群的扩展和收缩,Elasticsearch会自动触发分片的重新平衡过程,以确保数据在集群中的均匀分布。

      • 集群状态监控:Elasticsearch持续监控集群的状态,包括节点的健康状况、分片的分布等。
      • 触发重新平衡:当集群状态不满足预设的阈值时(如某个节点的分片过多或过少),Elasticsearch会触发重新平衡过程。
      • 重新分配分片:Elasticsearch会根据当前的集群状态和目标状态,决定哪些分片需要重新分配,并将它们移动到更合适的节点上。
      • 更新集群状态:一旦分片重新分配完成,Elasticsearch会更新集群状态,确保所有的节点和分片都处于一致的状态。
    • 分片的故障恢复

      当集群中的某个节点出现故障时,Elasticsearch会自动触发故障恢复过程,以确保数据的可靠性和可用性。

      • 检测节点故障:Elasticsearch通过集群内部的通信机制,持续检测每个节点的健康状况。
      • 标记故障分片:一旦检测到某个节点出现故障,Elasticsearch会将该节点上的所有分片标记为故障状态。
      • 选举新的主分片:对于每个故障的主分片,Elasticsearch会在其副本分片中选举一个新的主分片。
      • 重新分配副本分片:为了确保数据的冗余,Elasticsearch会将新的主分片的副本重新分配到其他健康的节点上。
      • 更新集群状态:一旦故障恢复过程完成,Elasticsearch会更新集群状态,确保所有的节点和分片都处于一致的状态。
    • 通过分片机制,Elasticsearch实现了数据的分布式存储和并行处理,提供了高扩展性和高可用性。同时,Elasticsearch还通过副本分片、重新平衡和故障恢复等机制,确保了数据的可靠性和一致性。这些特性使得Elasticsearch成为处理海量数据的强大工具,广泛应用于日志分析、全文搜索、实时监控等领域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值