一、关于elasticsearch的基本概念

  每一个运行实例称为一个节点,每一个运行实例既可以在同一机器上,也可以在不同的机器上。
  所谓运行实例,就是一个服务器进程,在测试环境中可以在一台服务器上运行多个服务器进程,在生产环境中建议每台服务器运行一个服务器进程。

routing
  路由,当存储一个文档的时候,他会存储在一个唯一的主分片中,具体哪个分片是通过散列值的进行选择。默认情况下,这个值是由文档的id生成。如果文档有一个指定的父文档,从父文档ID中生成,该值可以在存储文档的时候进行修改。

index
  Elasticsearch里的索引概念是名词而不是动词,在elasticsearch里它支持多个索引。 一个索引就是一个拥有相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来 标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,你能够创建任意多个索引。

type
  代表类型,在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组相同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台 并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。

document
  一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档、某一个产品的一个文档、某个订单的一个文档。文档以JSON格式来表示,而JSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,你可以存储任意多的文档。注意,一个文档物理上存在于一个索引之中,但文档必须被索引/赋予一个索引的type。

shards
  代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

primary shard
  主分片,每个文档都存储在一个分片中,当你存储一个文档的时候,系统会首先存储在主分片中,然后会复制到不同的副本中。默认情况下,一个索引有5个主分片。你可以在事先制定分片的数量,当分片一旦建立,分片的数量则不能修改。

replica shard
  副本分片,每一个分片有零个或多个副本。副本主要是主分片的复制,其中有两个目的:
    1、增加高可用性:当主分片失败的时候,可以从副本分片中选择一个作为主分片。
    2、提高性能:当查询的时候可以到主分片或者副本分片中进行查询。默认情况下,一个主分配有一个副本,但副本的数量可以在后面动态的配置增加。副本必须部署在不同的节点上,不能部署在和主分片相同的节点上。

template
  
索引可使用预定义的模板进行创建,这个模板称作Index templates。模板设置包括settings和mappings。

mapping
  映射像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型,以及一个索引范围内的设置。一个映射可以事先被定义,或者在第一次存储文档的时候自动识别。

field
  一个文档中包含零个或者多个字段,字段可以是一个简单的值(例如字符串、整数、日期),也可以是一个数组或对象的嵌套结构。字段类似于关系数据库中的表中的列。每个字段都对应一个字段类型,例如整数、字符串、对象等。字段还可以指定如何分析该字段的值。

source field
  默认情况下,你的原文档将被存储在_source这个字段中,当你查询的时候也是返回这个字段。这允许您可以从搜索结果中访问原始的对象,这个对象返回一个精确的json字符串,这个对象不显示索引分析后的其他任何数据。

id
  id是一个文件的唯一标识,如果在存库的时候没有提供id,系统会自动生成一个id,文档的index/type/id必须是唯一的。

recovery
  代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

River
  代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的,river这个功能将会在后面的文件中重点说到。

gateway
  代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

discovery.zen
  代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

Transport
  代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。

二、elasticsearch 的配置文件详细配置讲解

elasticsearch的配置文件是在elasticsearch目录下的config文件下的elasticsearch.yml,同时它的日志文件在elasticsearch目录下的logs,由于elasticsearch的日志也是使用log4j来写日志的,所以其配置模式与log4j基本相同。所以主要详述

elasticsearch.yml中的内容,当然也可以查看官方文档。

Cluster部分

cluster.name: elasticsearch (默认值:elasticsearch)
cluster.name可以确定你的集群名称,当你的elasticsearch集群在同一个网段中elasticsearch会自动的找到具有相同cluster.name 的elasticsearch服务。所以当同一个网段具有多个elasticsearch集群时cluster.name就成为同一个集群的标识。

Node部分

node.name: “Franz Kafka”  节点名,可自动生成也可手动配置。
node.master: true (默认值:true)  允许一个节点是否可以成为一个master节点,es是默认集群中的第一台机器为master,如果这台机器停止就会重新选举master。
node.client  当该值设置为true时,node.master值自动设置为false,不参加master选举。
node.data: true (默认值:true)  允许该节点存储数据。
node.rack  无默认值,为节点添加自定义属性。
node.max_local_storage_nodes: 1 (默认值:1) 设置能运行的节点数目,一般采用默认的1即可,因为我们一般也只在一台机子上部署一个节点。

