elasticsearch.ymal配置文件說明

上邊已經對我配置es集羣設置的參數有了簡單的說明,但是其實還有許多參數沒有設置和說明

修改配置 /etc/elasticsearch/elasticsearch.yml 以下對相關字段以註釋方式進行解析.

##################### Elasticsearch Configuration Example #####################
# 我只是挑些重要的配置選項進行註釋,其實自帶的已經有非常細緻的英文註釋了.有理解偏差的地方請以英文原版解釋爲準.

################################### Cluster ###################################

# 代表一個集羣,集羣中有多個節點,其中有一個爲主節點,這個主節點是可以通過選舉產生的,主從節點是對於集羣內部來說的.
# es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於集羣外部來說的,因爲從外部來看es集羣,在邏輯上是個整體,你與任何一個節點的通信和與整個es集羣通信是等價的。
# cluster.name可以確定你的集羣名稱,當你的elasticsearch集羣在同一個網段中elasticsearch會自動的找到具有相同cluster.name的elasticsearch服務.
# 所以當同一個網段具有多個elasticsearch集羣時cluster.name就成爲同一個集羣的標識.

#cluster.name: elasticsearch

#################################### Node #####################################

# 節點名稱同理,可自動生成也可手動配置.
#node.name: "Franz Kafka"

# 允許一個節點是否可以成爲一個master節點,es是默認集羣中的第一臺機器爲master,如果這臺機器停止就會重新選舉master.
#node.master: true

# 允許該節點存儲數據(默認開啓)
#node.data: true

# 配置文件中給出了三種配置高性能集羣拓撲結構的模式,如下:
# 1. 如果你想讓節點從不選舉爲主節點,只用來存儲數據,可作爲負載器
# node.master: false
# node.data: true
#
# 2. 如果想讓節點成爲主節點,且不存儲任何數據,並保有空閒資源,可作爲協調器
# node.master: true
# node.data: false
#
# 3. 如果想讓節點既不稱爲主節點,又不成爲數據節點,那麼可將他作爲搜索器,從節點中獲取數據,生成搜索結果等
# node.master: false
# node.data: false

# 監控集羣狀態有一下插件和API可以使用:
# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
# Node Info API [http://localhost:9200/_nodes] or GUI tools
# such as <http://www.elasticsearch.org/overview/marvel/>,
# <http://github.com/karmi/elasticsearch-paramedic>,
# <http://github.com/lukas-vlcek/bigdesk> and
# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.

# A node can have generic attributes associated with it, which can later be used
# for customized shard allocation filtering, or allocation awareness. An attribute
# is a simple key value pair, similar to node.key: value, here is an example:
#
#node.rack: rack314

# By default, multiple nodes are allowed to start from the same installation location
# to disable it, set the following:
#node.max_local_storage_nodes: 1

#################################### Index ####################################

# 設置索引的分片數,默認爲5
#index.number_of_shards: 5

# 設置索引的副本數,默認爲1:
#index.number_of_replicas: 1

# 配置文件中提到的最佳實踐是,如果服務器夠多,可以將分片提高,儘量將數據平均分佈到大集羣中去
# 同時,如果增加副本數量可以有效的提高搜索性能
# 需要注意的是,"number_of_shards" 是索引創建後一次生成的,後續不可更改設置
# "number_of_replicas" 是可以通過API去實時修改設置的

#################################### Paths ####################################

# 配置文件存儲位置
#path.conf: /path/to/conf

# 數據存儲位置(單個目錄設置)
#path.data: /path/to/data
# 多個數據存儲位置,有利於性能提升
#path.data: /path/to/data1,/path/to/data2

# 臨時文件的路徑
#path.work: /path/to/work

# 日誌文件的路徑
#path.logs: /path/to/logs

# 插件安裝路徑
#path.plugins: /path/to/plugins

#################################### Plugin ###################################

# 設置插件作爲啓動條件,如果一下插件沒有安裝,則該節點服務不會啓動
#plugin.mandatory: mapper-attachments,lang-groovy

