官术网_书友最值得收藏!

1.6 Elasticsearch節點的重要配置

在Elasticsearch的config文件夾下,一共有3個重要的配置文件,其中elasticsearch.yml 用于配置節點的參數,jvm.options用來配置Elasticsearch運行時占用的堆內存大小,log4j2.properties用來配置Elasticsearch運行時的日志參數。那些可以通過調用REST接口,在節點運行時動態修改的配置叫作動態配置;配置在elasticsearch.yml文件中,只能在集群重啟后才能生效的配置叫作靜態配置。

1.6.1 集群節點的配置方法和優先級

當你需要修改集群節點的配置信息時,通常有以下3種方法。

(1)調用集群節點配置的REST接口并設置配置項臨時生效,該配置項在集群重啟后失效。

(2)調用集群節點配置的REST接口并設置配置項持久生效,該配置項在集群重啟后依然有效。

(3)直接把集群節點配置項寫在elasticsearch.yml文件中。

如果一個配置項沒有采用以上3種方法進行配置,則會采用集群節點默認的配置。如果同一個配置項在多個地方都配置過,而且配置得不一樣,則第一種臨時配置的優先級最高,第二種持久生效的配置次之,寫在elasticsearch.yml文件中的配置優先級最低。通常比較好的做法是,對于整個集群范圍內生效的動態配置直接使用REST接口進行控制,對于每個節點各自不同的配置(例如IP地址)直接在節點的elasticsearch.yml中配置,這樣做可以避免遺漏某個節點的配置而引起錯誤。

你可以調用下面的REST接口修改動態配置并讓它持久生效。

PUT /_cluster/settings
{
  "persistent" : {
    "search.max_buckets" : "50000"
  }
}

配置參數search.max_buckets用于指明在做聚集統計時,單個請求能夠返回的桶的最大數目,這里已經把它持久地設置成50000。接下來把這個配置參數的值改為30000并設置為臨時生效。

PUT /_cluster/settings
{
  "transient" : {
    "search.max_buckets" : "30000"
  }
}

再使用GET端點查看剛才的配置結果。

GET /_cluster/settings

Kibana會返回剛才的兩 種配置的信息。

{
  "persistent" : {
    "search" : {
      "max_buckets" : "50000"
    }
  },
  "transient" : {
    "search" : {
      "max_buckets" : "30000"
    }
  }
}

這時如果你重啟Elasticsearch,再查詢一次配置結果,就會發現剛才的臨時配置不見了,只剩下持久配置,這表明持久配置在節點重啟后依然有效。

另外,如果你想清空某一配置的信息,只要把它配置為null就行。

PUT /_cluster/settings
{
  "persistent": {
    "search.max_buckets": null
  }
}

1.6.2 elasticsearch.yml的重要配置

本小節介紹elasticsearch.yml的重要配置,通常你可以把集群節點的靜態配置寫在這個文件里,只有重啟Elasticsearch后這些配置的修改才能生效。

打開elasticsearch.yml,你可以看到里面已經有一些關鍵的配置,最上面的是集群名稱和節點名稱的配置,它們在1.4節介紹安裝Elasticsearch的時候已經配置過了。注意,在同一個集群中,多個節點的集群名稱要配置成一樣的,節點名稱要配置成不一樣的,以區分同一個集群中的不同節點。

1. path.data和path.logs

這兩個配置項用于配置數據目錄和日志目錄,在生產環境中,由于文件較大,應盡量配置存儲容量大的目錄,可以配置多個目錄。例如,在Windows系統中可以進行如下配置。

path:
  data: "C:\\esdata1 "
  logs:
    - "C:\\logs1"
- "D:\\logs2"

如果是Linux系統,則路徑不需要加引號,代碼如下。

path:
  data:
    - /esdata1
    - /esdata2
  logs:
    - /var/log/eslog1
- /var/log/eslog2
2. bootstrap.memory_lock

這是用于操作系統內存鎖的配置項,開啟內存鎖可以防止操作系統中的緩存數據被交換到外存而導致查詢性能大幅下降,在生產環境中,這個配置項一定要設置為true。

