ElasticSearch笔记

集群:
    ES节点:运行的ES实例。 ES集群由若干节点组成,这些节点在同一个网络内,cluster-name相同。
节点:
    master节点:集群中的一个节点会被选为master节点,它将负责管理集群范畴的变更,例如创建或删除索引,添加节点到集 群或从集群删除节点。master节点无需参与文档层面的变更和搜索,这意味着仅有一个master节点并不会因流量增长而成为瓶颈。任意一个节点都可以成为 master 节点
    data节点:持有数据和倒排索引。默认情况下,每个节点都可以通过设定配置文件elasticsearch.yml中的node.data属性为true(默认)成为数据节点。如果需要一个专门的主节点,应将其node.data属性设置为false
    Client节点:如果将node.master属性和node.data属性都设置为false,那么该节点就是一个客户端节点,扮演一个负载均衡的角色,将到来的请求路由到集群中的各个节点
分片:

    (1)单个节点由于物理机硬件限制,存储的文档是有限的,如果一个索引包含海量文档,则不能在单个节点存储。ES提供分片机制,同一个索引可以存储在不同分片(数据容器)中,这些分片又可以存储在集群中不同节点上

    (2)分片分为 主分片(primary shard) 以及 从分片(replica shard) 

    (3)主分片与从分片关系:从分片只是主分片的一个副本,它用于提供数据的冗余副本 

    (4)从分片应用:在硬件故障时提供数据保护,同时服务于搜索和检索这种只读请求 

    (5)是否可变:索引中的主分片的数量在索引创建后就固定下来了,但是从分片的数量可以随时改变 

    (6)索引默认创建的分片:默认设置5个主分片和一组从分片(即每个主分片有一个从分片对应),但是从分片没有被启用(主从分片在同一个节点上没有意义),因此集群健康值显示为黄色(yellow)

 

分片重要性

      ES中所有数据均衡的存储在集群中各个节点的分片中,会影响ES的性能、安全和稳定性, 所以很有必要了解一下它。

分片是什么?

     简单来讲就是咱们在ES中所有数据的文件块,也是数据的最小单元块,整个ES集群的核心就是对所有分片的分布、索引、负载、路由等达到惊人的速度。

实列场景:

     假设 IndexA 有2个分片,我们向 IndexA 中插入10条数据 (10个文档),那么这10条数据会尽可能平均的分为5条存储在第一个分片,剩下的5条会存储在另一个分片中。

    和主流关系型数据库的表分区的概念有点类似,如果你比较熟悉关系型数据库的话。

分片的设置

创建 IndexName 索引时候,在 Mapping 中可以如下设置分片 (curl)

PUT indexName
{
    "settings": {
        "number_of_shards": 5
    }
}

注意

     索引建立后,分片个数是不可以更改的。

分片个数(数据节点计算)

分片个数是越多越好,还是越少越好了?根据整个索引的数据量来判断。

实列场景:

如果 IndexA 所有数据文件大小是300G,改怎么定制方案了?(可以通过Head插件来查看)

建议:(仅参考)

   1、每一个分片数据文件小于30GB

   2、每一个索引中的一个分片对应一个节点

   3、节点数大于等于分片数

根据建议,至少需要 10 个分片。

    结果: 建10个节点 (Node),Mapping 指定分片数为 10,满足每一个节点一个分片,每一个分片数据带下在30G左右。

    SN(分片数) = IS(索引大小) / 30

    NN(节点数) = SN(分片数) + MNN(主节点数[无数据]) + NNN(负载节点数)

分片查询

我们可以指定es去具体的分片查询从而进一步的实现es极速查询。

  1. randomizeacross shards

    随机选择分片查询数据,es的默认方式

  2. _local

    优先在本地节点上的分片查询数据然后再去其他节点上的分片查询,本地节点没有IO问题但有可能造成负载不均问题。数据量是完整的。

  3. _primary

    只在主分片中查询不去副本查,一般数据完整。

  4. _primary_first

    优先在主分片中查,如果主分片挂了则去副本查,一般数据完整。

  5. _only_node

    只在指定id的节点中的分片中查询,数据可能不完整。

  6. _prefer_node

    优先在指定你给节点中查询,一般数据完整。

  7. _shards

    在指定分片中查询,数据可能不完整。

  8. _only_nodes

    可以自定义去指定的多个节点查询,es不提供此方式需要改源码。

一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。 在接下来的《深入分
片》 一章, 我们将详细说明分片的工作原理, 但是现在我们只要知道分片就是一个Lucene实例, 并且它本身就是一个完整的
搜索引擎。 我们的文档存储在分片中, 并且在分片中被索引, 但是我们的应用程序不会直接与它们通信, 取而代之的是, 直
接与索引通信。
分片是Elasticsearch在集群中分发数据的关键。 把分片想象成数据的容器。 文档存储在分片中, 然后分片分配到你集群中的
节点上。 当你的集群扩容或缩小, Elasticsearch将会自动在你的节点间迁移分片, 以使集群保持平衡。
分片可以是主分片(primary shard)或者是复制分片(replica shard)。 你索引中的每个文档属于一个单独的主分片, 所以主分
片的数量决定了索引最多能存储多少数据。
复制分片只是主分片的一个副本, 它可以防止硬件故障导致的数据丢失, 同时可以提供读请求, 比如搜索或者从别的shard取
回文档。
当索引创建完成的时候, 主分片的数量就固定了, 但是复制分片的数量可以随时调整。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值