配置文件中给出了三种配置高性能集群拓扑结构的模式,如下:
  1、workhorse:如果你想让节点从不选举为主节点,只用来存储数据,可作为负载器
    node.master: false
    node.data: true
  2. coordinator:如果想让节点成为主节点,且不存储任何数据,并保有空闲资源,可作为协调器 
    node.master: true
    node.data: false
  3. search load balancer:( fetching data from nodes, aggregating results, etc.理解为搜索的负载均衡节点,从其他的节点收集数据或聚集后的结果等),客户端节点可以直接将请求发到数据存在的节点,而不用查询所有的数据节点,另外可以在它的上面可以进行数据的汇总工作,可以减轻数据节点的压力。
    node.master: false
    node.data: false
另外配置文件提到了几种监控es集群的API或方法:
  Cluster Health API:http://127.0.0.1:9200/_cluster/health
  Node Info API:http://127.0.0.1:9200/_nodes
还有图形化工具:
  https://www.elastic.co/products/marvel
  https://github.com/karmi/elasticsearch-paramedic
  https://github.com/hlstudio/bigdesk
  https://github.com/mobz/elasticsearch-head

Indices部分

index.number_of_shards: 5 (默认值为5)    设置默认索引分片个数。
index.number_of_replicas: 1(默认值为1)    设置索引的副本个数

服务器够多,可以将分片提高,尽量将数据平均分布到集群中,增加副本数量可以有效的提高搜索性能。
需要注意的是,"number_of_shards" 是索引创建后一次生成的,后续不可更改设置 "number_of_replicas" 是可以通过update-index-settings API实时修改设置。

Indices Circuit Breaker
  elasticsearch包含多个circuit breaker来避免操作的内存溢出。每个breaker都指定可以使用内存的限制。另外有一个父级breaker指定所有的breaker可以使用的总内存。

indices.breaker.total.limit  所有breaker使用的内存值,默认值为 JVM 堆内存的70%,当内存达到最高值时会触发内存回收。

Field data circuit breaker 允许elasticsearch预算待加载field的内存,防止field数据加载引发异常。

indices.breaker.fielddata.limit  field数据使用内存限制,默认为JVM 堆的60%。
indices.breaker.fielddata.overhead  elasticsearch使用这个常数乘以所有fielddata的实际值作field的估算值。默认为 1.03。

请求断路器(Request circuit breaker) 允许elasticsearch防止每个请求的数据结构超过了一定量的内存。

indices.breaker.request.limit     request数量使用内存限制,默认为JVM堆的40%。
indices.breaker.request.overhead   elasticsearch使用这个常数乘以所有request占用内存的实际值作为最后的估算值。默认为 1。

Indices Fielddata cache

  字段数据缓存主要用于排序字段和计算聚合。将所有的字段值加载到内存中,以便提供基于文档快速访问这些值。

indices.fielddata.cache.size:unbounded
设置字段数据缓存的最大值,值可以设置为节点堆空间的百分比,例:30%,可以值绝对值,例:12g。默认为无限。
该设置是静态设置,必须配置到集群的每个节点。

Indices Node query cache
  query cache负责缓存查询结果,每个节点都有一个查询缓存共享给所有的分片。缓存实现一个LRU驱逐策略:当缓存使用已满,最近最少使用的数据将被删除,来缓存新的数据。query cache只缓存过滤过的上下文。

indices.queries.cache.size
查询请求缓存大小,默认为10%。也可以写为绝对值,例:512m。
该设置是静态设置,必须配置到集群的每个数据节点。

Indexing Buffer
  索引缓冲区用于存储新索引的文档。缓冲区写满,缓冲区的文件才会写到硬盘。缓冲区划分给节点上的所有分片。
  Indexing Buffer的配置是静态配置,必须配置都集群中的所有数据节点。

indices.memory.index_buffer_size允许配置百分比和字节大小的值。默认10%,节点总内存堆的10%用作索引缓冲区大小。
indices.memory.min_index_buffer_size如果index_buffer_size被设置为一个百分比,这个设置可以指定一个最小值。默认为 48mb。
indices.memory.max_index_buffer_size如果index_buffer_size被设置为一个百分比,这个设置可以指定一个最小值。默认为无限。
indices.memory.min_shard_index_buffer_size设置每个分片的最小索引缓冲区大小。默认为4mb。

Indices Shard request cache

