• elasticSearch中集群状态的guan'l


     es中集群出现上面的问题一般是磁盘空间不够引起的,就是node节点所在的磁盘空间不足引起的

     es整个集群放在c盘,都快满了

     说明es的磁盘已经快被使用完了,我们可以临时更新下磁盘空间大小

    修改 ES分片控制策略,提高cluster.routing.allocation.disk.watermark.low的值,该值大于当前 ES 集群所在路径 %Use的值。

    curl -XPUT localhost:9200/_cluster/settings -d '{
     
        "transient": {
            "cluster.routing.allocation.disk.watermark.low": "90%",
            "cluster.routing.allocation.disk.watermark.high": "95%"
        }
    }'

     第二种删除磁盘所在内容,让磁盘空间释放出来

    释放之后重新创建索引,整个集群状态就可以了

     查询集群状态:/_cluster/health

     es集群在windows上面的配置文件信息为

    #node01的配置:
    cluster.name: es-itcast-cluster
    node.name: node01
    node.master: true
    node.data: true
    network.host: 0.0.0.0
    http.port: 9200   
    transport.tcp.port: 9300   
    discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
    discovery.zen.minimum_master_nodes: 2
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    #node01的配置:
    cluster.name: es-itcast-cluster
    node.name: node02
    node.master: true
    node.data: true
    network.host: 0.0.0.0
    http.port: 9201  
    transport.tcp.port: 9301   
    discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
    discovery.zen.minimum_master_nodes: 2
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    #node01的配置:
    cluster.name: es-itcast-cluster
    node.name: node03
    node.master: true
    node.data: true
    network.host: 0.0.0.0
    http.port: 9202   
    transport.tcp.port: 9302   
    discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
    discovery.zen.minimum_master_nodes: 2
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    主分片边框粗,副本分片边框很细

    结论:一个索引是存储在一个或者多个分片中的,索引只是一个用来
    指向一个或多个分片(shards)逻辑命名空间(logical namespace

    点击主分片,可以看到分片的具体信息

    第二:索引中的文档是按照下面的算法存储到主分区上面的

    索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据

    第三:当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。

    接下来我们来看看es中的集群操作

    文档的写操作

    es中文档的写操作都是在主分片上完成之后,才会复制到副本分片上

     node1节点时master和data节点,node2和node3是data节点

    1、第一索引的创建、删除等操作必须在master节点上

    2、现在master收到了一个客户端的请求要在索引中存储一个文档,依据文档的_id做hash存储在node3上面的P0这个主分片上,P0有两个副本分片R0和R1

    R0在node1和node2节点上

    下面我们罗列在主分片和复制分片上成功新建、索引或删除一个文档必要的顺序步骤:
    1. 客户端给 Node 1 发送新建、索引或删除请求。
    2. 节点使用文档的 _id 确定文档属于分片 0 。它转发请求到 Node 3 ,分片 0 位于这个节点上。
    3. Node 3 在主分片上执行请求,如果成功,它转发请求到相应的位于 Node 1 Node 2 的复制节点上。当所有
    的复制节点报告成功, Node 3 报告成功到请求的节点,请求的节点再报告给客户端。
    1 shard = hash(routing) % number_of_primary_shards
    北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
    客户端接收到成功响应的时候,文档的修改已经被应用于主分片和所有的复制分片。你的修改生效了。

    搜索文档(单个文档)

     

     6.5.4、全文搜索
    对于全文搜索而言,文档可能分散在各个节点上,那么在分布式的情况下,如何搜索文档呢?
    搜索,分为2个阶段,搜索(query+取回(fetch

     

    分页查询:一个索引下面创建了100条文档,这100条文档分别存储在不同的主分区或者副本分区上面

    进行分页查询的时候,例如访问node3节点,node1上面分片会进行查询将前from+size的文档的id给node3

    node2上面分片会进行查询将前from+size的文档的id给node3

    node3会将node1和node2传递过来的id在进行一次排序获得最终的from+size的文档的id

    node3在依据最终的文档id,再到对用的分片或者副本分片上面获得对于id的具体的详细内容,最后返回给用户

  • 相关阅读:
    vs2010 在函数级别设置优化
    从快速排序开始的代码演化
    pocket API学习笔记
    工作笔记:复制文件--从windows到ubuntu,再到fedora
    Win10 64位 Apache 2.4+MySQL 5.7+PHP 7环境搭建
    Json简介
    TCP/IP 协议详解和运作过程
    PHP 编程中 10 个最常见的错误,你犯过几个?
    php中的扩展解析
    php.ini设置详解
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/12341812.html
Copyright © 2020-2023  润新知