二、Docker 安裝
1、下載鏡像文件
下載elasticsearch
docker pull elasticsearch:7.4.2 # 存儲(chǔ)和檢索數(shù)據(jù)
下載kibana
docker pull kibana:7.4.2 # 可視化檢索數(shù)據(jù)
注意:elasticsearch 要和 kibana 的版本保持一致!
2、創(chuàng)建實(shí)例
1. ElasticSearch
mkdir -p /mydata/elasticsearch/config # 在mydata文件夾下創(chuàng)建es的config文件夾,將docker中es的配置掛載在外部,當(dāng)我們?cè)趌inux虛擬機(jī)中修改es的配置文件時(shí),就會(huì)同時(shí)修改docker中的es的配置
mkdir -p /mydata/elasticsearch/data #在mydata文件夾下創(chuàng)建es的data文件夾
echo "http.host:0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml # [http.host:0.0.0.0]允許任何遠(yuǎn)程機(jī)器訪問es,并將其寫入es的配置文件中
chmod -R 777 /mydata/elasticsearch/ # 保證權(quán)限問題
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
# docker run --name elasticsearch 創(chuàng)建一個(gè)es容器并起一個(gè)名字;
# -p 9200:9200 將linux的9200端口映射到docker容器的9200端口,用來給es發(fā)送http請(qǐng)求
# -p 9300:9300 9300是es在分布式集群狀態(tài)下節(jié)點(diǎn)之間的通信端口 \ 換行符
# -e 指定一個(gè)參數(shù),當(dāng)前es以單節(jié)點(diǎn)模式運(yùn)行
# *注意,ES_JAVA_OPTS非常重要,指定開發(fā)時(shí)es運(yùn)行時(shí)的最小和最大內(nèi)存占用為64M和128M,否則就會(huì)占用全部可用內(nèi)存
# -v 掛載命令,將虛擬機(jī)中的路徑和docker中的路徑進(jìn)行關(guān)聯(lián)
# -d 后臺(tái)啟動(dòng)服務(wù)
安裝完 elasticsearch 后我們來啟動(dòng)一下,會(huì)發(fā)現(xiàn)使用docker ps命令查看啟動(dòng)的容器時(shí)沒有找到我們的 es,這是因?yàn)槟壳?es 的配置文件的權(quán)限導(dǎo)致的,因此我們還需要修改一下 es 的配置文件的權(quán)限:
[root@10 config]# cd ../
[root@10 elasticsearch]# ls
config data plugins
[root@10 elasticsearch]# cll
bash: cll: command not found
[root@10 elasticsearch]# ll
total 0
drwxr-xr-x. 2 root root 31 May 21 14:55 config
drwxr-xr-x. 2 root root 6 May 21 14:52 data
drwxr-xr-x. 2 root root 6 May 21 15:14 plugins
[root@10 elasticsearch]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
53c0e82ded18 redis "docker-entrypoint.s…" 6 weeks ago Up 4 hours 0.0.0.0:6379->6379/tcp redis
e1c1b5a6012e mysql:5.7 "docker-entrypoint.s…" 6 weeks ago Up 4 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
[root@10 elasticsearch]# chmod -R 777 /mydata/elasticsearch/
[root@10 elasticsearch]# ll
total 0
drwxrwxrwx. 2 root root 31 May 21 14:55 config
drwxrwxrwx. 2 root root 6 May 21 14:52 data
drwxrwxrwx. 2 root root 6 May 21 15:14 plugins
修改完文件權(quán)限后,我們使用docker start elasticsearch再次啟動(dòng) es,使用docker ps命令查看后發(fā)現(xiàn)容器還是沒有啟動(dòng),這是問什么呢?
我們使用docker logs elasticsearch看一下 es 的啟動(dòng)日志:
[root@10 elasticsearch]# docker logs elasticsearch
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
2020-05-21 15:14:13,179 main ERROR No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];
at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1097)
at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:1070)
at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:83)
at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:95)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:125)
at org.elasticsearch.cli.Command.main(Command.java:90)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)
Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]]
at org.elasticsearch.common.xcontent.XContentParserUtils.ensureExpectedToken(XContentParserUtils.java:78)
at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:617)
at org.elasticsearch.common.settings.Settings.access$400(Settings.java:82)
上述錯(cuò)誤是由于我之前配置elasticsearch.yml文件的時(shí)候k-v鍵值對(duì)配置錯(cuò)誤導(dǎo)致的,查看 yml 文件會(huì)發(fā)現(xiàn)我配置的內(nèi)容是這樣的:
http.host:0.0.0.0
而實(shí)際上k-v鍵值對(duì)之間應(yīng)該有空格,注意 yml 配置文件中key: value格式冒號(hào)后面要跟一個(gè)空格。否則就會(huì)導(dǎo)致上面的錯(cuò)誤。
因此需要修改一下elasticsearch.yml文件,修改為:
http.host: 0.0.0.0
修改并保存之后再次使用docker start elasticsearch啟動(dòng) es,使用docker ps命令產(chǎn)看后可以看到我的 es 容器已經(jīng)啟動(dòng)起來了:
在瀏覽器地址欄訪問http://192.168.56.10:9200/,可以看到 es 啟動(dòng)成功后返回類似下面的數(shù)據(jù):
注意
192.168.56.10是我的linux虛擬機(jī)的地址,讀者需要根據(jù)自己的虛擬機(jī)地址來進(jìn)行訪問
參考:
Elasticsearch Reference
elastic
全文搜索引擎 Elasticsearch 入門教程