当一个搜索请求是对一个索引或者多个索引的时候,每一个分片都是进行它自己内容的搜索然后把结果返回到协调节点,然后把这些结果合并到一起统一对外提供。分片缓存模块缓存了这个分片的搜索结果。这使得搜索频率高的请求会立即返回。
  注意:请求缓存只缓存查询条件 size=0的搜索,缓存的内容有hits.total, aggregations, suggestions,不缓存原始的hits。通过now查询的结果将不缓存。
  缓存失效:只有在分片的数据实际上发生了变化的时候刷新分片缓存才会失效。刷新的时间间隔越长,缓存的数据越多,当缓存不够的时候,最少使用的数据将被删除。
  缓存过期可以手工设置,例如:

curl -XPOST 'localhost:9200/kimchy,elasticsearch/_cache/clear?request_cache=true'

默认情况下缓存未启用,但在创建新的索引时可启用,例如:

curl -XPUT localhost:9200/my_index -d'
{
  "settings": {
    "index.requests.cache.enable": true
  }

'

当然也可以通过动态参数配置来进行设置:

curl -XPUT localhost:9200/my_index/_settings -d'
{ "index.requests.cache.enable": true }
'

每请求启用缓存,查询字符串参数request_cache可用于启用或禁用每个请求的缓存。例如:

curl 'localhost:9200/my_index/_search?request_cache=true' -d'
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "colors"
      }
    }
  }
}
'

注意:如果你的查询使用了一个脚本,其结果是不确定的(例如,它使用一个随机函数或引用当前时间)应该设置 request_cache=false 禁用请求缓存。

缓存key,数据的缓存是整个JSON,这意味着如果JSON发生了变化 ,例如如果输出的顺序顺序不同,缓存的内容江将会不同。不过大多数JSON库对JSON键的顺序是固定的。

分片请求缓存是在节点级别进行管理的,并有一个默认的值是JVM堆内存大小的1%,可以通过配置文件进行修改。 例如: indices.requests.cache.size: 2% 
分片缓存大小的查看方式:

curl 'localhost:9200/_stats/request_cache?pretty&human'
curl 'localhost:9200/_nodes/stats/indices/request_cache?pretty&human'

Indices Recovery

indices.recovery.concurrent_streams  限制从其它分片恢复数据时最大同时打开并发流的个数。默认为 3。
indices.recovery.concurrent_small_file_streams  从其他的分片恢复时打开每个节点的小文件(小于5M)流的数目。默认为 2。
indices.recovery.file_chunk_size  默认为 512kb。
indices.recovery.translog_ops  默认为 1000。
indices.recovery.translog_size  默认为 512kb。
indices.recovery.compress  恢复分片时,是否启用压缩。默认为 true。
indices.recovery.max_bytes_per_sec  限制从其它分片恢复数据时每秒的最大传输速度。默认为 40mb。

Indices TTL interval

indices.ttl.interval 允许设置多久过期的文件会被自动删除。默认值是60s。
indices.ttl.bulk_size 设置批量删除请求的数量。默认值为1000。

Paths部分

path.conf: /path/to/conf  配置文件存储位置。
path.data: /path/to/data  数据存储位置,索引数据可以有多个路径,使用逗号隔开。
path.work: /path/to/work  临时文件的路径 。
path.logs: /path/to/logs  日志文件的路径 。
path.plugins: /path/to/plugins  插件安装路径 。

Memory部分

bootstrap.mlockall: true(默认为false)
锁住内存,当JVM进行内存转换的时候,es的性能会降低,所以可以使用这个属性锁住内存。同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令,或者在/etc/sysconfig/elasticsearch文件中取消 MAX_LOCKED_MEMORY=unlimited 的注释即可。
如果使用该配置则ES_HEAP_SIZE必须设置,设置为当前可用内存的50%,最大不能超过31G,默认配置最小为256M,最大为1G。

可以通过请求查看mlockall的值是否设定:

curl http://localhost:9200/_nodes/process?pretty

如果mlockall的值是false,则设置失败。可能是由于elasticsearch的临时目录(/tmp)挂载的时候没有可执行权限。
可以使用下面的命令来更改临时目录:

./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir

Network 、Transport and HTTP

