ES2:ElasticSearch 集群配置

ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 是全局配置文件,用于在服务器级别对ElasticSearch进行配置。ElasticSearch的配置选项分为静态设置和动态设置两种,静态设置必须在结点级别(node-level)设置,或配置在elasticsearch.yml配置文件中,或配置在环境变量中,或配置在命令行中,在结点启动之后,静态设置不能修改。集群的名字和结点的名称:cluster.name 和 node.name,这两个配置项是静态配置项,不能在集群运行时修改,而动态配置项可以在集群运行时通过RESTful API进行修改。

一,配置集群的标识(cluster.name)

通过 cluster.name 属性配置集群的名字,用于唯一标识一个集群,集群名字相同的所有节点自动组成一个集群。如果不配置改属性,默认值是:elasticsearch。当启动一个结点时,该结点会自动寻找相同集群名字的主结点;如果找到主结点,该结点加入集群中;如果未找到主结点,该结点成为主结点。

配置集群的名字为myescluster

cluster.name:myescluster

二,结点的配置

ElasticSearch集群中,共有五种结点类型:主结点(Master),候选主结点(Master-eligible),数据结点(Data),吸收结点(Ingest)和部落结点(Tribe)。在一个集群中,主结点只有一个,负责管理集群,执行集群级别的操作,比如创建或删除索引,跟踪集群的组成结点的状态,决定将分片分配的目标结点,对集群来说,一个稳定的主结点十分重要。集群会自动进行健康检测,当主结点出现故障时,集群中的候选主结点进行选举,在选举结束之后,一个候选主结点被选举成为新的主结点,实现集群故障的自动转移。候选主结点具有投票权,其他结点没有投票权。

1,配置候选主结点和数据结点

默认情况下,ElasticSearch将当前节点配置为同时作为候选主结点和数据结点:

node.data:true 配置该结点是数据结点,用于保存数据,执行数据相关的操作(CRUD,Aggregation);

node.master:true 配置该结点有资格被选举为主结点(候选主结点),用于处理请求和管理集群。如果结点没有资格成为主结点,那么该结点永远不可能成为主结点;如果结点有资格成为主结点,只有在被其他候选主结点认可和被选举为主结点之后,才真正成为主结点。

配置当前结点只保存数据:

node.master:false
node.data:true

配置当前结点不保存数据,只做候选主结点:

node.master:false
node.data:true

2,主结点选取的配置

discovery.zen.minimum_master_nodes 属性:默认值是1,该属性定义的是为了组成一个集群,相互连接的候选主结点的最小数目,强烈推荐该属性的设置使用多数原则:(master_eligible_nodes / 2) + 1,既能避免出现脑裂(split-brain),又能在故障发生后,快速选举出新的主结点,例如,有5个候选主结点,推荐把该属性设置为3。

3,结点的路径(Path)

默认情况下,ElasticSearch使用基于安装目录的相对路径来配置结点的路径,在安装目录下,有config,data,logs和plugins目录,一般情况下不需要单独配置。结点的路径配置项:

  • path.config 设置ElasticSearch的配置文件保存的目录;
  • path.data 设置ElasticSearch结点的索引数据保存的目录,多个数据文件使用逗号隔开,例如,path.data: /path/to/data1,/path/to/data2;
  • path.logs 设置ElasticSearch结点的日志文件保存的目录;
  • path.plugins  设置ElasticSearch插件安装的目录;
  • path.work 设置ElasticSearch的临时文件保存的目录;

三,索引配置

1,配置索引的分片(shard)和副本(replica)数量

默认的配置是把索引分为5个分片,每个分片1个副本,共10个结点:

index.number_of_shards: 5
index.number_of_replicas: 1

禁用索引的分布式特性,使索引只创建在本地主机上:

index.number_of_shards: 1
index.number_of_replicas: 0

2,当前节点锁住内存

当JVM做分页切换(swapping)时,ElasticSearch执行的效率会降低,推荐把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的物理内存分配给ES,同时允许ElasticSearch进程锁住内存:

bootstrap.mlockall: true

3,断路器(Circuit Breaker)控制内存的使用量

