前言
由於elasticsearch依賴java環境,所以,首先要安裝java jdk。
這里使es和kibana的版本保持一致,環境如下:
- centos7.3
- java1.8
- elasticsearch6.7.0
- kibana6.7.0
- ik6.7.0
另外,要檢查一下防火牆是否關閉:
firewall-cmd --state # 檢查防火牆是否關閉 systemctl stop firewalld.service # 停止firewall systemctl disable firewalld.service # 禁止開機啟動
java for linux
在Linux平台,直接使用yum
命令下載java jdk
即可。
[root@cs home]# yum install java-1.8.0-openjdk -y
默認的,java jdk
被安裝到了/usr/lib/jvm/
目錄:
下載並安裝完畢,我們使用如下命令測試java環境是否配置完畢:
[root@cs home]# java -version
OK,java環境配置完畢。至於配置javac
,見鬼去吧!
elasticsearch for linux
在elastic官網的elasticsearch下載頁面,復制tar
包鏈接:
然后,使用wget
命令下載即可:
[root@cs home]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.0.tar.gz
下載完畢后,我們解壓tar
包:
[root@cs home]# tar -zxvf elasticsearch-6.7.0.tar.gz
當解壓完畢,我們對elasticsearch做一些配置,elasticsearch.yml
配置文件里面有很多常用的配置,我們根據業務需求可以來這里修改它們:
[root@cs home]# vim /home/elasticsearch-6.7.0/config/elasticsearch.yml
暫時我們只需要對host
做一些修改,方便后面我們通過瀏覽器訪問它:
network.host: 10.0.0.200
host
對應你的主機ip
地址。
由於elasticsearch的默認jvm堆大小是1G(在es的6.7.0和6.5.4版本中,該值都是默認1G),為了啟動不報錯Cannot allocate memory
,所以還需要修改一處配置,就是調整堆值的大小,並且這個值應該根據你的系統物理內存大小而定,比如我本機的物力內存是1G,所以我將這個值調整為512M:
[root@r home]# vim /home/elasticsearch-6.7.0/config/jvm.options -Xms512m # 原值為-Xms1g -Xmx512m # 原值為-Xmx1g
沒完!我們還需要修改兩處配置(非常重要的兩個步驟,配置不好就導致后面的報錯):
[root@cs home]# vim /etc/sysctl.conf
編輯追加一行:
vm.max_map_count=262144
完事執行如下命令,使配置生效:
[root@cs home]# sysctl -p vm.max_map_count = 262144
而我碰到命令執行失敗的問題:
[root@cs home]# sysctl -p sysctl: cannot stat /proc/sys/vm/max_map_conut: 沒有那個文件或目錄
怎么辦呢?我們使用另一個辦法:
[root@cs ~]# cat /proc/sys/vm/max_map_count # 之前,我們查看參數並沒有修改 65530 [root@cs ~]# echo 262144 > /proc/sys/vm/max_map_count # 通過這樣手動修改參數 [root@cs ~]# cat /proc/sys/vm/max_map_count # 就好了 262144
簡要說下sysctl -p
命令,sysctl
命令用於運行時配置內核參數,這些參數位於/proc/sys
目錄下。sysctl
配置與顯示在/proc/sys
目錄中的內核參數.可以用sysctl
來設置或重新設置聯網功能,如IP轉發、IP碎片去除以及源路由檢查等。用戶只需要編輯/etc/sysctl.conf
文件,即可手工或自動執行由sysctl
控制的功能。而 參數-p
的意思是從指定的文件加載系統參數,如不指定即從/etc/sysctl.conf
中加載。
再來修改另一處配置:
[root@cs home]# vim /etc/security/limits.conf
追加如下內容,Python為登錄服務器的用戶名:
* soft nofile 65536 * soft nofile 65536 * hard nofile 65536 * soft nproc 5000 * hard nproc 5000
當修改完后,我們可以使用reboot
重新啟動使之生效。
現在,我們去啟動es:
[root@cs home]# ./elasticsearch-6.7.0/bin/elasticsearch # 啟動其bin目錄中的elasticsearch即可
但發現了一個問題導致啟動失敗,原因是elasticsearch不能以root用戶啟動。
我們這里手動創建一個普通用戶:
[root@cs home]# adduser zhangkai [root@cs home]# passwd zhangkai 更改用戶 zhangkai 的密碼 。 新的 密碼: 重新輸入新的 密碼: passwd:所有的身份驗證令牌已經成功更新。
注意,輸入密碼是不會提示的!
然后,我們(此時還是root用戶)為這個普通用戶給elasticsearch目錄權限:
[root@cs home]# chown -R zhangkai /home/elasticsearch-6.7.0
完事后,我們以普通的用戶身份去啟動elasticsearch:
[root@cs home]# su zhangkai [zhangkai@cs home]$ ./elasticsearch-6.7.0/bin/elasticsearch
當然,要停止的話,Ctrl + C
比較簡單粗暴!
現在,讓我們打開瀏覽器訪問吧:
http://10.0.0.200:9200/
不希望你遇到的報錯問題:
- 報錯,
Cannot allocate memory
,無法分配內存:
[root@r myelk]# ./elasticsearch-6.7.0/bin/elasticsearch OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N OpenJDK 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: # logs/hs_err_pid2834.log
這是elasticsearch默認的jvm堆大小,如果你的Linux系統的內存較小,我們可以調整這個值,我們去elasticsearch安裝目錄下的elasticsearch\conf\jvm.options
文件修改這個值。
[root@r home]# vim /home/elasticsearch-6.7.0/config/jvm.options -Xms512m # 原值為-Xms1g -Xmx512m # 原值為-Xmx1g
在es的6.7.0和6.5.4版本中,該值都是默認1G,而我的系統才1G,所以報錯了,我們把它降低一些,而最大和最小值應該是一致的,並且根據物力內存設置一個合理的值,我這里修改為512m。
- 報錯,虛擬內存太小:
There is insufficient memory for the Java Runtime Environment to continue.
由於我使用的是虛擬機,所以分配的內存太小了,手動調大一些就好了。
- 報錯,最大虛擬內存太少了:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
這里需要修改etc/sysctl.conf
文件設置,前文已經提到了。
- 報錯,每個進程打開的文件數量太少:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
4096
是之前設置的太少了。這里需要修改/etc/security/limits.conf
文件。前文已經提到了。
牢記,這幾個報錯,在修改完文件后,需要重新啟動。
除此之外,我們還可以通過rpm
包的方式安裝,當然,具體就不多表了。
# yum install -y java-openjdk yum install java-1.8.0-openjdk -y wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-x86_64.rpm yum install elasticsearch-7.0.0-x86_64.rpm systemctl start elasticsearch systemctl stop elasticsearch
至此,elasticsearch在Linux環境配置基本完事。
kibana for linux
在安裝kibana之前,請確保java環境和elasticsearch都已配置並啟動成功。
在elastic官網的kibana下載頁面,復制tar
包鏈接:
然后,使用wget
命令下載即可:
[root@cs home]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.7.0-linux-x86_64.tar.gz
下載完畢后,我們修改其中的配置文件:
[root@cs home]# vim /home/kibana-6.7.0-linux-x86_64/config/kibana.yml
這里我們暫時添加,不動原文件注釋的內容:
elasticsearch.url: "http://10.0.0.200:9200" server.host: "10.0.0.200"
完事,讓我們啟動(此時你的elasticsearch應該是啟動狀態,並且監聽http://10.0.0.200:9200
)吧:
[root@cs home]# ./kibana-6.7.0-linux-x86_64/bin/kibana
停止的話,Ctrl + C
比較省事!
當我們在茫茫log行發現某一行:
log [07:03:59.832] [info][listening] Server running at http://10.0.0.200:5601
那就表示啟動成功了,我們在瀏覽器地址欄輸入http://10.0.0.200:5601
。
OK,kibana也配置完事。
ik for linux
首先我們應該停掉elasticsearch實例,當然,此時如果你的kibana也在運行的話,就會一直報錯,這不要管它,可以把它也停掉。
在Github上找到與elasticsearch對應的版本(版本必須一致),選擇tar
包右鍵獲取鏈接:
但是,此時如果繼續往下走的話,最后會導致elasticsearch啟動失敗,因為這個源文件需要編譯......所以,為了方便,我直接選擇復制elasticsearch-analysis-ik-6.7.0.zip
的鏈接了。
然后使用wget
命令下載即可,為了簡單我們使用cd
命令將當前目錄切換到/home/elasticsearch-6.7.0/plugins/
。
[root@cs home]# cd /home/elasticsearch-6.7.0/plugins/ [root@cs plugins]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.7.0/elasticsearch-analysis-ik-6.7.0.zip
首先我們在plugins
目錄下創建一個新的ik
目錄,用來保存解壓文件,然后再解壓縮,最后將壓縮包刪除就完事了:
[root@cs plugins]# mkdir ik [root@cs plugins]# unzip -o -d /home/elasticsearch-6.7.0/plugins/ik elasticsearch-analysis-ik-6.7.0.zip [root@cs plugins]# rm -rf elasticsearch-analysis-ik-6.7.0.zip && ls ik
大致說一下unzip -o -p /解壓目標路徑 解壓文件
命令,這個命令就是說將elasticsearch-analysis-ik-6.7.0.zip
文件解壓到/home/elasticsearch-6.7.0/plugins/ik
目錄。-o
的意思是不提示的情況下覆蓋文件,-d
指明將文件解壓縮到指定目錄下。
注意,如果unzip
命令不好使,就手動下載或升級一下:
yum install -y unzip zip
然后啟動elasticsearch實例。你會在啟動日志中找到一行:
就說明該插件已經生效,但是,除非指定使用該插件,否則默認還是使用自帶的分析器,如何要使該插件應用於全局,就在elasticsearch.yml
文件中修改:
index.analysis.analyzer.default.tokenizer : "ik_max_word" index.analysis.analyzer.default.type : "ik"
當然,這個是可選項。
最后的配置(可選)
還有一點可以優化的地方,現在,無論是elasticsearch還是kibana,都是找到絕對路徑去啟動的,我覺得比較麻煩,所以,我們可以將啟動目錄添加到PATH
中,來個一鍵啟動。
首先,找到PAHT
:
[root@cs home]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:
現在的返回結果是原有的,我們需要將elasticsearch和kibana的啟動目錄路徑(絕對路徑)添加到這個路徑中去。
[root@cs home]# vim /etc/profile
在最后添加上拼接的路徑,注意各路徑間的分隔符是英文冒號:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/elasticsearch-6.7.0/bin:/root/bin:/home/kibana-6.7.0-linux-x86_64/bin:"
注意目錄結尾不能有/
,然后source
一下該文件,使之生效:
[root@cs home]# source /etc/profile
此時,我們輸入el
然后按Tab
鍵就可以提示出來所有el
開頭的文件,找到那個啟動文件,就可以啟動它了:
[root@cs home]# elasticsearch OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
如果要想后台執行,就加個&
符號即可:
[root@cs home]# elasticsearch &
這樣程序就會在后台運行,並且返回了當前程序的進程號,方便我們(kill -9
)殺死它!雖然依然會將日志輸出到當前終端,但至少不影響我們使用該終端。並且不用擔心它什么時候結束,其實當前終端被關閉,進程同樣結束。
需要說明的是,我用xshell連接的centos,開了3個終端,所以,有些路徑可能不太連貫,但有一點需要注意的是,所有涉及的啟動elasticsearch的都在普通用戶權限,別的操作可以在root權限下搞。
see also: linux中如何安裝elasticsearch | [elasticsearch啟動常見錯誤](https://www.cnblogs.com/zhi-leaf/p/8484337.html) | java – 無法更改elasticsearch的vm.max_map_count | ElasticSearch啟動報錯,bootstrap checks failed | elasticsearch安裝之各種坑 | Linux下的壓縮zip,解壓縮unzip命令詳解及實例 | github的ik主頁 | medcl/elasticsearch-analysis-ik/releases | Linux 安裝Elasticsearch和配置ik分詞器步驟