背景
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 50G
2臺(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
複製程式碼
總結
官方文件還是比較全面,仔細按照文件一般沒有啥問題.