network.bind_host设置绑定的ip地址,可以是ipv4或ipv6的。
network.publish_host设置其它节点和该节点交互的ip地址,如果不设置它会自动设置,值必须是个真实的ip地址。
network.host同时设置bind_host和publish_host两个参数,值可以为网卡接口、127.0.0.1、私有地址以及公有地址。
http_port接收http请求的绑定端口。可以为一个值或端口范围,如果是一个端口范围,节点将绑定到第一个可用端口。默认为:9200-9300。
transport.tcp.port节点通信的绑定端口。可以为一个值或端口范围,如果是一个端口范围,节点将绑定到第一个可用端口。默认为:9300-9400。
transport.tcp.connect_timeout套接字连接超时设置,默认为 30s。
transport.tcp.compress设置为true启用节点之间传输的压缩(LZF),默认为false。
transport.ping_schedule定时发送ping消息保持连接,默认transport客户端为5s,其他为-1(禁用)。
httpd.enabled是否使用http协议提供服务。默认为:true(开启)。
http.max_content_length最大http请求内容。默认为100MB。如果设置超过100MB,将会被MAX_VALUE重置为100MB。
http.max_initial_line_lengthhttp的url的最大长度。默认为:4kb。
http.max_header_sizehttp中header的最大值。默认为8kb。
http.compression支持压缩(Accept-Encoding)。默认为:false。
http.compression_level定义压缩等级。默认为:6。
http.cors.enabled启用或禁用跨域资源共享。默认为:false。
http.cors.allow-origin启用跨域资源共享后,默认没有源站被允许。在//中填写域名支持正则,例如 /https?:\/\/localhost(:[0-9]+)?/。 * 是有效的值,但是开放任何域名的跨域请求被认为是有安全风险的elasticsearch实例。http.cors.max-age浏览器发送‘preflight’OPTIONS-request 来确定CORS设置。max-age 定义缓存的时间。默认为:1728000 (20天)。
http.cors.allow-methods允许的http方法。默认为OPTIONS、HEAD、GET、POST、PUT、DELETE。
http.cors.allow-headers允许的header。默认 X-Requested-With, Content-Type, Content-Length。
http.cors.allow-credentials是否允许返回Access-Control-Allow-Credentials头部。默认为:false。
http.detailed_errors.enabled启用或禁用输出详细的错误信息和堆栈跟踪响应输出。默认为:true。
http.pipelining启用或禁用http管线化。默认为:true。
http.pipelining.max_events一个http连接关闭之前最大内存中的时间队列。默认为:10000。

Discovery

discovery.zen.minimum_master_nodes: 3预防脑裂(split brain)通过配置大多数节点(总节点数/2+1)。默认为3。
discovery.zen.ping.multicast.enabled: false设置是否打开组播发现节点。默认false。
discovery.zen.ping.unicast.host单播发现所使用的主机列表,可以设置一个属组,或者以逗号分隔。每个值格式为 host:port 或 host(端口默认为:9300)。默认为 127.0.0.1,[::1]。
discovery.zen.ping.timeout: 3s设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。
discovery.zen.join_timeout节点加入到集群中后,发送请求到master的超时时间,默认值为ping.timeout的20倍。
discovery.zen.master_election.filter_client:true当值为true时,所有客户端节点(node.client:true或node.date,node.master值都为false)将不参加master选举。默认值为:true。
discovery.zen.master_election.filter_data:false当值为true时,不合格的master节点(node.data:true和node.master:false)将不参加选举。默认值为:false。
discovery.zen.fd.ping_interval发送ping监测的时间间隔。默认为:1s。
discovery.zen.fd.ping_timeoutping的响应超时时间。默认为30s。
discovery.zen.fd.ping_retriesping监测失败、超时的次数后,节点连接失败。默认为3。
discovery.zen.publish_timeout通过集群api动态更新设置的超时时间,默认为30s。
discovery.zen.no_master_block设置无master时,哪些操作将被拒绝。all 所有节点的读、写操作都将被拒绝。write 写操作将被拒绝,可以读取最后已知的集群配置。默认为:write。

Gateway

gateway.expected_nodes: 0设置这个集群中节点的数量,默认为0,一旦这N个节点启动,就会立即进行数据恢复。
gateway.expected_master_nodes设置这个集群中主节点的数量,默认为0,一旦这N个节点启动,就会立即进行数据恢复。
gateway.expected_data_nodes设置这个集群中数据节点的数量,默认为0,一旦这N个节点启动,就会立即进行数据恢复。
gateway.recover_after_time: 5m设置初始化数据恢复进程的超时时间,默认是5分钟。
gateway.recover_after_nodes设置集群中N个节点启动时进行数据恢复。
gateway.recover_after_master_nodes设置集群中N个主节点启动时进行数据恢复。
gateway.recover_after_data_nodes设置集群中N个数据节点启动时进行数据恢复。

