生產環境的 ElasticSearch 安裝指南

candyleer發表於2019-03-09

背景

Elasticsearch 作為優秀的分散式搜尋引擎,在企業中得到了廣泛的應用,可以儲存海量的資料,還能像資料庫一樣各種條件檢索和操作,本文主要記錄下安裝的過程,大多數都參考的官方的文件來操作的,包括系統的設定和 ES 叢集的一些配置。

環境

  • 系統:CentOS Linux release 7.6.1810 (Core)
  • JDK: 1.8.0_201
  • ES 版本: 5.6.15
  • 安裝方式: 使用tar.gz或者zip包自行安裝.
  • 16C32G 2T 3臺(worker),2C4G 50G2臺(master)

系統配置

修改檔案控制程式碼數

在檔案中/etc/security/limits.conf增加,如果你的部署使用者是elasticsearch

elasticsearch  -  nofile  65536
複製程式碼

如果不限制任何使用者

*  -  nofile  65536
複製程式碼

很多是這樣配置的

* soft nofile 1024000
* hard nofile 1024000
複製程式碼

ps:凡是修改了系統檔案,都需要重新進入 session 配置才會生效.

關閉swap

如果 Es 用到了 swap 作為記憶體,效能將會變得極差,所以建議關閉.

關閉所有的 swap 檔案

使用sudo swapoff -a 臨時關閉,如果需要永久關閉,則將/etc/fstab 檔案中所有包含swap的行全部註釋掉.

配置 swappiness

使用sysctl vm.swappiness可檢視當前的配置值,如果不是1,則設定:

echo "vm.swappiness = 1" >> /etc/sysctl.conf
複製程式碼

或者sudo sysctl vm.swappiness=1 注意:這只是讓 kenerl 在正常情況下不會使用 swap 交換記憶體,緊急情況下仍然會使用. 目前我是採用的這種配置.

開啟 ES 的配置 bootstrap.memory_lock

開啟 config/elasticsearch.yml 檔案,設定

bootstrap.memory_lock: true
複製程式碼

使用 linux 的mlockall進行進行記憶體鎖定,防止使用 swap,除了上述 es 配置,通常需要在/etc/security/limits.conf寫入如下配置:

* hard memlock unlimited
* soft memlock unlimited
複製程式碼

重新進入 session 生效.(線上開啟了這個配置)

MMapFs 配置

es 預設情況下為64為的 linux 作業系統使用mmapfs進行索引的儲存,預設情況下,作業系統的 mmap 數量較低,可能導致記憶體異常.可配置:

sysctl -w vm.max_map_count=262144
複製程式碼

如果需要重啟後配置仍然保留,可以配置檔案/etc/sysctl.conf

vm.max_map_count=262144
複製程式碼

修改 user 能建立的執行緒限制

/etc/security/limits.conf寫入如下配置:

* soft nproc 1024000
* hard nproc 1024000
複製程式碼

重新進入 session 生效

ES自身配置

執行記憶體修改

修改config/jvm.properties

-Xms16g 
-Xmx16g 
複製程式碼

通常情況下配置為機器記憶體的一半左右,另外一半留給 ES 的堆外記憶體.master 2臺機器配置為2G 左右的記憶體即可.

引數

引數比較簡單,官方文件一查便知曉意思,貼出來,只是注意 最好將 master 和 data(worder) 節點分開,master只負責排程,不儲存資料


cluster.name: example-es-cluster
node.name: node-worker-74
# 是否是 master
node.master: false
# 是否儲存資料
node.data: true
# 資料儲存位置
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs

bootstrap.memory_lock: true
bootstrap.system_call_filter: false

network.host: 192.168.8.74
# http 埠
http.port: 9200
#tcp 埠
transport.tcp.port: 9300
# 叢集節點
discovery.zen.ping.unicast.hosts: ["192.168.8.75", "192.168.8.76", "192.168.8.72", "192.168.8.73", "192.168.8.74"]

discovery.zen.ping_timeout: 120s
discovery.zen.minimum_master_nodes: 1
discovery.zen.fd.ping_interval: 5s
discovery.zen.fd.ping_retries: 5

gateway.recover_after_nodes: 1


http.cors.enabled: true
http.cors.allow-origin: "*"

action.auto_create_index: false
action.destructive_requires_name: true
search.default_search_timeout: 150s
indices.fielddata.cache.size: 20%
indices.breaker.fielddata.limit: 40%
indices.breaker.request.limit: 30%
indices.breaker.total.limit: 60%
indices.recovery.max_bytes_per_sec: 200mb
indices.memory.index_buffer_size: 20%
http.max_content_length: 1024mb
thread_pool.bulk.queue_size: 3000
thread_pool.index.queue_size: 2000
thread_pool.search.queue_size: 1000
thread_pool.get.queue_size: 1000
複製程式碼

總結

官方文件還是比較全面,仔細按照文件一般沒有啥問題.

相關文章