ELK 系列十、elasticsearch索引模版设置,规划分片和副本

目录

1、索引模版设置

1.0 了解下分片和副本

1.1 新建或修改模版

1.2 删除索引模版

1.3 查询模版

2、预设置索引,设置分片和副本


1、索引模版设置

1.0 了解下分片和副本

分片和副本:

es中的分片share相当于关系型数据库的表分区,一般一个分片处理30g的存储数据,如果规划中有300g可分10个分片

 

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

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

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

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

 

如果你有3个节点, 则推荐你创建的分片数最多不超过9(3x3)个

 

副本是对分片数据进行冗余备份用的,保证数据可靠性

 

 

集群(cluster):由一个或多个节点组成, 并通过集群名称与其他集群进行区分

节点(node):单个ElasticSearch实例. 通常一个节点运行在一个隔离的容器或虚拟机中

索引(index):在ES中, 索引是一组文档的集合

分片(shard):因为ES是个分布式的搜索引擎, 所以索引通常都会分解成不同部分, 而这些分布在不同节点的数据就是分片. ES自动管理和组织分片, 并在必要的时候对分片数据进行再平衡分配, 所以用户基本上不用担心分片的处理细节,一个分片默认最大文档数量是20亿.

副本(replica):ES默认为一个索引创建5个主分片, 并分别为其创建一个副本分片. 也就是说每个索引都由5个主分片成本, 而每个主分片都相应的有一个copy.

对于分布式搜索引擎来说, 分片及副本的分配将是高可用及快速搜索响应的设计核心.主分片与副本都能处理查询请求, 它们的唯一区别在于只有主分片才能处理索引请求.

//新增索引的同时添加分片,不使用默认分片,分片的数量

//一般以(节点数*1.5或3倍)来计算,比如有4个节点,分片数量一般是6个到12个,每个分片一般分配一个副本

PUT /testindex

{

   "settings" : {

      "number_of_shards" : 12,

      "number_of_replicas" : 1

   }

}

 

PUT /otosaas_qlllog-2019.04.24

{

    "settings": {

        "number_of_shards" :   1,

        "number_of_replicas" : 0

    }

}

选择合适的分片数和副本数ES的分片分为两种,主分片(Primary Shard)和副本(Replicas)。默认情况下,ES会为每个索引创建5个分片,即使是在单机环境下,这种冗余被称作过度分配(Over Allocation),目前看来这么做完全没有必要,仅在散布文档到分片和处理查询的过程中就增加了更多的复杂性,好在ES的优秀性能掩盖了这一点。假设一个索引由一个分片构成,那么当索引的大小超过单个节点的容量的时候,ES不能将索引分割成多份,因此必须在创建索引的时候就指定好需要的分片数量。此时我们所能做的就是创建一个新的索引,并在初始设定之中指定这个索引拥有更多的分片。反之如果过度分配,就增大了Lucene在合并分片查询结果时的复杂度,从而增大了耗时,所以我们得到了以下结论:

我们应该使用最少的分片!

主分片,副本和节点最大数之间数量存在以下关系:

节点数<=主分片数*(副本数+1)

 

 控制分片分配行为。以上是在创建每个索引的时候需要考虑的优化方法,然而在索引已创建好的前提下,是否就是没有办法从分片的角度提高了性能了呢?当然不是,首先能做的是调整分片分配器的类型,具体是在elasticsearch.yml中设置cluster.routing.allocation.type属性,共有两种分片器even_shard,balanced(默认)。even_shard是尽量保证每个节点都具有相同数量的分片,balanced是基于可控制的权重进行分配,相对于前一个分配器,它更暴漏了一些参数而引入调整分配过程的能力。

每次ES的分片调整都是在ES上的数据分布发生了变化的时候进行的,最有代表性的就是有新的数据节点加入了集群的时候。当然调整分片的时机并不是由某个阈值触发的,ES内置十一个裁决者来决定是否触发分片调整,这里暂不赘述。另外,这些分配部署策略都是可以在运行时更新的,更多配置分片的属性也请大家自行Google。

 

1.1 新建或修改模版

在kibana界面中直接执行以下命令,创建索引模版,

index_patterns: 新生成的索引以otosaas为开头都会自动匹配该模版

number_of_shards: 索引分片为1,副本默认也是1

order:优先级,数字越高等级越高

PUT /_template/template_otosaas_default
{
  "index_patterns": ["otosaas*"],
  "order" : 0,
  "settings": {
    "number_of_shards": 1
  }
}

1.2 删除索引模版

DELETE /_template/template_1

1.3 查询模版

支持模糊查询

GET /_template/template_1

 

索引模版还有很多功能,比如,可设置具体字段的类型等,mappings中设置,两种请求方式见下面

PUT /_template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_doc": {
      "_source": {
        "enabled": false
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z YYYY"
        }
      }
    }
  }
}
curl -X PUT "localhost:9200/_template/template_1" -H 'Content-Type: application/json' -d'
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_doc": {
      "_source": {
        "enabled": false
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z YYYY"
        }
      }
    }
  }
}
'

2、预设置索引,设置分片和副本

比如今天是5月16号,先建好5月17号的索引

PUT /otosaas_qlllog-2019.05.17
{
    "settings": {
        "number_of_shards" :   1,
        "number_of_replicas" : 1
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值