################################### Memory ####################################

# 當JVM開始寫入交換空間時(swapping)ElasticSearch性能會低下,你應該保證它不會寫入交換空間
# 設置這個屬性爲true來鎖定內存,同時也要允許elasticsearch的進程可以鎖住內存,linux下可以通過 `ulimit -l unlimited` 命令
#bootstrap.mlockall: true

# 確保 ES_MIN_MEM 和 ES_MAX_MEM 環境變量設置爲相同的值,以及機器有足夠的內存分配給Elasticsearch
# 注意:內存也不是越大越好,一般64位機器,最大分配內存別才超過32G

############################## Network And HTTP ###############################

# 設置綁定的ip地址,可以是ipv4或ipv6的,默認爲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

# 設置節點間交互的tcp端口,默認是9300
#transport.tcp.port: 9300

# 設置是否壓縮tcp傳輸時的數據,默認爲false,不壓縮
#transport.tcp.compress: true

# 設置對外服務的http端口,默認爲9200
#http.port: 9200

# 設置請求內容的最大容量,默認100mb
#http.max_content_length: 100mb

# 使用http協議對外提供服務,默認爲true,開啓
#http.enabled: false

################################### Gateway ###################################

# gateway的類型,默認爲local即爲本地文件系統,可以設置爲本地文件系統
#gateway.type: local

# 下面的配置控制怎樣以及何時啓動一整個集羣重啓的初始化恢復過程
# (當使用shard gateway時,是爲了儘可能的重用local data(本地數據))

# 一個集羣中的N個節點啓動後,才允許進行恢復處理
#gateway.recover_after_nodes: 1

# 設置初始化恢復過程的超時時間,超時時間從上一個配置中配置的N個節點啓動後算起
#gateway.recover_after_time: 5m

# 設置這個集羣中期望有多少個節點.一旦這N個節點啓動(並且recover_after_nodes也符合),
# 立即開始恢復過程(不等待recover_after_time超時)
#gateway.expected_nodes: 2

############################# Recovery Throttling #############################

# 下面這些配置允許在初始化恢復,副本分配,再平衡,或者添加和刪除節點時控制節點間的分片分配
# 設置一個節點的並行恢復數

# 1.初始化數據恢復時,併發恢復線程的個數,默認爲4
#cluster.routing.allocation.node_initial_primaries_recoveries: 4
#
# 2.添加刪除節點或負載均衡時併發恢復線程的個數,默認爲2
#cluster.routing.allocation.node_concurrent_recoveries: 2

# 設置恢復時的吞吐量(例如:100mb,默認爲0無限制.如果機器還有其他業務在跑的話還是限制一下的好)
#indices.recovery.max_bytes_per_sec: 20mb

# 設置來限制從其它分片恢復數據時最大同時打開併發流的個數,默認爲5
#indices.recovery.concurrent_streams: 5

# 注意: 合理的設置以上參數能有效的提高集羣節點的數據恢復以及初始化速度

################################## Discovery ##################################

# 設置這個參數來保證集羣中的節點可以知道其它N個有master資格的節點.默認爲1,對於大的集羣來說,可以設置大一點的值(2-4)
#discovery.zen.minimum_master_nodes: 1

# 探查的超時時間,默認3秒,提高一點以應對網絡不好的時候,防止腦裂
#discovery.zen.ping.timeout: 3s

# For more information, see
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html>

# 設置是否打開多播發現節點.默認是true.
# 當多播不可用或者集羣跨網段的時候集羣通信還是用單播吧
#discovery.zen.ping.multicast.enabled: false

# 這是一個集羣中的主節點的初始列表,當節點(主節點或者數據節點)啓動時使用這個列表進行探測
#discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]

# Slow Log部分與GC log部分略,不過可以通過相關日誌優化搜索查詢速度

############## Memory(重點需要調優的部分) ################

# Cache部分:
# es有很多種方式來緩存其內部與索引有關的數據.其中包括filter cache

