天天看點

ElasticSearch叢集配置詳解

ElasticSearch叢集配置詳解 叢集配置

# 代表一個叢集,叢集中有多個節點,其中有一個為主節點,這個主節點是可以通過選舉産生的,主從節點是對于叢集内部來說的.

# es的一個概念就是去中心化,字面上了解就是無中心節點,這是對于叢集外部來說的,因為從外部來看es叢集,在邏輯上是個整體,你與任何一個節點的通信和與整個es叢集通信是等價的。

# cluster.name可以确定你的叢集名稱,當你的elasticsearch叢集在同一個網段中elasticsearch會自動的找到具有相同cluster.name的elasticsearch服務.

# 是以當同一個網段具有多個elasticsearch叢集時cluster.name就成為同一個叢集的辨別.

cluster.name: elasticsearch

節點配置

# 節點名稱同理,可自動生成(從已有的128中随機配置設定)也可手動配置.

#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

索引配置

# 設定索引的分片數,預設為5

#index.number_of_shards: 5

# 設定索引的副本數,預設為1:

#index.number_of_replicas: 1

# 配置檔案中提到的最佳實踐是,如果伺服器夠多,可以将分片提高,盡量将資料平均分布到大叢集中去

# 同時,如果增加副本數量可以有效的提高搜尋性能

# 需要注意的是,"number_of_shards" 是索引建立後一次生成的,後續不可更改設定

# "number_of_replicas" 是可以通過API去實時修改設定的

路徑配置

# 配置檔案存儲位置

#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.mandatory: mapper-attachments,lang-groovy

記憶體配置

# 當JVM開始寫入交換空間時(swapping)ElasticSearch性能會低下,你應該保證它不會寫入交換空間

# 設定這個屬性為true來鎖定記憶體,同時也要允許elasticsearch的程序可以鎖住記憶體,linux下可以通過 `ulimit -l unlimited` 指令

#bootstrap.mlockall: true

# 確定 ES_MIN_MEM 和 ES_MAX_MEM 環境變量設定為相同的值,以及機器有足夠的記憶體配置設定給Elasticsearch

# 注意:記憶體也不是越大越好,一般64位機器,最大配置設定記憶體别才超過32G

網絡配置

# 設定綁定的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的類型,預設為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

恢複配置

# 下面這些配置允許在初始化恢複,副本配置設定,再平衡,或者添加和删除節點時控制節點間的分片配置設定

# 設定一個節點的并行恢複數

# 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

# 注意: 合理的設定以上參數能有效的提高叢集節點的資料恢複以及初始化速度

叢集發現配置

# 設定這個參數來保證叢集中的節點可以知道其它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部分略,不過可以通過相關日志優化搜尋查詢速度

緩存配置

# 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配置

# 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進行動态的設定

繼續閱讀