日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch入门 第二篇:集群配置

發布時間:2024/3/24 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch入门 第二篇:集群配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是ElasticSearch 2.4 版本系列的第二篇:

  • ElasticSearch入門 第一篇:Windows下安裝ElasticSearch
  • ElasticSearch入門 第二篇:集群配置
  • ElasticSearch入門 第三篇:索引
  • ElasticSearch入門 第四篇:使用C#添加和更新文檔
  • ElasticSearch入門 第五篇:使用C#查詢文檔
  • ElasticSearch入門 第六篇:復合數據類型——數組,對象和嵌套
  • ElasticSearch入門 第七篇:分析器
  • ElasticSearch入門 第八篇:存儲
  • 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 屬性配置集群的名字,用于唯一標識一個集群,不同的集群,其?cluster.name 不同,集群名字相同的所有節點自動組成一個集群。如果不配置改屬性,默認值是:elasticsearch。當啟動一個結點時,該結點會自動尋找相同集群名字的主結點;如果找到主結點,該結點加入集群中;如果未找到主結點,該結點成為主結點。

注意:在yml中對Elasticsearch進行全局配置,要注意配置選項的格式:option: value,在“:”之后保留一個空格,之后是選項值;配置選項不要有前置空格。

配置集群的名字為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使用基于安裝目錄的相對路徑來配置結點的路徑,安裝目錄由屬性path.home顯示,在home 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的臨時文件保存的目錄;

4,單個ElasticSearch實例的Java虛擬機(JVM)的堆內存限制

ElasticSearch實例必須運行在安裝JDK的機器上,在安裝完Java Runtime組件之后,必須創建系統變量JAVA_HOME,指定JDK安裝的位置,比如:

JAVA_HOME: C:\Program Files\Java\jre1.8.0_121\bin

默認的JVM內存限制是 1GB,對小項目而言,1GB內存足夠使用,不會出現問題,但是,對大項目而言,這個默認限制太小了,如果日志文件中經常出現OutOfMemoryError異常消息,就考慮重新設置 ES_HEAP_SIZE 環境變量,為JVM分配足夠的內存,同時,必須為OS分配足夠的內存,建議JVM使用的物理內存最大不應超過32GB,推薦分配機器物理內存的50%,在Windows中創建新的系統環境變量 ES_HEAP_SIZE,設置堆內存大小為5G:

三,索引配置

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.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,字段數據緩存

在對一個字段執行排序或聚合操作時,使用字段數據緩存(field data cache)將該字段的值加載到內存,以加快查詢的速度。加載字段數據還原是IO密集的操作,推薦分配足夠的內存,并且不分配過期時間:

  • indices.fielddata.cache.size,控制結點級別的字段數據緩存大小,默認值是無限大(unbounded),建議分配足夠的物理內存;
  • indices.fielddata.cache.expire,控制字段數據緩存的過期時間,默認值是字段數據永不過期;
  • indices.breaker.fielddata.limit,斷路器,默認值是JVM堆內存的 80%;當加載字段值所需要的內存超過JVM堆內存的80%,將引發異常;
  • indices.breaker.fielddata.overhead: 斷路器,默認值是1.03;

5,結點查詢緩存:

查詢緩存用于緩存查詢的結果,每一個節點都有一個查詢緩存,緩存過期使用LRU淘汰策略(Least Recently Used?eviction):當緩存滿時,最近最少使用的數據被淘汰,從緩存中清除,以存儲新的數據。

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

6,索引緩存

索引緩存用于存儲最新的索引文檔(newly indexed documents),當該緩存填充滿時,緩存的文件將被寫入到磁盤中的段(segment)中。?

  • indices.memory.index_buffer_size,默認值是10%,在單個結點上,所有索引的分片占用的最大內存大小,或占用JVM堆內存的百分比;
  • indices.memory.min_index_buffer_size,當indices.memory.index_buffer_size指定為百分比時,使用該選項配置絕對值,默認值是48MB;
  • indices.memory.max_index_buffer_size,當indices.memory.index_buffer_size指定為百分比時,使用該選項配置絕對值,默認值是無限大;

7,分片請求緩存:

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

當對一個索引執行查找請求(Search Request)時,每一個相關的分片(involved shard)都在本地執行查詢,返回查詢結果(local result)給協調結點(coordinating node)進行組合(combine),將各個分片的結果合并為最終的結果集返回。分片請求緩存對每個分片的查詢結果進行緩存。

8,索引的刷新頻率

索引對象刷新的頻率,刷新頻率越低,文檔對搜索操作可視的時間越長:

  • index.refresh_interval,在索引級別指定索引的刷新頻率,默認值是1s

9,段(Segment)合并

每個索引分為多個段(Segment),一個段寫入硬盤后,就不能再被更新,因此,被刪除文檔的信息存儲在一個單獨的文件中。ElasticSearch支持文檔的更新,在底層,實際上是刪除舊文檔,再把更新內存的文檔編入索引。在查找時,需要從返回結果中過濾掉已刪除的文檔。

如果數據更新或刪除的數據比較多,那么每個段中的有效數據密度會變低,降低了查詢的性能,通過段合并,將已刪除的數據從段(Segment)中物理刪除,能夠提高搜索性能,合并的過程是:底層的Lucene庫獲取若干段,從段中過濾已刪除的數據,保存到一個新的段上;段合并完成之后,將源段從硬盤上物理刪除;段合并操作的CPU和IO的消耗是非常高的,必須控制段合并執行的頻率和時機。

段合并的策略控制段合并的時機,在適當的條件下進行段合并:

  • index.merge.policy.type,有效值:tiered,log_byte_size,log_doc
    • tiered:默認的合并策略,合并尺寸大致相似的段
    • log_byte_size:根據文檔的字節數量進行合并
    • log_doc:根據文檔的數量進行合并

段合并的線程控制,以串行或并發方式執行段合并:

  • index.merge.scheduler.type,有效值:serial(串行),concurrent(并發)

合并因子控制段合并的頻率,合并因子越小,合并的頻率越高:

  • index.merge.policy.merge_factor,默認值是10

段合并調節器,限制合并的速度:

  • indices.store.throttle.type,有效值:none,merge,all
  • indices.store.throttle.max_bytes_per_sec:默認值10mb

四,集群的網絡配置

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發現來尋找結點和選舉主結點,組建集群;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類型(本地網關),在本地文件系統中存儲索引及其元數據;

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公開兩種類型的線程池:

  • cache:無限制的線程池,為每個請求創建一個線程;
  • fixed:固定大小的線程池,大小由size屬性指定,

對于固定大小的線程池類型,必須為ElasticSearch指定一個請求隊列(queue)用來保存請求,請求被存儲到隊列中,直到有一個空閑的線程來執行請求;如果隊列滿了,ElasticSearch無法把請求存放到隊列中,該請求將被拒絕;

  • threadpool.index.type: fixed
  • threadpool.index.size: 100
  • threadpool.index.queue_size: 500

附言:

ElasticSearch引擎的配置選項非常多,并且要真正理解這些配置選項對引擎的影響,也不是一件容易的事,不過,不用擔心,在使用ElasticSearch時,真正需要修改配置選項的情況少之又少,所以,通常使用默認的配置就能滿足生產環境的要求,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## discovery discovery.zen.minimum_master_nodes: 1 discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]## protection action.auto_create_index: false
## scripting script.inline: true script.indexed: true

?

參考文檔:

Elasticsearch Reference [2.4] ? Setup ? Configuration

Elasticsearch Reference [2.4] ? Modules

Elasticsearch Reference [2.4] ? Modules ? Node

Install and configure Elasticsearch in Windows

Important Elasticsearch configuration

elasticsearch.yml配置文件

轉載于:https://www.cnblogs.com/zxtceq/p/7691001.html

總結

以上是生活随笔為你收集整理的ElasticSearch入门 第二篇:集群配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。