Elasticsearch集群的一些重要配置

配置高性能Elasticsearch集群的9个小贴士

  • 规划索引、分片 以及集群增长情况

  • 在配置前了解集群的拓扑结构
    通过独立的master节点和data节点来运行ES,为索引和搜索使用单独的ES client节点,这将减轻data节点的一些负载。

    Master node: node.master:true node.data:false
    
    Data node: node.master:false node.data:true
    
    Client node: node.master:false node.data:false
    
  • 内存设置

ES的mlockall属性允许ES节点不交换内存

```
bootstrap.mlockall: true
```
  • discovery.zen属性控制ElasticSearch的发现协议

从2.0开始往后服务发现就仅支持单播了,只需要找到集群中的一个节点就能将该节点加入集群

  • 当心Delete _all
    设置不允许删除索引时的模糊匹配
    action.destructive_requires_name: true

  • 使用doc_values(官方文档里面没看到过)

  • 集群配额类属性设置
    cluster.routing.allocation.cluster_concurrent_rebalance: 设置允许并发再平衡的分片数量。默认值是2,表示任意时刻只允许同时移动2个分片。最好将该属性设置得较小,以便压制分片再平衡,使其不影响索引。
    cluster.routing.allocation.disk.threshold_enabled: 默认值true。表示在分配分片到一个节点时将会把可用的磁盘空间算入配额内。

  • Recovery属性允许快速重启(这个配置比较复杂)

  • 线程池属性防止数据丢失(这个可以以后再研究)

发现策略

  • 主要的API(索引、删除、搜索)不需要和主节点通信,主节点的任务是维护整个集群的状态,如果节点加入或者离开集群,主节点也要重新分配分片。集群状态改变,新状态也会被其他节点获知(具体的方式通过实际的发现机制)

zen 方式发现

  • 单播发现,由其他的一些模块集成,例如,节点间所有的通信使用tansport模块。
  • zen discovery分成了几个子模块
    • ping: 节点通过这个过程找到其他节点
    • unicast:
    discovery.zen.ping.unicast.hosts
    discovery.zen.ping.unicast.hosts.resolve_timeout
    

主节点竞选

在ping过程中,一个主节点会被自动地选举或者加入。discovery.zen.ping_timeout设置时长,默认3sdiscovery.zen.join_timeout,节点加入时发送给主节点的request时长,默认是3s*20

在竞选主节点时,discovery.zen.master_election.ignore_non_master_pings值为true时,data node 或者client node 发送的ping将被忽略,默认值为false

discovery.zen.minimum_master_nodes设置为master_eligible_nodes / 2) + 1。最好不要设置master_eligible_nodes(node.master: true)的个数为2,因为此时discovery.zen.minimum_master_nodes的值为2,任意一个主节点丢失将会造成集群不可用。

故障检测

  • 主节点ping其他节点,看他们是否存活
  • 每一个节点ping主节点,报告它还存活或者需要竞选主节点
discovery.zen.fd.ping_interval: 节点被ping的时间间隔,1s
discovery.zen.fd.ping_timeout: 等待ping response的时间,默认30s
discovery.zen.fd.ping_retries: timeout/fail 重ping的次数, 默认3

你可能感兴趣的:(Elasticsearch集群的一些重要配置)