ElasticSearch入門之es的安裝, es首次啟動報錯及解決方案


1. 安裝前的准備工作及下載

1.1 創建用戶

創建一個es專門的用戶(必須), 因為es軟件不能用root用戶啟動.
注意: 在企業中,每個業務系統或者集群都需要申請獨立的賬號.

#使用root用戶的操作 #添加一個用戶,叫做es useradd es # 使用root用戶創建目錄 mkdir -p /export/servers/es mkdir -p /export/data/es mkdir -p /export/logs/es # 將目錄的權限分配給es用戶 chown -R es:es /export/servers/es chown -R es:es /export/data/es chown -R es:es /export/logs/es # 設置ex用戶的密碼, 建議使用es作為密碼,防止后續忘記密碼 passwd es <input es> # 切換到es用戶 su es 

1.2 下載安裝包

切換到es用戶下
切換到es用戶下
切換到es用戶下
下載安裝包

su es # 一定要cd, 這樣可以回到home目錄 /home/es cd # 下載安裝包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz # 解壓 tar -zxvf elasticsearch-6.0.0.tar.gz -C /export/servers/es/ 

為了給小伙伴們更加便捷的使用es, 博主這里也提供好了現成的安裝包~

1.3 修改配置文件

cd /export/servers/es/elasticsearch-6.0.0/config vi elasticsearch.yml 

主要修改如下3個地方

node.name: 節點名字 network.host: 節點ip地址 其他可能修改: discovery.zen.ping.unicast.hosts: ["node01","node02","node03"] 
  • node01
# 集群名字 cluster.name: myes # 集群中當前的節點 node.name: node01 # 數據目錄 path.data: /export/data/es # 日志目錄 path.logs: /export/logs/es # 當前主機的ip地址 network.host: 192.168.140.131 http.port: 9200 # 集群上的節點信息 discovery.zen.ping.unicast.hosts: ["node01","node02","node03"] # linux安裝es的一個bug解決的配置 bootstrap.system_call_filter: false bootstrap.memory_lock: false # 是否支持跨域 http.cors.enabled: true # *表示支持所有域名 http.cors.allow-origin: "*" 
  • node02
cluster.name: myes node.name: node02 path.data: /export/data/es path.logs: /export/logs/es network.host: 192.168.140.132 http.port: 9200 discovery.zen.ping.unicast.hosts: ["node01","node02","node03"] bootstrap.system_call_filter: false bootstrap.memory_lock: false # 是否支持跨域 http.cors.enabled: true # *表示支持所有域名 http.cors.allow-origin: "*" 
  • node03
cluster.name: myes node.name: node03 path.data: /export/data/es path.logs: /export/logs/es network.host: 192.168.140.133 http.port: 9200 discovery.zen.ping.unicast.hosts: ["node01","node02","node03"] bootstrap.system_call_filter: false bootstrap.memory_lock: false # 是否支持跨域 http.cors.enabled: true # *表示支持所有域名 http.cors.allow-origin: "*" 

1.4 修改jvm內存大小

每台機器都修改

vi jvm.options 
-
-Xms512m
-Xmx512m

2. 啟動及報錯解決

2.1 啟動

第一次啟動,必須前台啟動
第一次啟動,必須前台啟動
第一次啟動,必須前台啟動

/export/servers/es/elasticsearch-6.0.0/bin/elasticsearch

為什么第一次啟動要前台啟動呢? 這樣能夠在前台發現啟動時的錯誤, 否則還要去/export/logs/es/myes.log下查看日志,比較麻煩

2.2 錯誤信息如下

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] [2]: max number of threads [1024] for user [es] is too low, increase to at least [4096] [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] [4]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk 

2.3 解決辦法

使用root用戶
使用root用戶
使用root用戶

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

  • 原因: 無法創建本地文件問題, 用戶最多大創建文件數太小
  • 解決方案: 切換到root用戶下, 編輯limits.conf配置文件, 添加類似如下內容:
vi /etc/security/limits.conf 
  • 添加如下內容: 注意*不要去掉了
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

*代表Linux所有用戶名稱(比如hadoop, es), 需要保存, 退出,重新登錄才可以生效.

[2]: max number of threads [1024] for user [es] is too low, increase to at least [4096]

  • 原因: 無法創建本地線程問題,用戶最大可創建線程數太小
  • 解決方案: 切換到root用戶, 進入limits.d目錄下, 修改90-nproc.conf配置文件.
vi /etc/security/limits.d/90-nproc.conf 

找到如下內容

* soft nproc 1024

修改為

* soft nproc 4096

[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

  • 原因: 最大虛擬內存太小
  • 解決方案一: 次方案治標不治本, 每次啟動服務器都要手動執行如下命令才有效
    root用戶執行命令
[root@localhost ~]# sysctl -w vm.max_map_count=262144 
  • 解決方案二: 此方法治標又治本,強烈推薦使用
vi /etc/sysctl.conf 

在此配置文件最后添加一行

vm.max_map_count=262144 

[4] system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

  • 原因:Centos6不支持SecComp,而ES5.4.1默認bootstravelap.system_call_filter為travelue進行檢測,所以導致檢測失敗,失敗后直接導致ES不能啟動。
    詳見 :https://github.com/elastic/elasticsearch/issues/22899
  • 解決方法:在elasticsearch.yml中新增配置
bootstrap.system_call_filter,設為false,注意要在Memory下面: bootstrap.memory_lock: false bootstrap.system_call_filter: false 

以上問題解決后,es啟動成功了,但又遇到了新的問題,本地機器無法訪問虛擬機的服務,兩個原因:
1)9200被限制為本機訪問,需要在es的配置文件elasticsearch.yml中新增配置:
network.bind_host:0.0.0.0
2)關閉虛擬機防火牆
解決了這個兩個問題后,本地能夠順利訪問虛擬機的ES服務了。

2.4 再次啟動服務(先殺后啟)

所有的機器重啟
所有的機器重啟
所有的機器重啟

ps -ef|grep elasticsearch|grep server |awk '{print $2}' |xargs kill -9 nohup /export/servers/es/elasticsearch-6.0.0/bin/elasticsearch >/dev/null 2>&1 & 

2.5 訪問es

在Google Chrome瀏覽器中,訪問以下地址

http://node01:9200/?pretty

pretty:格式化的,漂亮的。

{ "name" : "node01", "cluster_name" : "myes", "cluster_uuid" : "Ir-WWjS8R0KirRVwcjlLlw", "version" : { "number" : "6.0.0", "build_hash" : "8f0685b", "build_date" : "2017-11-10T18:41:22.859Z", "build_snapshot" : false, "lucene_version" : "7.0.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" } 


免責聲明!

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



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