精华内容
下载资源
问答
  • 很奇怪分片少的硬盘空间还用得多,而分片多的硬盘反而用得少,还没搞清楚原因,ES会自己平衡集群分片,由于某个节点分片少,会不停的往这个节点建分片,导致硬盘空间差距越来越大,这个问题影响到了存储,必须要解决...

    1、发现问题

    8df4e0a82834ed326f5c704186dc376d.png

    根据kinbana的monitor发现ES集群的索引分片分布不均匀,硬盘使用也不平衡。

    很奇怪分片少的硬盘空间还用得多,而分片多的硬盘反而用得少,还没搞清楚原因,ES会自己平衡集群分片,由于某个节点分片少,会不停的往这个节点建分片,导致硬盘空间差距越来越大,这个问题影响到了存储,必须要解决。

    2、查找解决方案

    https://www.elastic.co/guide/en/elasticsearch/reference/6.3/cluster-reroute.html

    根据官方文档可以重新路由,移动分片以达到分片平衡,但由于手动执行命令太慢太累了,于是决定写个脚本,

    3、最终解决方案:脚本批量移动

    shell脚本:查找节点重复分片并重新路由(移动分片)

    #!/bin/bash

    declare -A node_group=(

    ["es-node-01"]="es-node-02 es-node-03 es-node-04 es-node-05 es-node-06 es-node-07"

    ["es-node-02"]="es-node-01 es-node-03 es-node-04 es-node-05 es-node-06 es-node-07"

    ["es-node-03"]="es-node-01 es-node-02 es-node-04 es-node-05 es-node-06 es-node-07"

    ["es-node-04"]="es-node-01 es-node-02 es-node-03 es-node-05 es-node-06 es-node-07"

    ["es-node-05"]="es-node-01 es-node-02 es-node-03 es-node-04 es-node-06 es-node-07"

    ["es-node-06"]="es-node-01 es-node-02 es-node-03 es-node-04 es-node-05 es-node-07"

    ["es-node-07"]="es-node-01 es-node-02 es-node-03 es-node-04 es-node-05 es-node-06"

    )

    function get_to_nodes(){

    IFS=', ' read -r -a array <<< "$1"

    count=$2

    size=${#array[@]}

    r=$RANDOM

    start=`expr $r % $size`

    for ((i=0;i

    do

    idx=`expr $start + $i`

    if [[ $idx -ge $size ]]; then

    idx=`expr $idx % $size`

    fi

    result[$i]=${array[$idx]}

    done

    echo "${result[@]}"

    }

    pattern=$1

    src_file=".index_shards"

    re_file=".repeat_shards"

    server="http://localhost:9200"

    # 根据参数传入的索引pattern获取分片信息

    curl -s -XGET "${server}/_cat/shards/${pattern}?v&h=index,node,ip,shard,prirep,state,store,unassigned.reasons" > $src_file

    # 调awk脚本提取单节点有重复分片的索引

    awk -f extract.awk $src_file |sort > $re_file

    index=""

    from_node=""

    to_node=""

    for line in $(cat $re_file)

    do

    #line=${line//,/ }

    IFS=', ' read -r -a line <<< "$line"

    if [[ ${#line[@]} -eq 3 ]]; then

    #printf "${line[0]}, ${line[1]}, ${line[2]} \n"

    index=${line[0]}

    from_node=${line[1]}

    total=${line[2]}

    count=`expr $total - 1`

    to_nodes=($(get_to_nodes "${node_group[$from_node]}" $count))

    shards=($(grep -E "${index}\s+${from_node}" $src_file|awk '$5 =="p" {s=s" "$4}END{print s}'))

    for idx in "${!to_nodes[@]}"

    do

    shard=${shards[$idx]}

    to_node=${to_nodes[$idx]}

    cmd="curl -s -XPOST -H 'Content-Type: application/json' '${server}/_cluster/reroute?filter_path=acknowledged' \

    -d '{\"commands\":[{\"move\":{\"index\":\"${index}\",\"shard\":${shard},\"from_node\":\"${from_node}\",\"to_node\":\"${to_node}\"}}]}'"

    #echo "${index}\s+${from_node}, $total-${shards[@]}, $to_node: $cmd"

    rs=`eval $cmd`

    echo "move $index shard $shard from $from_node to $to_node: $rs"

    #exit 0

    done

    fi

    #exit 0

    done

    awk脚本:提取重复分片信息

    #!/bin/awk -f

    $5 == "p" {sum[$1","$2]++}END{for(i in sum) if(sum[i]>1) printf("%s,%d\n",i,sum[i])}

    4、执行

    # 重新路由平衡2019年2月的分片

    bash -e ./reroute.sh *-2019.02.*

    5、处理结果

    还没执行完。。。。后面补处理结果

    展开全文
  • 集群节点临时重启当修改配置时可能需要重启集群才生效,...当前节点的分片会自动分配到其他节点上,本节点启动后需要等其他节点RECOVERING后才会RELOCATING,也就是分片在其他节点恢复后又转移回来,浪费大量时间...

    集群节点临时重启

    当修改配置时可能需要重启集群才生效,或者集群发生严重错误无法恢复时都可能需要重启集群

    一个集群节点重启前要先临时禁用自动分配,设置cluster.routing.allocation.enable为none,否则节点停止后,当前节点的分片会自动分配到其他节点上,本节点启动后需要等其他节点RECOVERING后才会RELOCATING,也就是分片在其他节点恢复后又转移回来,浪费大量时间

    首先禁用自动分配

    curl -XPUT http://127.0.0.1:9200/_cluster/settings -d '{

    "transient" : {

    "cluster.routing.allocation.enable" : "none"

    }

    }'

    然后再重启集群

    集群启动后再改回配置

    curl -XPUT http://127.0.0.1:9200/_cluster/settings -d '{

    "transient" : {

    "cluster.routing.allocation.enable" : "all"

    }

    }'

    迁移具体的分片到其他节点上去

    curl -XPOST '192.168.1.83:9200/_cluster/reroute' -d  '{

    "commands" : [

    {

    "move" : {

    "index" : "info-test", "shard" : 3,

    "from_node" : "192.168.1.81", "to_node" : "192.168.1.82"

    }

    }

    ]

    }'

    手动分配分片

    curl -XPOST ‘192.168.1.83:9200/_cluster/reroute?retry_failed’

    展开全文
  • 1.为了将数据添加到ES,我们需要索引(index),索引是一个存储关联数据的地方。实际上,索引只是一个用来指定...我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,...

    1.为了将数据添加到ES,我们需要索引(index),索引是一个存储关联数据的地方。实际上,索引只是一个用来指定一个或多个分片的"逻辑命名空间"

    2.一个分片(shard)是一个最小级别"工作单元",它只是保存了索引中的所有数据的一部分,每个分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。

    3.分片是ES在进群中分发数据的关键,可以把分片想想成数据的容器。文档存储在分片中,然后分片分配到集群中的节点上。当集群扩容或缩小,ES将会自动在节点间迁移分片,以使集群保持平衡。

    4.分片可以是主分片或者是复制分片,索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。

    5.理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况:硬件存储的大小,文档的大小和复杂度、如何索引和查询你的文档,以及你期望的响应时间

    6.复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供请求,比如搜索或者从别的shard取回文档。

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

    一.下面是分片的详细解说:

    1.我们能够发送请求给集群中任意一个节点。每个节点都有能力处理任意请求。每个节点都知道任意文档所在的节点

    2.新建索引和删除请求都是写操作,它们必须在主分片上成功完成才能赋值到相关的复制分片上

    3.在主分片和复制分片上成功新建、索引或删除一个文档必要的顺序步骤:

    (1) 客户端给Node1 发送新建、索引或删除请求。

    (2) 节点使用文档的_id确定文档属于分片0.转发请求到Node3,分片0位于这个节点上。

    (3) Node3在主分片上执行请求,如果成功,它转发请求到相应的位于Node1和Node2的复制节点上。当所有的复制节点报告成功,Node3报告成功到请求的节点,请求的节点再报告给客户端。

    (4)客户端接收到成功响应的时候,文档的修改已经被用于主分片和所有的复制分片,修改生效了。

    二.ES分片复制

    复制默认的值是sync。这将导致主分片得到复制分片的成功响应后才返回。

    如果你设置replication为async,请求在主分片上被执行后就会返回给客户端。它依旧会转发给复制节点,单你将不知道复制节点成功与否。

    上面的这个选项不建议使用。默认的sync复制允许ES强制反馈传输。async复制可能会因为在不等待其他分片就绪的情况下发送过多的请求而使ES过载。

    展开全文
  • 在对集群进行扩容或者替换节点的时候,不可避免会有移动分片的操作,可以使用如下的语句进行操作,首先要关闭自动reshardcluster.routing.allocation.disable_allocation = false然后可以使用move、cancel以及...

    在对集群进行扩容或者替换节点的时候,不可避免会有移动分片的操作,可以使用如下的语句进行操作,首先要关闭自动reshard

    cluster.routing.allocation.disable_allocation = false

    然后可以使用move、cancel以及allocate进行分片的移动、取消分配以及重新分配没有分配的shard到指定节点。

    curl -XPOST 'localhost:9200/_cluster/reroute' -d '{

    "commands" : [ {

    "move" :

    {

    "index" : "test", "shard" : 0,

    "from_node" : "node1", "to_node" : "node2"

    }

    },

    "cancel" :

    {

    "index" : "test", "shard" : 0, "node" : "node1"

    }

    },

    {

    "allocate" : {

    "index" : "test", "shard" : 1, "node" : "node3"

    }

    }

    ]

    }'

    当然,推荐使用kopf插件,对以上操作进行可视化操作,更直观容易。

    kopf插件截图

    但是以上方式,对于分片很少的情况下是适用的,如果需要转移的节点很多就有些太过于麻烦了。

    当然ES默认是开启自动reshard功能的,也就是说设置

    cluster.routing.allocation.disable_allocation = true

    ES会按照同node不能存相同shard、shard分片分配平均等因素进行重新平衡。如果我们是进行扩容,那么把扩容的节点加进来,然后开启自动reshard功能,我们就可以坐等平衡结束了。

    但是如果我们是想要替换掉部分节点,那么如果按照以上操作,会将所有的节点在所有的节点上进行平衡,那么我们要下掉的节点也会平均分布着分片数据。待平衡后,我们想要下掉某个节点,还是需要转移走这部分分片,而且原来的处理方式是手工的。。。很明显,这种方式太原始,而且浪费了之前平衡花费的时间和流量。那么有没有什么配置,让ES平衡节点的时候不向上面分配分片,或者更进一步直接将原有分片“赶出去”呢?

    可以尝试使用下面的命令

    curl -XPUT 'localhost:9200/_cluster/settings' -d

    '{

    "transient": {

    "cluster.routing.allocation.exclude._ip": "192.168.0.1,192.168.0.2"

    }

    }'

    让ES不再向这两个ip的node进行分片分配。这个配置还可以使用_name以及_host等。可以参考官方文档:

    展开全文
  • 1,解决ES分片未分配的问题https://blog.csdn.net/kezhen/article/details/79379512 2,设置cluster.routing.allocation.enable为none,禁用分片分配的问题,新建索引,主分片会分配失败,显示unsigned 3,ES的集群...
  • es 分片迁移_哈希分片

    2020-11-24 04:48:33
    此值用作分片键哈希分片分片群集中提供更均匀的数据分布,但代价是减少了目标操作。 后散列,具有“close”分片键值的文档不太可能在同一块或分片上 - mongos更有可能执行广播操作以满足给...
  • 故事背景 两台ES集群,xx客户+xx...一台ES分片删除后,不要问我分片是什么,就是你打开ES页面,本来绿色带有一个个数字的都没有了。 数据丢失一半,查询的时候只有正常的那一台的数据存在。 数据还能正常存储,...
  • @[toc]一、分片介绍分片是 Elasticsearch 在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到集群中的节点上。当集群扩容或缩小,Elasticsearch 将会自动在节点间迁移分片,以使...
  • 修改ES分片规则

    2019-10-09 09:27:06
    Es查询的时候默认是随机从一些分片中查询数据,可以通过配置让es从某些分片中查询数据 1:_local 指查询操作会优先在本地节点有的分片中查询,没有的话再在其它节点查询。 2:_primary:指查询只在主分片中查询...
  • ElasticSearch 索引分片es 的概念中,最重要的一个概念便是索引。索引是真实数据的载体,对索引的管理如果不慎重,则会带来很多的性能问题。用过es的小伙伴都应该了解,我们应该在创建索引的时候为索引创建分片数...
  • 深入ES分片

    2020-11-05 20:29:13
    (4)ES怎样保证更新持久化,即使断电也不会丢失? (1)倒排索引不可变的好处? 1、不需要锁。如果从来不需要更新一个索引,就不必担心多个程序同时尝试修改。 2、一旦索引被读入文件系统的缓存,它就一直在那儿,...
  • es分片分配功能reroute

    千次阅读 2019-07-11 10:29:59
    一个es的节点只能存一个分片的主分片或者某一个副本分片,如图所示: 分片数字相同代表为同一个分片的不同副本,当设置副本数超过节点数,则会有副本不会被分配 移动分片命令可以将未分配的分片分配到指定节点: ...
  • es分片迁移

    2018-12-20 11:26:12
    一个集群节点重启前要先临时禁用自动分配,设置cluster.routing.allocation.enable为none,否则节点停止后,当前节点的分片会自动分配到其他节点上,本节点启动后需要等其他节点RECOVERING后才会RELOCATING,也就是...
  • 文章:郭彦超(北京中心—技术专家)排版:陈倩接上一篇ES集群优化之海量时序数据处理留下的疑问,我们对ES进行性能评测1数据导入按上文约定配置,我们先将HDFS上一个月的日志数据迁移至ES打通数据同步的流程1、创建...
  • ES分片状态为灰色Unassigned的2种处理方法目录[显示]文档应对场景当EZSonar服务器异常断电重启后,通过ES状态管理界面查看索引Shard分片出现状态为灰色Unassigned状态,可以通过下列步骤进行应对操作。ES状态管理...
  • es 分片迁移

    2019-08-06 09:15:43
    http://localhost:9200/_cluster/reroute 命令 { “commands”:[{ “move”:{ “index”:“indexName”, “shard”:0, “from_node”:“node-1”, “to_node”:“node-4” }}]}
  • es分片shard的数量

    2019-09-25 10:13:45
    适当的提升分片数量可以提升建立索引的速度; 一般情况下:一个索引库建立5-20个分片是最合适的; 注意:如果分片过少或者过多,都会降低检索的速度 分片数过多会导致: 1、 会导致打开比较多的文件2、 分片是...
  • ES分片未分配问题总结

    千次阅读 2020-04-26 17:40:01
    方法一:使用ES的cat API可以分析出未分配的分片信息及未分配的原因 curl -XGETlocalhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grepUNASSIGNED 命令返回信息包括索引名称、分片编号、是...
  • es分片内部原理

    2020-12-04 08:41:36
    2、刷新(refresh)使分片处于 “刷新(refresh)完成后, 缓存被清空但是事务日志不会” 的状态,分片每秒被刷新(refresh)一次: 这些在内存缓冲区的文档被写入到一个新的段中,且没有进行 fsync 操作。...
  • ES分片以及副本

    千次阅读 2017-03-22 11:16:27
    分片(Shard)以及副本(Replica)
  • 主机清单(es集群生产环境建议三节点以上)hostnameipsoftwaresystem oselk-node1192.168.99.185elasticsearch-6.8.4zabbix-agent-4.2.7CentOS 7.5.1804elk-node2192.168.99.186elasticsearch-6.8.4zabbix-agent-4.2.7...
  • elasticsearch 集群indices 分片状态INITIALIZING,集群状态为: yellow故障现象GET /_cat/shards/7a_cool7a_cool 5 r STARTED 4583018 759.4mb 10.2.4.21 pt01-pte-10-2-4-217a_cool 17 r INITIALIZING 10.2.4...
  • ES分片的一致性

    2018-07-28 10:05:00
    理解分片-consistency(一致性) : 默认主分片在尝试写入时需要规定数量(quorum)或过半的分片(可以是主节点或复制节点)可用。这是防止数据被写入到错的网络分区,规定的数量计算公式如下: int((primary+number_of_...
  • 解决ES分片未分配的问题

    万次阅读 2018-02-26 17:11:17
    1、定位问题分片:使用ES的cat API可以分析出未分配的分片信息及未分配的原因curl -XGETlocalhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grepUNASSIGNED命令返回信息包括索引名称、分片...
  • Elasticsearch 的一个分片对应 Lucene 的一个索引,Elasticsearch 的核心就是将这些 Lucene 索引分布式化,提供索引和检索服务。可见,如何设计分片是至关重要的。一个索引到底该设置几个主分片呢?由于单个分片只能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,045
精华内容 818
关键字:

es分片