docker安装Elasticsearch 8.x步骤
简介
Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticseach已经进化成了一个全能型的数据产品,使用场景包括:日志实时分析、搜索服务、数据分析、数据监控、查询服务、后端存储。
Elastic 8.x版改进了矢量搜索功能,原生支持现代自然语言处理模型,简化了数据上线过程,以及精简了安全防护体验。在速度、扩展幅度、相关性和简便性方面,均有巨大的提升。
使用案例
ElasticSearch在腾讯的应用非常广泛,主要有三个:日志实时分析场景、搜索服务、时序数据分析。
- 搜索服务:腾讯文档基于ES做全文检索,电商客户拼多多、蘑菇街等大量的商品搜索都是基于 ES。
- 日志分析:ES应用最广泛的领域,支持全栈的日志分析,包括各种应用日志、数据库日志、用户行为日志、网络数据、安全数据等等。ES拥有一套完整的日志解决方案,可以秒级实现从采集到展示。
- 时序分析:典型的场景是监控数据分析,比如云监控,整个腾讯云的监控都是基于 ES 的。此外还包括物联网场景,也有大量的时序数据。时序数据的特点是写入吞吐量特别高,ES 支持的同时也提供了丰富的多维统计分析算子。
安装elasticsearch
演示机器是VirtualBox 4.3,虚拟机Linux Centos 7,已安装docker以及其他必须的组件。
# 下载镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.2.0
# 运行容器
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" 镜像ID
- ES_JAVA_OPTS参数指定JVM堆内存大小
- discovery.type参数设置为单节点部署
如果参数设置不合理,可以删除容器再安装:
# 停止容器
docker stop elasticsearch
# 删除容器
docker rm elasticsearch
配置防火墙
防火墙加入9200端口,保证外网可以访问。
# 添加端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
访问接口
由于8.x版本默认开启了ssl认证,必须访问https页面
,页面成功打开后需要输入默认用户名和密码,浏览器响应如下:https://192.168.1.9:9200/
{
"name" : "5111f6a13907",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "Ea0KCTj1RdK-DpqjlV84cQ",
"version" : {
"number" : "8.2.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "b174af62e8dd9f4ac4d25875e9381ffe2b9282c5",
"build_date" : "2022-04-20T10:35:10.180408517Z",
"build_snapshot" : false,
"lucene_version" : "9.1.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
如果访问http地址,浏览器无响应,可以通过查询日志确定原因。
# 查询容器日志
docker logs elasticsearch
出现如下日志,确定不支持http请求。
"@timestamp":"2022-05-06T10:27:23.336Z", "log.level": "WARN", "message":"received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/172.17.0.2:9200, remoteAddress=/172.17.0.1:42900}", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"elasticsearch[d4815aec585a][transport_worker][T#1]","log.logger":"org.elasticsearch.xpack.security.transport.netty4.SecurityNetty4HttpServerTransport","elasticsearch.cluster.uuid":"RtWXsg7WQ6iW5Pj1W6i1QA","elasticsearch.node.id":"D086XXgZSnyMjMepeEGyGw","elasticsearch.node.name":"d4815aec585a","elasticsearch.cluster.name":"docker-cluster"}
如有需要可以关闭SSL和安全校验,操作步骤如下:
# 进入容器
docker exec -it elasticsearch /bin/bash
# 配置目录
cd config
# 编辑yml
vi elasticsearch.yml
修改elasticsearch.yml的配置项xpack.security.http.ssl.enable为false,关闭ssl访问;xpack.security.enabled为flase,关闭安全校验。
重置密码
Elasticsearch的默认用户是elastic,在安装日志中可以找到,但是建议重置密码。
# 进入容器
docker exec -it elasticsearch /bin/bash
# 工具目录bin
cd bin
# 重置密码
elasticsearch-reset-password -u elastic
控制台提示信息:
This tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]
输入y继续生成新密码
Password for the [elastic] user successfully reset.
New value: uCHxv3mUz*3+DT-m8QZv
最终的用户名和密码是:elastic / uCHxv3mUz*3+DT-m8QZv
测试REST API
创建索引“member”命令
curl -X PUT 'http://192.168.1.9:9200/member'
索引创建成功返回:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "member"
}
查询索引“member”命令
curl -X PUT 'http://192.168.1.9:9200/member'
索引查询成功返回:
{
"member": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "1",
"provided_name": "member",
"creation_date": "1651901573923",
"number_of_replicas": "1",
"uuid": "iMmYZE-XSE2-ewsLg2pDJw",
"version": {
"created": "8020099"
}
}
}
}
}
参考
http://t.zoukankan.com/wxxf-p-15045970.html
https://www.bilibili.com/read/cv7694434
https://www.pianshen.com/article/29761364843/
https://blog.csdn.net/wtl1992/article/details/124072854
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html
本文链接:https://www.codingbrick.com/archives/622.html
特别声明:除特别标注,本站文章均为原创,转载请注明作者和出处倾城架构,请勿用于任何商业用途。