在使用 Elasticsearch 之前,首先要保证虚拟机或云服务器有足够的内存;
Elasticsearch 因其底层原理,非常吃内存;
1、docker 下载 Elasticsearch、kibana
docker pull elasticsearch:7.10.1
docker pull kibana:7.10.1
elasticsearch 和 kibana 的版本号一定要一致!
版本可以在 https://hub.docker.com/_/kibana?tab=tags&page=1 中查询
2、创建 elasticsearch 映射目录
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
3、修改配置文件,让所有 ip 地址均可访问
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
4、创建、启动、映射目录文件
docker run --name es -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms64m -Xmx256m" \ -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.10.1
# 9200:用于发送 http 请求的端口号;
# 9300:es 分布式情况下的通讯端口号;
# -e "discovery.type=single-node":es 以单节点运行;
# -e ES_JAVA_OPTS="-Xms64m -Xmx512m":设置 es 启动参数,不设置的话 es 会占用大量的内存空间;
# -v 相关指令:config 映射配置文件;data 映射数据;plugins 映射 es 可以安装的插件;
# -d elasticsearch:7.10.1:启动 es;
5、修改配置文件的权限
此时使用 docker ps -a 可以看到启动的 es 的状态为 Exited;
使用 docker logs es 查看日志:
ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes]; Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:388) at java.base/java.nio.file.Files.createDirectory(Files.java:694) at java.base/java.nio.file.Files.createAndCheckIsDirectory(Files.java:801) at java.base/java.nio.file.Files.createDirectories(Files.java:787) at org.elasticsearch.env.NodeEnvironment.lambda$new$0(NodeEnvironment.java:275) at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:212) at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:272) at org.elasticsearch.node.Node.<init>(Node.java:362) at org.elasticsearch.node.Node.<init>(Node.java:289) at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:227) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:227) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:393) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) For complete error details, refer to the log at /usr/share/elasticsearch/logs/elasticsearch.log
错误说是访问的文件没有权限;
也就是映射出来的 /mydata/elasticsearch 中的文件没有权限;
使用下面的指令进行修改:
chmod -R 777 /mydata/elasticsearch
6、重新启动 es 容器
docker restart es
7、使用浏览器访问 es 的 9200 端口
使用浏览器访问 es 所在服务器的 9200 端口,如果出现下面的 json 字符串,表示 es 正常运行;
{ "name" : "5cc88f927be3", "cluster_name" : "elasticsearch", "cluster_uuid" : "pLcairiDSBO4OKL1wxhbLw", "version" : { "number" : "7.10.1", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "1c34507e66d7db1211f66f3513706fdf548736aa", "build_date" : "2020-12-05T01:00:33.671820Z", "build_snapshot" : false, "lucene_version" : "8.7.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
8、启动 kibnan
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.1:9200 -p 5601:5601 -d kibana:7.10.1
注意,这里的 172.17.0.1 需要自行配置;
如果安装的 es 和 kibana 在同一台服务器上,使用 docker inspect es 查看 es 容器的 Gateway,填写对应的 ip 地址;
如果 es 和 kibana 不在同一个服务器,使用 es 所在服务器的 ip 地址替换 172.17.0.1;
9、使用浏览器访问服务器的 5601 端口
第一次安装的话,这个页面之前还有一个页面,我忘记截屏了;