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


 

 

 

 

原文: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
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM