1. 程式人生 > >centos 7( linux )下搭建elasticsearch踩坑記

centos 7( linux )下搭建elasticsearch踩坑記

目錄

  • 概述

  • 環境準備

  • elasticsearch配置

  • 啟動踩坑記
  • 彩蛋

概述

    公司最近在做全文檢索的專案,發現elasticsearch踩了不少坑,百度點進去又是坑,在此記錄一下自己的踩坑歷程。

本文旨在單機版的elasticsearch環境搭建踩坑記錄,後續會把整個全文檢索涉及到的專案和技術分享出來.

上一篇博文記錄了elasticsearch安裝方式  ,RPM安裝簡單,坑點少,但自由度低,本人生產使用的tar包安裝方式,本文主要記錄tar包踩坑記

如有錯誤或者更好的方案,歡迎批評指正

環境準備

  1. 全新最小化安裝的centos 7.5
  2. 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以內會啟用,修改此配置項操作如下:

# sudo vim /opt/apps/elasticsearch-6.4.0/config/jvm.options

將以上預設配置項修改為4G,本人機器記憶體9G,資料大小為1.8G

GC配置

    gc配置如下圖: 每行最前面的數字是指jdk的版本,8代表jdk1.8,本人這裡使用了預設配置不變

elasticsearch.yml

    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使用者啟動失敗

    本人使用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外掛安裝相關的教程以及踩坑記,歡迎關注和收藏