1. 程式人生 > >Linux下ElasticSearch6.4.x、ElasticSearch-Head、Kibana以及中文分詞器IK的安裝配置

Linux下ElasticSearch6.4.x、ElasticSearch-Head、Kibana以及中文分詞器IK的安裝配置

ElasticSearch 安裝配置

下載

# 官網下載壓縮包
[[email protected] /home]#  wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz
# 解壓
[[email protected] /home]#  tar -zxvf elasticsearch-6.4.2.tar.gz

啟動:

[[email protected] /home]# elasticsearch-6.4.2/bin/elasticsearch

報錯:

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

大體意思就是 ElasticSearch 預設不允許以 root 使用者啟動(出於安全考慮)

解決方法:建立使用者組及使用者

具體步驟:

建立使用者組:
# es_group:組名
[[email protected] bin]# groupadd esgroup

建立使用者:
# esroot:使用者名稱   -g:指定使用者組   -p:指定密碼
[[email protected] bin]# useradd esroot -g esgroup -p password

更改 ElasticSearch 資料夾及子檔案的所屬使用者及使用者組:
[
[email protected]
/home]# chown -R esroot:esgroup elasticsearch-6.4.2 切換到新建立的使用者並重新執行啟動命令: [[email protected] /home]# su esroot [[email protected] /home]$ elasticsearch-6.4.2/bin/elasticsearch

這個時候,正常情況下都是可以啟動成功的,但是目前只能在內網訪問,接下來我們還需要開啟外網訪問許可權

[[email protected] /home]$ vim elasticsearch-6.4.2/config/elasticsearch.yml

主要修改兩個地方: network.host 和 http.port
注意:每行配置前面都需要加一個空格,冒號後面也需要一個空格,即:
(空格)network.host:(空格)0.0.0.0
(空格)http.port:(空格)9200

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
 network.host: 0.0.0.0        <-- 開啟註釋,設定地址為 0.0.0.0
#
# Set a custom port for HTTP:
#
 http.port: 9200        <-- 開啟註釋,預設埠為9200
#
# For more information, consult the network module documentation.

儲存之後重新啟動

[[email protected] /home]$ elasticsearch-6.4.2/bin/elasticsearch

再次報錯:
[2018-10-19T10:35:29,459][INFO ][o.e.t.TransportService   ] [wVDAxQP] publish_address {172.17.128.111:9300}, bound_addresses {0.0.0.0:9300}
[2018-10-19T10:35:29,493][INFO ][o.e.b.BootstrapChecks    ] [wVDAxQP] bound or publishing to a non-loopback address, enforcing bootstrap checks
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2018-10-19T10:35:29,617][INFO ][o.e.n.Node               ] [wVDAxQP] stopping ...
[2018-10-19T10:35:29,693][INFO ][o.e.n.Node               ] [wVDAxQP] stopped
[2018-10-19T10:35:29,693][INFO ][o.e.n.Node               ] [wVDAxQP] closing ...
[2018-10-19T10:35:29,719][INFO ][o.e.n.Node               ] [wVDAxQP] closed

主要有兩處報錯:
1、elasticsearch可以建立的檔案描述(file descriptors)太少
2、虛擬記憶體太小

