概述html
環境準備java
elasticsearch配置node
彩蛋vim
公司最近在作全文檢索的項目,發現elasticsearch踩了很多坑,百度點進去又是坑,在此記錄一下本身的踩坑歷程。centos
本文旨在單機版的elasticsearch環境搭建踩坑記錄,後續會把整個全文檢索涉及到的項目和技術分享出來.瀏覽器
上一篇博文記錄了elasticsearch安裝方式 ,RPM安裝簡單,坑點少,但自由度低,本人生產使用的tar包安裝方式,本文主要記錄tar包踩坑記bash
若有錯誤或者更好的方案,歡迎批評指正服務器
elasticsearch安裝方式 中tar包安裝方式配置文件在 /opt/apps/elasticsearch-6.4.0/config/ 下網絡
elasticsearch配置文件主要是 es配置文件elasticsearch.yml 和 es jvm配置文件jvm.options兩個app
jvm.options配置文件首先是內存大小內存,es默認內存大小配置爲1G,此配置須要根據實際數據大小進行配置,建議最大分配內存爲機器可用內存大小的一半,最大不超過32G,由於es自身有個壓縮功能在32G之內會啓用,修改此配置項操做以下:
# sudo vim /opt/apps/elasticsearch-6.4.0/config/jvm.options
將以上默認配置項修改成4G,本人機器內存9G,數據大小爲1.8G
gc配置以下圖: 每行最前面的數字是指jdk的版本,8表明jdk1.8,本人這裏使用了默認配置不變
elasticsearch.yml配置文件主要包含集羣配置,節點配置,數據以及日誌路徑配置,啓動內存配置,網絡配置
# sudo 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安裝目錄的其餘目錄下,
若是改變數據和日誌路徑須要提早建立好存放目錄,本文存放目錄以下:
# sudo mkdir -p /data/es/data # sudo mkdir -p /var/log/es
# sudo 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用戶執行啓動命令後,發現沒有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:
# sudo groupadd elasticsearch # sudo useradd -g elasticsearch -d /usr/local/elasticsearch -m -n elasticsearch # su elasticsearch
再次啓動將會遇到各類帳號權限問題,此時須要給用戶elasticsearch分配es的權限:
切換到root帳號執行如下命令,須要切換到具備管理員權限的用戶下,固然也能夠分配用戶elasticsearch爲管理員以及免密碼等配置(具體配置自行百度)
# sudo chown -R elasticsearch:elasticsearch /opt/apps/elasticsearch-6.4.0 # sudo chown -R elasticsearch:elasticsearch /var/log/es # sudo chown -R elasticsearch:elasticsearch /data/es/data # sudo 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
下一篇將寫關於es插件安裝相關的教程以及踩坑記,歡迎關注和收藏