ElasticSearch(一)之安裝ElasticSearch

What did you do today

先入爲主

ElasticSearch是什麼?百度詞條是這樣解釋的。

ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。ElasticSearch是用java開發的,並作爲Apache許可條款下的開發源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。

我們建立一個網站或者應用程序,並要添加搜索功能,但是想要完成搜索工作的創建是非常困難的。我們希望搜索解決方案要運行速度快,我們希望能有一個零配置和一個完全免費的搜索模式,我們希望能簡單的使用JSON通過HTTP來索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠從一臺開始並擴展到數百臺,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個雲的解決方案。因此我們利用ElasticSearch來解決所有這些問題以及可能出現的更多其他問題。

安裝

  • 安裝ES之前確保自己的機器配置過java 8環境。

[root@localhost software]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.zip

  • 好像還沒有安裝wget,那就安裝吧

[root@localhost software]# yum install -y wget

  • 下載ES的.tar.gz安裝包

[root@localhost software]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.tar.gz

  • 解壓到/usr/local/fast/目錄下。

[root@localhost software]# tar -zxvf elasticsearch-6.1.1.tar.gz -C /usr/local/fast/

  • 進入/usr/local/fast/elasticsearch-6.1.1/,啓動elasticsearch後,發現報錯了。問題所在是我虛擬機分配的內存太小了(256MB),我來修改爲512MB。
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/fast/elasticsearch-6.1.1/hs_err_pid1795.log

 

  • 現在我再次啓動發現“Cannot allocate memory”問題解決了,但是又拋出一個新的異常。
[2018-01-08T10:59:24,934][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.1.1.jar:6.1.1]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) ~[elasticsearch-6.1.1.jar:6.1.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:322) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-6.1.1.jar:6.1.1]
    ... 6 more
  • 新的版本安全級別 提高了,不允許採用root啓動,我們需要添加一個新的用戶。

1.創建elasticsearch用戶組:[root@localhost /]# groupadd elasticsearch
2.創建elasticsearch用戶:[root@localhost elasticsearch-6.1.1]# useradd elasticsearch -g elasticsearch -p elasticsearch
3.更改 elasticsearch-6.1.1文件夾下所有文件的所屬用戶和組分別爲elasticsearch、elasticsearch。命令: chown -R elasticsearch.elasticsearch *(chown將指定文件的擁有者,-R代表處理指定目錄以及子目錄下的所有文件)

  • 切換到elasticsearch用戶,然後啓動elasticserach,發現還是拋出"Unable to access 'path.data' "異常。
Caused by: java.lang.IllegalStateException: Unable to access 'path.data' (/usr/local/fast/elasticsearch-6.1.1/data)
    at org.elasticsearch.bootstrap.FilePermissionUtils.addDirectoryPath(FilePermissionUtils.java:70) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Security.addFilePermissions(Security.java:287) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Security.createPermissions(Security.java:242) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Security.configure(Security.java:119) ~[elasticsearch-6.1.1.jar:6.1.1]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:207) ~[elasticsearch-6.1.1.jar:6.1.1]
  • 我們還沒有給elasticsearch用戶分配讀寫“/usr/local/fast/elasticsearch-6.1.1/data”的權限。一般來說,普通用戶只有在自己的主目錄下有創建文件或者目錄的權限,我們當前的用戶是elasticsearch,它的主目錄就應該是/home/elasticsearch.我們切換到root用戶,改變elasticsearch-6.1.1這個文件的擁有者和羣主。命令:chown -R elasticsearch:elasticsearch elasticsearch-6.1.1(命令格式:chown [選項]... [所有者][:[組]] 文件...)

  • 嘻嘻,我們再次啓動elasticsearch,發現它又啓動失敗了!

 

  • 通過觀看log輸出,我們發現拋出了3個error。

1.[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536],修改/etc/security/limits.conf,添加如下內容,如果不成功的話可以嘗試ulimit -n 65536。

 

2.[2]: max number of threads [794] for user [elasticsearch] is too low, increase to at least [4096]修改/etc/security/limits.d/20-nproc.conf,具體如下:

接着修改/etc/security/limits.conf,具體如下:

3.[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],修改/etc/sysctl.conf文件,具體如下。修改完成後,輸入sysctl -a 命令。

  • 由於elasticsearch默認分配jvm空間大小爲1g,我在這裏修改jvm空間分配爲512MB,/config/jvm.options

  • 修改config目錄下的elasticsearch.yml配置文件,具體如下:
# Use a descriptive name for your cluster:
#
cluster.name: es_cmazxiaoma
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
#

# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 192.168.12.6
#
# Set a custom port for HTTP:
#
http.port: 9200
#
  • 防火牆添加9200端口策略。

  • 我們再次啓動elasticsearch,發現已經成功!,如果需要後臺啓動的話,命令:./bin/elasticsearch -d

     
  • 訪問192.168.12.6:9200,歷經坎坷終於成功了!

Summary

本文是轉發的,作者寫的詳細我是安裝後看到這篇文章的作者遇到的坑我都遇過 

作者:cmazxiaoma
鏈接:https://www.jianshu.com/p/b3fcaa8d0dc1
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章