bootstrap.memory_lock: true

為了驗證內存鎖是否正常開啟,啟動Elasticsearch后,調用以下接口。

GET _nodes?filter_path=**.mlockall

返回true值則表示內存鎖開啟成功。

{
  "nodes" : {
    "EIjMhNrDSoy-Bbmo3W8JGA" : {
      "process" : {
        "mlockall" : true
      }
    }
  }
}

注意:在CentOS中,直接設置bootstrap.memory_lock為true可能會因為缺少權限并不能立即開啟內存鎖,還需要一些額外的配置,具體內容在第9章進一步討論。

3. network.host和http.port

這兩個配置項用于把Elasticsearch的服務綁定到固定的IP地址和端口號,默認的IP地址是127.0.0.1,端口號是9200,可以按照實際需要進行修改。

network.host: 192.168.9.105
http.port: 9201
4.discovery.seed_hosts和cluster.initial_master_nodes

這兩個配置項在單節點環境下保持默認設置即可,當需要搭建集群時,這兩個配置項對于節點的發現和主節點的選舉至關重要。discovery.seed_hosts用于配置一組IP地址或主機名,這組地址的列表是集群中的主候選節點的列表,當一個節點啟動時會嘗試與該列表中的各個主候選節點建立連接,如果連接成功并找到主節點就把該節點加入集群。例如:

discovery.seed_hosts:
    - 192.168.9.10
    - 192.168.9.11
- host3.com

cluster.initial_master_nodes用于明確地指定一組節點名稱的列表,這個列表也是主候選節點的列表,Elasticsearch集群在第一次啟動時會讀取該列表初始化投票配置,該配置將用于主節點的選舉。在這個列表中,配置的每個節點的名稱要與該節點的node.name配置的名稱保持一致。例如:

cluster.initial_master_nodes: ["node-1", "node-2"]

1.6.3 配置JVM的堆內存大小

在生產環境中,有必要根據服務器的硬件配置修改Elasticsearch運行時的JVM堆內存大小,以保證集群節點擁有足夠的堆內存。如果設置得太小,可能查詢時內存不夠而導致服務宕機;如果設置得太大,又會超過JVM用于壓縮對象指針的閾值而導致內存浪費。在配置堆內存大小的時候,需要滿足以下兩個條件。

(1)堆內存最大不得超過開啟壓縮對象指針的閾值,一般最大可以是31GB,不同的系統可能有區別,如果沒超過這個閾值,你可以在Elasticsearch的啟動日志中看到類似輸出:

heap size [989.8mb], compressed ordinary object pointers [true]

(2)在堆內存不超過上述閾值的前提下,其大小可以設置為其所在節點內存的一半。

例如,你的服務器有16GB內存,就可以把堆內存大小設置為8GB,但是如果服務器內存為128GB,則通常堆內存最多只能設置為31GB。配置完以后,還需要在啟動日志中確認堆內存大小沒有超過開啟壓縮對象指針的閾值。如果超過了閾值,則需要調小堆內存大小。

默認的堆內存大小是1GB,如果你想把它設置為4GB,修改jvm.options文件為:

-Xms4g
-Xmx4g

其中Xms代表最小的堆內存大小,Xmx代表最大的堆內存大小,這兩個值必須設置成一樣的。

主站蜘蛛池模板: 湖州市| 内丘县| 阿鲁科尔沁旗| 南通市| 东乌珠穆沁旗| 临泉县| 黄平县| 罗平县| 河西区| 正定县| 灵石县| 修武县| 延寿县| 潞西市| 芜湖县| 丰台区| 岱山县| 上饶县| 云和县| 竹溪县| 泰来县| 和平县| 潼南县| 内江市| 遂昌县| 泰顺县| 逊克县| 砀山县| 大英县| 南昌县| 巴林左旗| 同仁县| 乌审旗| 潼南县| 全南县| 贵州省| 泽州县| 开化县| 冷水江市| 安塞县| 东明县|