elasticsearch常用配置相关推荐

  1. Elasticsearch常用配置及性能参数

    Elasticsearch常用配置及性能参数 cluster.name: estest   集群名称 node.name: "testanya"  节点名称 node.master ...

  2. Elasticsearch 常用配置参数总结

    Elasticsearch 重要参数配置 通过阅读官方文档了解到其中重要参数的配置及其说,下面将逐步进行了解. 一. ElasticSearch参数配置 1. data和logs路径配置 如果使用.z ...

  3. elasticsearch 基本配置

    基本配置 elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml .logging.yml.jvm.options 第一个是es的基本配置文件,第二个是日 ...

  4. Java集成ElasticSearch及配置类工具类整理

    Java集成ElasticSearch及配置类工具类整理 前言:做一个有梦想的程序猿! ES不同的版本API差异比较大,此处ES版本为:6.5.3 代码如下: 添加Maven依赖 <!-- ES ...

  5. Elasticsearch-32.生产环境常用配置与上线清单 he 集群写性能优化 he 集群读性能优化

    Elasticsearch 生产环境常用配置和上线清单 Development vs.Production Mode 从ES 5开始,支持Development 和Production 两种运行模式 ...

  6. Elasticsearch 安装配置及学习

    何为全文搜索? 全文搜索本质:非结构化数据转成结构化数据,提取非结构化数据 全文搜索是一种将文件中所有文件与搜索项匹配的文字资料检索方法 原理:建立本库 ---> 建立索引 ---> 执行 ...

  7. 常用配置及命令V1.0

    常用配置及命令V1.0 常用配置及命令V1.0 docker 安装ElasticSearch|Kibana Oracle命令 docker 安装nacos redis中的常用命令 nginx常用命令 ...

  8. Spring Boot 2.0 常用配置描述(官网翻译)

    常用配置描述 我们可以在application.properties文件中,application.yml文件中或命令行开关中指定各种属性. 本附录提供了常用Spring Boot属性的列表以及对使用 ...

  9. IntelliJ IDEA 最常用配置,应用、永久激活

    包含 1.最常用配置 2.应用 3.永久激活 刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工. 比如:设置文件字体大小,代码自动完成提示,版本管理,本 ...

最新文章

  1. 【TCP/IP协议 卷一:协议】第三章 IP:网际协议
  2. python爬虫下载文件-【Py大法系列--03】Python如何自动下载文件
  3. 无线WEP网络***
  4. 200815-C指针高级和链表
  5. android显示绘图动画,Android自定义View绘图实现渐隐动画
  6. PYPL 7 月榜单公布:Java 份额出现下降趋势
  7. 行存储索引改换成列存储索引_列存储索引增强功能–数据压缩,估计和节省
  8. 华为lab-rs-v1-2.3_OSPF基础
  9. 解决手机端上的iframe无法触摸滚动
  10. Rust : CSV库的用法
  11. 微pe工具箱是微软的吗_电脑装系统用一键装机好用还是微PE工具箱好用
  12. 卷积码树状图怎么画_卷积码状态图怎么画 卷积编码器状态图画法
  13. pythonweb简历_python简历-(网络版)
  14. 交换两个数组的内容555555555
  15. WD蓝盘绿盘黑盘红盘的区别
  16. 使用OneNote多人分布式共享
  17. 【Linux】共享内存
  18. Load balancer does not have available server for client问题
  19. C语言写mempocy
  20. 【CEC2017】CEC2017优化算法目标测试函数综述以及CEC2017的matlab实现

热门文章

  1. 从“挂科大王”到网络安全布道者,云舒的那些“面壁”时刻
  2. 三种主流快平台技术测评,你更青睐谁?
  3. 对标鸿蒙 OS,Google 下一代操作系统 Fuchsia 源码公开!
  4. 在英雄联盟地图中寻找“数据结构的大门”
  5. 蚂蚁集团回应与腾讯微信支付竞争;华为余承东:鸿蒙现达到安卓70-80%水平;C++20 标准草案获批准| 极客头条
  6. 仅需 5 步,用 JavaScript 直接通过前端发送电子邮件
  7. ​​​​​​​微信、Facebook牵手合作,抗击全球新冠肺炎疫情
  8. 抖音回应视频泄露:草稿不会上传后台;苹果开卖5000元印度版iPhone XR;Jboot 2.2.5发布|极客头条...
  9. 开源,才是科技巨头的最佳实践!| 技术头条
  10. “边缘计算将吞掉云计算!”