断路器用于阻止产生OutOfMemoryError的操作,每一个断路器设置一个内存使用的上限,一旦操作达到该上限,ElasticSearch将阻止该操作继续使用内存。设置较多,一般不需要修改,保持默认值:

  • indices.breaker.total.limit: defaults to 70% of JVM heap
  • indices.breaker.fielddata.limit: defaults to 60% of JVM heap
  • indices.breaker.fielddata.overhead: defaults to 1.03
  • indices.breaker.request.limit: defaults to 60% of JVM heap
  • indices.breaker.request.overhead: defaults to 1
  • network.breaker.inflight_requests.limit: defaults to 100% of JVM heap
  • network.breaker.inflight_requests.overhead: defaults to 1
  • script.max_compilations_per_minute: defaults to 15

4,字段数据缓存:

  • indices.fielddata.cache.size,默认值是无限大(unbounded)

在对一个字段执行排序或聚合操作时,使用字段数据缓存(field data cache)将该字段的值加载到内存,以加快查询的速度。加载字段数据还原是IO密集的操作,推荐分配足够的内存。

5,结点查询缓存:

  • index.queries.cache.enabled,默认值是true;
  • indices.queries.cache.size,默认值是10%;

查询缓存用于缓存查询的结果,每一个节点都有一个查询缓存,缓存过期使用LRU淘汰策略(Least Recently Used eviction):当缓存满时,最近最少使用的数据被淘汰,从缓存中清除,以存储新的数据。

6,索引缓存:

  • indices.memory.index_buffer_size,默认值是10%;
  • indices.memory.min_index_buffer_size,当indices.memory.index_buffer_size指定为百分比时,使用该选项配置绝对值,默认值是48MB;
  • indices.memory.max_index_buffer_size,当indices.memory.index_buffer_size指定为百分比时,使用该选项配置绝对值,默认值是无限大;

索引缓存用于存储最新的索引文档(newly indexed documents),当该缓存填充满时,缓存的文件将被写入到磁盘中的段(segment)中。

7,分片请求缓存:

  • index.requests.cache.enable:默认值是true
  • indices.requests.cache.size: 默认值是1%

当对一个索引执行查找请求(Search Request)时,每一个相关的分片(involved shard)都在本地执行查询,返回查询结果(local result)给协调结点(coordinating node)进行组合(combine),将各个分片的结果合并为最终的结果集返回。分片请求缓存对每个分片的查询结果进行缓存。

四,集群的网络配置

1,结点的IP地址配置

配置当前结点绑定的IP地址,默认为0.0.0.0

network.bind_host: 192.168.0.1

设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址

network.publish_host: 192.168.0.1

同时设置bind_host和publish_host两个参数

network.host: 192.168.0.1

2,设置结点间交互的TCP端口,默认是9300

transport.tcp.port: 9300

3,设置对外服务的HTTP端口,默认为9200

http.port: 9200

4,设置是否压缩TCP传输时的数据,默认为false,不压缩

transport.tcp.compress: true

5,设置HTTP包内容的最大容量,默认100mb

http.max_content_length: 100mb

6,是否启用HTTP协议对外提供服务,默认为true,开启

http.enabled: true

五,集群的发现机制(Discovery)

ElasticSearch使用zen发现来寻找结点和选举主结点,组建集群。

1,配置多播(multicast)

多播(multicast)是zen发现的默认方法,主要有以下配置选项:

  • discovery.zen.ping.multicast.group:用于多播请求的群组地址,默认值是224.2.2.4;
  • discovery.zen.ping.multicast.port:设置多播通信的端口,默认值是54328;
  • discovery.zen.ping.multicast.ttl;设置多播请求被认为有效的时间,默认值是3s;
  • discovery.zen.ping.multicast.address:设置ElasticSearch绑定的网络接口,默认为null,意味着ElasticSearch尝试绑定所有网络接口;
  • discovery.zen.ping.multicast.enable:启用或禁用多播;

2,配置单播(unicast)

使用单播时,总是禁用多播,单播的配置选项:

discovery.zen.ping.unicast. hosts:指定接收单播请求的主机IP地址,推荐包含组成集群的所有主机,主机之间用逗号隔开;

discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]

3,结点之间的状态检测

ping是结点之间发送的心跳信号,用于检测其他结点是否健康运行,如果其他结点无法响应该信号,那么集群认为该结点发生故障,配置ping信号的属性:

  • discovery.zen.fd.ping_interval:默认为1s,设置结点之间互相ping信号的时间间隔;
  • discovery.zen.fd.ping_timeout:默认为30s,设置当前结点发送ping信号后等待目标结点响应的时间,超过该时间,当前结点认为目标结点无法响应;
  • discovery.zen.fd.ping_retries:默认为3次,设置重试次数,超过此次数之后,判定目标结点出现故障,停止工作;
  • discovery.zen.ping.timeout: 默认值是3s,设置当前结点等待其他结点的ping信号的超时时间;

六,本地网关(Gateway)和还原(Recovery)

网关用于持久化存储集群的状态,相当于关系型DB的事务日志。每一次集群状态的改变,ElasticSearch都将集群的状态存储到网关中。当集群重新启动时,它将会从网关中读取集群的状态,还原到上一次停机时的状态。

1,网关的类型

目前只支持local,默认值是local,默认的网关在本地文件系统中存储index及其元数据。

gateway.type: local

2,还原控制

还原控制的选项有:

  • gateway.recover_after_nodes:3,表示当集群中有3个结点之后,允许执行还原进程;
  • gateway.recover_after_time:10m,表示当集群满足gateway.recover_after_nodes属性(集群中至少有3个结点)之后,ElasticSearch在10分钟之后开始执行还原进程;
  • gateway.expected_nodes:5,设置集群期望的结点数量,当集群中结点的数目等于5,并且满足gateway.recover_after_nodes属性(集群中至少有3个结点)时,ElasticSearch将立即执行还原进程;
  • 网关对数据结点和主结点的还原控制:
    • gateway.recover_after_master_nodes 和 gateway.expected_master_nodes
    • gateway.recover_after_data_nodes 和 gateway.expected_data_nodes

3,保护动作

默认情况下,ElasticSearch自动创建索引,推荐关闭该选项

action.disable_close_all_indices: true
action.disable_delete_all_indices: true
action.disable_shutdown: true
action.auto_create_index: false

4,还原限制(Recovery Throttling)

  • cluster.routing.allocation.node_initial_primaries_recoveries: 4,在初始化还原期间,控制单个结点中执行并行还原进程的数量;
  • cluster.routing.allocation.node_concurrent_recoveries: 2,在增加/移除结点,重平衡期间,控制单个结点中执行并行还原进程的数量;
  • indices.recovery.max_bytes_per_sec: 100mb,在还原时,吞吐量的上限,默认值是20MB;
  • indices.recovery.concurrent_streams: 5,在还原分片时,设置开启的并发流的上限;

七,ElasticSearch重要配置示例

## cluster
cluster.name: "my-es-cluster"

## node
node.name: "node-1"
node.master: true
node.data: true

## index
index.number_of_shards: 1
index.number_of_replicas: 0

## memory
bootstrap.mlockall: true

##network
network.host: 192.168.0.1
transport.tcp.port: 9300
http.port: 9200
http.max_content_length: 100mb
http.enabled: true

## Discovery
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.timeout: 3s
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]

## gateway
gateway.type: local
gateway.recover_after_nodes: 1
gateway.recover_after_time: 10m
gateway.expected_nodes: 2

## protection
action.disable_close_all_indices: true
action.disable_delete_all_indices: true
action.disable_shutdown: true
action.auto_create_index: false

## Recovery Throttling
cluster.routing.allocation.node_initial_primaries_recoveries: 4
cluster.routing.allocation.node_concurrent_recoveries: 2
indices.recovery.max_bytes_per_sec: 100mb
indices.recovery.concurrent_streams: 5

参考文档:

Elasticsearch 2.4 Reference

Node

Zen Discovery

Local Gateway

zsprackett/elasticsearch.yml

Important Elasticsearch configuration

ElasticSearch 配置文件译文解析

elasticsearch.yml配置文件

