原文:https://blog.csdn.net/an88411980/article/details/83150380
概述
公司最近在做全文檢索的項目,發現elasticsearch踩了不少坑,百度點進去又是坑,在此記錄一下自己的踩坑歷程。
本文旨在單機版的elasticsearch環境搭建踩坑記錄,后續會把整個全文檢索涉及到的項目和技術分享出來.
上一篇博文記錄了elasticsearch安裝方式 ,RPM安裝簡單,坑點少,但自由度低,本人生產使用的tar包安裝方式,本文主要記錄tar包踩坑記
如有錯誤或者更好的方案,歡迎批評指正
環境准備
全新最小化安裝的centos 7.5
elasticsearch 6.4.0
elasticsearch配置
elasticsearch安裝方式 中tar包安裝方式配置文件在 /opt/apps/elasticsearch-6.4.0/config/ 下
elasticsearch配置文件主要是 es配置文件elasticsearch.yml 和 es jvm配置文件jvm.options兩個
jvm.options
內存大小配置
jvm.options配置文件首先是內存大小內存,es默認內存大小配置為1G,此配置需要根據實際數據大小進行配置,建議最大分配內存為機器可用內存大小的一半,最大不超過32G,因為es自身有個壓縮功能在32G以內會啟用,修改此配置項操作如下:
vim /opt/apps/elasticsearch-6.4.0/config/jvm.options
將以上默認配置項修改為4G,本人機器內存9G,數據大小為1.8G
GC配置
gc配置如下圖: 每行最前面的數字是指jdk的版本,8代表jdk1.8,本人這里使用了默認配置不變
elasticsearch.yml
elasticsearch.yml配置文件主要包含集群配置,節點配置,數據以及日志路徑配置,啟動內存配置,網絡配置
集群相關配置
vim /opt/apps/elasticsearch-6.4.0/config/elasticsearch.yml cluster.name: test-cluster node.name: node-1 network.host: 172.16.0.1 http.port: 9200 discovery.zen.ping.unicast.hosts: ["172.16.0.100", "172.16.0.101","172.16.0.102"] discovery.zen.minimum_master_nodes: 2
配置詳解:
cluster.name: es集群的名稱
node.name: 當前es節點名稱,主要區分集群中哪個節點
network.host: 當前節點(服務器)的IP地址,此項必須配置,否則其他服務器無法訪問到es
http.port: es服務的端口,默認就是9200
discovery.zen.ping.unicast.hosts: 集群每個節點的IP地址,同樣可以配置可解析的域名,單機環境可以忽略此配置
discovery.zen.minimum_master_nodes: 集群節點存活最少數,建議配置為集群機器數/2+1 ,單機環境可以忽略
路徑配置
為了規避對es打包到其他機器繼續使用時把數據和日志也打包進去,建議將數據和日志保存到非es安裝目錄的其他目錄下,
如果改變數據和日志路徑需要提前創建好存放目錄,本文存放目錄如下:
mkdir -p /data/es/data
mkdir -p /var/log/es
vim /opt/apps/elasticsearch-6.4.0/config/elasticsearch.yml
path.data: /data/es/data
path.logs: /var/log/es
配置詳解:
path.data: es數據存放路徑
path.logs: es日志存放路徑
啟動踩坑記
es后台啟動命令如下:
/opt/apps/elasticsearch-6.4.0/bin/elasticsearch -d -p pid
root用戶啟動失敗
本人使用root用戶執行啟動命令后,發現沒有es進程,開始查看es日志:
tail -fn 500 /var/log/es/elasticsearch.log
很幸運的看到了錯誤提示: Caused by: java.lang.RuntimeException: can not run elasticsearch as root
提示的很明顯,es不能使用root用戶啟動,此刻本人的內心在吶喊:"瓦特?",吶喊完畢后,還是要屈服於它,開始創建es啟動用戶elasticsearch:
# groupadd elasticsearch
# useradd -g elasticsearch -d /usr/local/elasticsearch -m -n elasticsearch
# ./elasticsearch
再次啟動將會遇到各種賬號權限問題,此時需要給用戶elasticsearch分配es的權限:
切換到root賬號執行以下命令,需要切換到具有管理員權限的用戶下,當然也可以分配用戶elasticsearch為管理員以及免密碼等配置(具體配置自行百度)
# chown -R elasticsearch:elasticsearch /opt/apps/elasticsearch-6.4.0
# chown -R elasticsearch:elasticsearch /var/log/es
# chown -R elasticsearch:elasticsearch /data/es/data
# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch
權限分配完畢后,切換到elasticsearch用戶下繼續執行啟動命令,查看es日志,就會發現新的錯誤提示: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
此錯誤意思也很明顯es啟動進程要求文件描述符最小為65536, 但是目前系統配置的最大為4096,繼續填坑
切換到root用戶,修改elasticsearch文件描述符,第一列的elasticsearch是指的啟動es的用戶
# vim /etc/security/limits.conf 在文件末尾添加: elasticsearch hard nofile 65536 elasticsearch soft nofile 65536
切換到用戶elasticsearch繼續啟動,查看es日志會發現新的錯誤: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
錯誤的意思是es啟動內存權限最低 262144,繼續填坑, 切換到root用戶,修改配置:
# vim /etc/sysctl.conf 在最后一行添加如下內容: vm.max_map_count=262144 # sysctl -p 可以查看到如下內容: vm.max_map_count=262144
ok,切換到elasticsearch用戶,繼續執行啟動命令,查看es日志,就可以如下內容:
以上日志無任何錯誤,通過瀏覽器訪問: http://172.16.0.1:9200 ,可以看到下圖內容:
再次就說明es正式啟動完成,可以正常使用了,如果url無法訪問需要檢查服務器防火牆端口是否已經開放
centos7 防火牆使用的firewall,基於本文開放端口方式為,切換到root用戶,執行以下命令:
# firewall-cmd --zone=public --add-port=9200/tcp --permanent
# firewall-cmd --zone=public --add-port=9300/tcp --permanent
# firewall-cmd --reload