[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

繼續解決

[[email protected] /home]$ su root
[[email protected] /home]# vim /etc/security/limits.conf

修改檔案最後的幾項配置
root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536

設定 vm.max_map_count

# 方法1:臨時生效
[[email protected] /home]# sysctl -w vm.max_map_count=262144

# 方法2:永久生效
[[email protected] /home]# vim /etc/sysctl.conf
加入配置:
vm.max_map_count=262144
[[email protected] /home]# sysctl -p

儲存之後切換使用者並重新啟動

[[email protected] /home]# su esroot
[[email protected] /home]$ elasticsearch-6.4.2/bin/elasticsearch (如果想後臺執行的話,在後面加 -d 引數即可)

到此為止,ElasticSearch 安裝完成,我們可以選擇繼續安裝 ElasticSearch-Head 或 Kibana ,這兩款軟體都是 ElasticSearch 的客戶端管理軟體,個人比較推薦 Kibana。 



ElasticSearch-Head 安裝配置

因為安裝 ElasticSearch-Head 需要使用到 npm 包管理器,所以需要我們提前安裝好 NodeJS ,安裝 NodeJS 的方法可以參考:https://juejin.im/post/5ad424c16fb9a028c06b48f0安裝好 nodejs 之後,我們開始安裝 ElasticSearch-Head 

[[email protected] /home]# git clone git://github.com/mobz/elasticsearch-head.git
[[email protected] /home]# cd elasticsearch-head
[[email protected] /home]# npm install

若在 npm install 的過程中報錯:
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:

解決方法:
[[email protected] /home]# npm install [email protected] --ignore-scripts

然後重新執行
[[email protected] /home]# npm install 

依賴安裝完成後,我們需要修改一些配置

1.修改Gruntfile.js,允許外網訪問 elasticsearch-head

[[email protected] /home]# vim elasticsearch-head/Gruntfile.js

找到 grunt.initConfig 中的 connect 配置,在 options 中新增 hostname: '*',(注意,冒號後面有個空格)

connect: {
        server: {
               options: {
                        hostname: '*',
                     port: 9100,
                     base: '.',
                     keepalive: true
                }
         }
}

2.修改預設連線地址,配置 elasticsearch-head 監控的elasticsearch節點IP地址

[[email protected] /home]# vim elasticsearch-head/_site/app.js

找到 this.base_uri 的配置(在4354行左右,可以通過搜尋找到)
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
將 localhost 修改成 elasticsearch 所在的伺服器地址

3.配置 elasticsearch 允許跨域訪問

[[email protected] /home]# elasticsearch-6.4.2/config/elasticsearch.yml
在檔案結尾新增兩行配置:(同樣的,每行開頭和冒號後面都需要加一個空格)
 http.cors.enabled: true
 http.cors.allow-origin: '*'

4.防火牆開啟9100埠,並重啟防火牆

[[email protected] /home]# firewall-cmd --zone=public --add-port=9100/tcp --permanent
[[email protected] /home]# firewall-cmd --reload

這樣,我們的 ElasticSearch 和 ElasticSearch-Head 已完成基本的配置,我們可以啟動並檢視效果

# 切換使用者
[[email protected] /home]# su esroot

# 啟動 ElasticSearch 服務
[[email protected] /home]$ elasticsearch-6.4.2/bin/elasticsearch

# 啟動 ElasticSearch-Head
[[email protected] /home]$ cd elasticsearch-head
[[email protected] /home]$ npm run start
(注:如果需要放到後臺執行,可以採用nohup的形式,即:nohup npm run start &)

我們可以檢視當前埠情況

[[email protected] /home]$ netstat -tunlp

可以看到,目前9100、9200、9300埠正在執行,其中:
9100埠:ElasticSearch-Head 佔用埠
9200、9300埠:ElasticSearch 佔用埠,9200是http協議的RESTful介面,9300是tcp通訊埠,叢集間和TCPClient都走的它


Kibana 安裝配置

注:安裝Kibana的版本需要與ElasticSearch的版本保持一致

1.下載、解壓

# 下載
[[email protected] home]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.2-linux-x86_64.tar.gz

# 解壓
[[email protected] home]# tar -zxvf kibana-6.4.2-linux-x86_64.tar.gz
[[email protected] home]# mv kibana-6.4.2-linux-x86_64 kibana-6.4.2

2.修改配置檔案

# 提權
[[email protected] home]# su

# 編輯配置檔案
[[email protected] home]# vim kibana-6.4.2/config/kibana.yml

修改 server.host 和 elasticsearch.url 的配置,分別指定 kibana 和 elasticsearch 所在的伺服器及埠
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"

3.開啟5601埠

# 開啟防火牆
[[email protected] home]# systemctl start firewalld

# 允許埠
[[email protected] home]# firewall-cmd --zone=public --add-port=5601/tcp --permanent

# 重啟防火牆
[[email protected] home]# systemctl restart firewalld 

4.啟動 Kibana

# 啟動 ElasticSearch 服務(若已啟動,則忽略)
[[email protected] /home]# elasticsearch-6.4.2/bin/elasticsearch

# 啟動 Kibana
[[email protected] /home]# kibana-6.4.2/bin/kibana

按照以上步驟 ElasticSearch 和 Kibana 應該是可以正常執行起來的,我們可以通過訪問 http://<kibana_server_ip>:5601 看是否啟動成功

 


 

中文分詞器 IK

 

首先進入到 ElasticSearch 的路徑下面,然後執行下面的命令,其中的 6.4.2 替換成你的 ElasticSearch 版本

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.2/elasticsearch-analysis-ik-6.4.2.zip

安裝完後重啟 ElasticSearch 即可(注意需要使用 esroot 使用者啟動)