1. 程式人生 > >Elasticsearch筆記(一)—— Linux下安裝Elasticsearch

Elasticsearch筆記(一)—— Linux下安裝Elasticsearch

Linux下安裝Elasticsearch

1、版本

雖然眼下已經出了v6.5.0,但為了和ik分詞器版本一致,這裡選擇6.4.3的版本。
官網:https://www.elastic.co/
選擇適用於linux的安裝包進行下載
在這裡插入圖片描述

2、安裝與配置

2.1.新建使用者

由於Elasticsearch預設不允許以root賬號執行,首先我們需要
建立使用者:useradd orcas
設定密碼(可選): passwd orcas
切換使用者: su - orcas

2.2 .上傳並解壓安裝包
  1. 這裡通過Xshell的檔案傳輸將安裝包上傳至指定目錄下:/home/learn
  2. cd到該目錄進行解壓: tar -zxvf elasticsearch-6.4.3.tar.gz
  3. 刪除安裝包(可選):rm -rf elasticsearch-6.4.3.tar.gz
  4. 重新命名目錄以便於之後配置路徑(可選):mv elasticsearch-6.4.3/ elasticsearch

進入elasticsearch可看到其目錄結構:
在這裡插入圖片描述

2.3 .修改配置

進入config目錄修改其下兩個配置檔案:
在這裡插入圖片描述

  1. jvm.options
    將預設的記憶體佔用1g設定小一些。
    -Xms512m
    -Xmx512m
  2. elasticsearch.yml

    修改資料和日誌目錄:
    path.data: /home/learn/elasticsearch/data # 資料目錄位置
    path.logs: /home/learn/elasticsearch/logs # 日誌目錄位置
  3. 回退到elasticsearch的根目錄,會發現有logs目錄,並沒有data,因此需手動建立: mkdir data
  4. 修改繫結的ip:network.host: 0.0.0.0 # 繫結到0.0.0.0,允許任何ip來訪問。
2.3 .elasticsearch.yml的其他配置
屬性名 說明
cluster.name
配置elasticsearch的叢集名稱,預設是elasticsearch。建議修改成一個有意義的名稱。
node.name 節點名,es會預設隨機指定一個名字,建議指定一個有意義的名稱,方便管理
path.conf 設定配置檔案的儲存路徑,tar或zip包安裝預設在es根目錄下的config資料夾,rpm安裝預設在/etc/ elasticsearch
path.data 設定索引資料的儲存路徑,預設是es根目錄下的data資料夾,可以設定多個儲存路徑,用逗號隔開
path.logs 設定日誌檔案的儲存路徑,預設是es根目錄下的logs資料夾
path.plugins 設定外掛的存放路徑,預設是es根目錄下的plugins資料夾
bootstrap.memory_lock 設定為true可以鎖住ES使用的記憶體,避免記憶體進行swap
network.host 設定bind_host和publish_host,設定為0.0.0.0允許外網訪問
http.port 設定對外服務的http埠,預設為9200。
transport.tcp.port 叢集結點之間通訊埠
discovery.zen.ping.timeout 設定ES自動發現節點連線超時的時間,預設為3秒,如果網路延遲高可設定大些
discovery.zen.minimum_master_nodes 主結點數量的最少值 ,此值的公式為:(master_eligible_nodes / 2) + 1 ,比如:有3個符合要求的主結點,那麼這裡要設定為2

3、執行

3.1 .執行報錯

進入elasticsearch/bin目錄,執行可執行檔案: ./elasticsearch
然而現在執行其實會報錯,我們需要修改一些配置。

  1. Centos6不支援SecComp,它需要至少3.5以上版本的Linux核心,而Centos6核心版本比較低,v2.x。
    使用cat /proc/version或者uname -a命令檢視linux版本,我這裡使用的centos7,所以可以。
    Linux version 3.10.0-514.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41 UTC 2016

    elasticsearch啟動時預設bootstrap.system_call_filter: true,就會進行檢測,為了避免該問題,可以在elasticsearch.yml中新增一條配置將其設定成false禁用: bootstrap.system_call_filter: false

  2. 檔案許可權不足
    報錯:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
    這是因為我們使用的新建的使用者許可權不足。
    我們先切換成root的使用者: su - root,然後再修改許可權:
    vim /etc/security/limits.conf
    新增如下:

* soft nofile 65536

* hard nofile 131072

* soft nproc 4096

* hard nproc 4096 
  1. 使用者最大程序數過低(centos7不用修改)
    報錯:max number of threads [1024] for user [orcas] is too low, increase to at least [4096]
    修改配置:vim /etc/security/limits.d/90-nproc.conf
    將程序數設定為4096: * soft nproc 4096
    ps: centos7的limits.d下是20-nproc.conf,裡面預設就設定了非root使用者的最大程序數為4096。

  2. 程序虛擬記憶體過低
    報錯:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
    同樣根據提示將其設定大些:
    vim /etc/sysctl.conf
    新增一條: vm.max_map_count=655360
    重新載入系統引數: sysctl -p

3.2 .重啟

注意不要是root使用者)進入到elasticsearch的bin目錄,再次執行./elasticsearch,如果以上幾點坑都一個個躲過了,就能成功運行了。
啟動過程還挺久的,可以看到預設綁定了兩個埠:

  • 9300:叢集節點間通訊介面
  • 9200:客戶端訪問介面

ps: 再報錯,例如:

[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:140) ~[elasticsearch-6.4.3.jar:6.4.3]
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.4.3.jar:6.4.3]
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.4.3.jar:6.4.3]
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.4.3.jar:6.4.3]
	at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.4.3.jar:6.4.3]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.4.3.jar:6.4.3]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.4.3.jar:6.4.3]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
	at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.4.3.jar:6.4.3]
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.4.3.jar:6.4.3]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[elasticsearch-6.4.3.jar:6.4.3]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.4.3.jar:6.4.3]
	... 6 more

你看看是不是不小心使用root使用者啟動了。

最後,瀏覽器訪問:http://192.168.58.128:9200/
會顯示如下內容:
在這裡插入圖片描述