# filter cache部分:
# filter cache是用來緩存filters的結果的.默認的cache type是node type.node type的機制是所有的索引內部的分片共享filter cache.node type採用的方式是LRU方式.即:當緩存達到了某個臨界值之後,es會將最近沒有使用的數據清除出filter cache.使讓新的數據進入es.

# 這個臨界值的設置方法如下:indices.cache.filter.size 值類型:eg.:512mb 20%。默認的值是10%。

# out of memory錯誤避免過於頻繁的查詢時集羣假死
# 1.設置es的緩存類型爲Soft Reference,它的主要特點是據有較強的引用功能.只有當內存不夠的時候,才進行回收這類內存,因此在內存足夠的時候,它們通常不被回收.另外,這些引用對象還能保證在Java拋出OutOfMemory異常之前,被設置爲null.它可以用於實現一些常用圖片的緩存,實現Cache的功能,保證最大限度的使用內存而不引起OutOfMemory.在es的配置文件加上index.cache.field.type: soft即可.
# 2.設置es最大緩存數據條數和緩存失效時間,通過設置index.cache.field.max_size: 50000來把緩存field的最大值設置爲50000,設置index.cache.field.expire: 10m把過期時間設置成10分鐘.
#index.cache.field.max_size: 50000
#index.cache.field.expire: 10m
#index.cache.field.type: soft

# field data部分&&circuit breaker部分:
# 用於field data 緩存的內存數量,主要用於當使用排序,faceting操作時,elasticsearch會將一些熱點數據加載到內存中來提供給客戶端訪問,但是這種緩存是比較珍貴的,所以對它進行合理的設置.

# 可以使用值:eg:50mb 或者 30%(節點 node heap內存量),默認是:unbounded
#indices.fielddata.cache.size: unbounded

# field的超時時間.默認是-1,可以設置的值類型: 5m
#indices.fielddata.cache.expire: -1

# circuit breaker部分:
# 斷路器是elasticsearch爲了防止內存溢出的一種操作,每一種circuit breaker都可以指定一個內存界限觸發此操作,這種circuit breaker的設定有一個最高級別的設定:indices.breaker.total.limit 默認值是JVM heap的70%.當內存達到這個數量的時候會觸發內存回收

# 另外還有兩組子設置:
#indices.breaker.fielddata.limit:當系統發現fielddata的數量達到一定數量時會觸發內存回收.默認值是JVM heap的70%

#indices.breaker.fielddata.overhead:在系統要加載fielddata時會進行預先估計,當系統發現要加載進內存的值超過limit * overhead時會進行進行內存回收.默認是1.03

#indices.breaker.request.limit:這種斷路器是elasticsearch爲了防止OOM(內存溢出),在每次請求數據時設定了一個固定的內存數量.默認值是40%

#indices.breaker.request.overhead:同上,也是elasticsearch在發送請求時設定的一個預估係數,用來防止內存溢出.默認值是1

# Translog部分:
# 每一個分片(shard)都有一個transaction log或者是與它有關的預寫日誌,(write log),在es進行索引(index)或者刪除(delete)操作時會將沒有提交的數據記錄在translog之中,當進行flush 操作的時候會將tranlog中的數據發送給Lucene進行相關的操作.一次flush操作的發生基於如下的幾個配置

#index.translog.flush_threshold_ops:當發生多少次操作時進行一次flush.默認是 unlimited

#index.translog.flush_threshold_size:當translog的大小達到此值時會進行一次flush操作.默認是512mb

#index.translog.flush_threshold_period:在指定的時間間隔內如果沒有進行flush操作,會進行一次強制flush操作.默認是30m

#index.translog.interval:多少時間間隔內會檢查一次translog,來進行一次flush操作.es會隨機的在這個值到這個值的2倍大小之間進行一次操作,默認是5s

#index.gateway.local.sync:多少時間進行一次的寫磁盤操作,默認是5s

# 以上的translog配置都可以通過API進行動態的設置


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章