Elasticsearch(簡(jiǎn)稱ES) 是一個(gè)分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎,它也是一個(gè)“存儲(chǔ)庫(kù)”。
它能很方便地使大量數(shù)據(jù)具有搜索、分析和探索的能力。充分利用 ES 的水平伸縮性,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價(jià)值。
本文踏出使用ES的第一步-環(huán)境部署,這里把可能遇到的問(wèn)題整理了一下,詳見(jiàn)文章內(nèi)容。
安裝Elasticsearch 7.10
# 為Elasticsearch添加用戶
useradd elastic
# 設(shè)置密碼
passwd elastic
cd /home/elastic
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-darwin-x86_64.tar.gz
tar -zxvf elasticsearch-7.10.2-darwin-x86_64.tar.gz
cd elasticsearch-7.10.2/
這個(gè)home/elastic/elasticsearch-7.10.2目錄就是ES的家目錄,后面用$ES_HOME代替。
可以使用$ES_HOME/bin/elasticsearch直接啟動(dòng)了,但是會(huì)有一些問(wèn)題,下面來(lái)總結(jié)一下。
centos 7環(huán)境下啟動(dòng)ES7遇到的問(wèn)題
root用戶下啟動(dòng)ES報(bào)錯(cuò)
如果沒(méi)有配置ES環(huán)境變量,需要進(jìn)入到$ES_HOME的bin目錄下,執(zhí)行elastisearch命令啟動(dòng),每次這樣啟動(dòng)感覺(jué)有點(diǎn)繁瑣,我們來(lái)配置一下環(huán)境變量:
vi /etc/profile
# 添加
export ES_HOME=/home/elastic/elasticsearch-7.10.2
export PATH=$PATH:$JAVA_HOME/bin:$ES_HOME/bin
# 使之生效
source /etc/profile
然后在任何地方都可以直接敲elasticsearch命令來(lái)啟動(dòng)ES了。
but,你會(huì)收到這樣的錯(cuò)誤:
[2021-05-19T23:13:27,102][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [elk-standalone] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
提示很明顯了,就是不讓用root用戶啟動(dòng)ES,這個(gè)解決方法簡(jiǎn)單,切換到普通用戶再啟動(dòng)就行了。
前面安裝步驟中我已經(jīng)提前機(jī)智的添加好elastic用戶了,現(xiàn)在派上用場(chǎng)了。
切換到elastic用戶,再直接用elasticsearch命令就不行了,因?yàn)檫€沒(méi)有為這個(gè)elastic用戶配置環(huán)境變量呢,現(xiàn)在來(lái)配置:
vi ~/.bash_profile
# 同樣加上ES的家目錄
export ES_HOME=/home/elastic/elasticsearch-7.10.2
export PATH=$PATH:$ES_HOME/bin
# 使之生效
source ~/.bash_profile
這樣就可以和root用戶一樣爽了!
啟動(dòng)成功:
使用jps看一下:
客戶端連接問(wèn)題
成功啟動(dòng)以后,我們用postman連一下試試,地址:http://192.168.242.120:9200
連接不上!
這個(gè)時(shí)候根據(jù)經(jīng)驗(yàn)就要去看一下配置文件了,ES的配置文件在$ES_HOME/config目錄下,瞅瞅:
打開(kāi)elasticsearch.yml,修改其中的配置項(xiàng):
# 將network.host修改為0.0.0.0,使客戶端能連接
network.host: 0.0.0.0
重新啟動(dòng)之,應(yīng)該就行了吧?
啟動(dòng)報(bào)錯(cuò)
按Ctrl-C直接關(guān)掉ES,
前面說(shuō)的啟動(dòng)都是在前臺(tái)啟動(dòng)ES,實(shí)際中我們不可能前臺(tái)啟動(dòng)程序,一般都是后臺(tái)啟動(dòng),這里為了方便看日志和演示才前臺(tái)啟動(dòng)。
后臺(tái)啟動(dòng)時(shí),直接在 elasticsearch -d就好了,停服務(wù)的時(shí)候,先找到ES的PID,然后kill掉。
重新輸入elasticsearch啟動(dòng),這次竟然報(bào)錯(cuò)了!
報(bào)錯(cuò)詳細(xì)信息:
bound or publishing to a non-loopback address, enforcing bootstrap checks
ERROR: [4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3795] for user [elastic] 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]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
ERROR: Elasticsearch did not exit normally - check the logs at /home/elastic/elasticsearch-7.10.2/logs/elasticsearch.log
有四項(xiàng)錯(cuò)誤:
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3795] for user [elastic] is too low, increase to at least [4096]
這兩項(xiàng)的意思就是elasticsearch進(jìn)程的最大文件描述符[4096]太低,至少增加到[65535];用戶elastic的最大線程數(shù)[3795]太低,至少增加到[4096]。
那么我們就來(lái)按照它的指示增加一下:
# 在root用戶下操作
vim /etc/security/limits.conf
# 修改最大進(jìn)程數(shù)和最大線程數(shù)
# 在文件末尾添加
elastic hard nofile 65536
elastic soft nofile 65536
elastic hard nproc 4096
elastic soft nproc 4096
其中elastic為運(yùn)行ES程序的用戶。
再來(lái)看下一個(gè)問(wèn)題:
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
這個(gè)提示是要讓我們改一下vm.max_map_count,這個(gè)參數(shù)在/etc/sysctl.conf這個(gè)文件里添加:
# 在root用戶下操作
vi /etc/sysctl.conf
# 在文件末尾添加
vm.max_map_count = 655360
# 保存退出
# 使之生效
sysctl -p
第四個(gè)問(wèn)題:
[4]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
意思是默認(rèn)的配置不適合生產(chǎn)使用,必須至少配置discovery.seed_hosts、discovery.seed_providers、cluster.initial_master_nodes中的一個(gè),這就需要我們?cè)俑南耤onfig/elasticsearch.yml文件了:
# config/elasticsearch.yml文件,修改如下的參數(shù)下如:
node.name: node-1
cluster.initial_master_nodes: ["node-1"]
OK,保存,再次用elastic用戶重啟,見(jiàn)證奇跡:
啟動(dòng)成功!
再用postman驗(yàn)證一下:
完美解決!
最后
Elasticsearch,
“You Know, for Search”
文章首發(fā)公眾號(hào):行百里er,歡迎大家關(guān)注。代碼倉(cāng)庫(kù):
https://github.com/xblzer/JavaJourney