Elasticsearch 5.0新版本的特性与改进

时间: 2024-10-14 21:32:42

ES2:ElasticSearch 集群配置的相关文章

Linux下Elasticsearch集群配置

一.简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便. 二.集群安装 1.选择指定的版本下载 wget https://download.elastic.co/elasticsearch/release/org/elas

ElasticSearch集群配置

elasticsearch集群搭建,可以把索引进行分片存储,一个索引可以分成若干个片,分别存储到集群里面,而对于集群里面的负载均衡,副本分配,索引动态均衡(根据节点的增加或者减少)都是elasticsearch自己内部完成的,一有情况就会重新进行分配. 下面先是介绍几个关于elasticsearch的几个名词 1.cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的.es的一个概念就是去中心化,字面上理解就是无中心节点,

Elasticsearch集群配置以及REST API使用

ES安装与启动 在官网下载压缩包,解压后直接运行bin目录下的.bat文件即可.下载地址戳这里. ES配置集群 Elasticsearch配置集群很简单,只要配置一个集群的 名称 ,ES就会自动寻找并加入到其中. 并且会自动的进行分片.备份等等操作. 配置方式: 直接修改conf/elasticsearch.yml ES查询集群状态 使用ES的REST API可以做到下面的事情: 1 管理集群,节点,索引数据和元数据 2 执行创建,读取,更新和删除操作,以及根据索引查询 3 执行更深入的操作,比

分布式搜索Elasticsearch集群配置

  配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置.   所有的配置都可以使用环境变量,例如:node.rack: ${RACK_ENV_VAR}  表示环境变量中有一个RACK_ENV_VAR变量. 下面列举一下elasticsearch的可配置项: 1. 集群名称,默认为elasticsearch:cluster.name: elasticsearch 2. 节点名称,es启动时会自动创建节点名称,但你也可进

elasticsearch 集群配置

cluster.name: elasticsearch node.name: node-01 bootstrap.mlockall: true network.publish_host: 192.168.6.30 network.bind_host: 192.168.6.30 http.port: 9200 transport.tcp.port: 9300 discovery.zen.ping.unicast.hosts: ['192.168.6.30','192.168.6.83']

配置 Elasticsearch 集群

Elasticsearch 的安装非常简单,笔者在前文<单机部署 ELK>中已经介绍过了,本文主要介绍集群的配置,并解释常见配置参数的含义. 要配置集群,最简单的情况下,设置下面几个参数就可以了: cluster.name: es-cluster node.name: es-node-1 discovery.zen.ping.unicast.hosts: ["192.168.1.101","192.168.1.102"] discovery.zen.mi

ElasticSearch集群服务器配置

一.安装 简单的安装与启动于前文ElasticSearch初探(一)已有讲述,这里不再重复说明. 二.启动 1.自带脚本启动 1)bin/elasticsearch,不太任何参数,默认在前端启动 2)bin/elasticsearch-d,带参-d,表示在后台作为服务线程启动 还可以设置更多的参数:bin/elasticsearch-Xmx2g-Xms2g-Des.index.store.type=memory--node.name=my-node 注意:如果是在局域网中运行elasticsea

ELK5.3+Kafka集群配置

[一]资源准备 # 3台4C*8G, 安装Zookeeper.Kafka.Logstash--Broker(input: filebeat; output: Kafka) 10.101.2.23 10.101.2.24 10.101.2.25 # 2台4C*8G, 安装Logstash--Indexer(input: Kafaka; output: Elasticsearch) 10.101.2.26 10.101.2.27 # 3台8C*16G, 安装Elasticsearch 10.101.

(转)Elasticsearch集群的脑裂问题

转自 http://blog.csdn.net/cnweike/article/details/39083089 所谓脑裂问题(类似于精神分裂),就是同一个集群中的不同节点,对于集群的状态有了不一样的理解. 今天,Elasticsearch集群出现了查询极端缓慢的情况,通过以下命令查看集群状态: curl -XGET 'es-1:9200/_cluster/health' 发现,集群的总体状态是red,本来9个节点的集群,在结果中只显示了4个:但是,将请求发向不同的节点之后,我却发现即使是总体状