ElasticSearch8

By | 2024年1月29日

Docker 启动 Elastic

开启安全模式

docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 容器用户 elasticsearch,uid:gid 1000:0,映射的文件该用户必须可读,映射的数据和日志目录必须可写入。不是每台服务器都有 elasticsearch 用户,直接用 1000 就可以了
chown 1000:0 /home/elasticsearch/data

# Elastic8 默认已开启安全模式,不仅要账号密码登录,调用 RestAPI 接口是 https,要CA证书。
# 默认情况下,启动容器将自动生成密钥库文件以进行安全设置。该文件已被混淆但未加密。
docker run -it --rm --name es01 --net elastic -p 9200:9200 -m 1GB -v /home/elasticsearch/data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 上面命令会打印一个 elastic 用户密码和一个用于 kibana 的注册 token,也可以单独使用下面命令生成
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

# 从容器中拷贝 SSL  证书到本地机器
docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
# 拷出来后映射这个证书文件,然后重启下
docker run -it --rm --name es01 --net elastic -p 9200:9200 -m 1GB -v /home/elasticsearch/http_ca.crt:/usr/share/elasticsearch/config/certs/http_ca.crt -v /home/elasticsearch/data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 使用 REST API 测试 ES 容器是否已起来,必须用 localhost 来测,否则会报错:requested domain name does not match the server's certificate
export ELASTIC_PASSWORD="zq*aBSBO4mFhhzu*LxnT"
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200

# 没问题后启动 Kibana(起来后,访问打印出的链接,输入 Enrollment token 后还要输入 Elastic 的账号密码)
docker pull docker.elastic.co/kibana/kibana:8.12.0
docker run --rm --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.0

# 【可选】若想导出 Elastic 配置,可以使用这个命令
docker cp es01:/usr/share/elasticsearch/config/elasticsearch.yml .

使用 Docker 环境变量来配置 Elasitc 参数,请参考:Install Elasticsearch with Docker

禁用安全模式

docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 容器用户 elasticsearch,uid:gid 1000:0,映射的文件该用户必须可读,映射的数据和日志目录必须可写入。不是每台服务器都有 elasticsearch 用户,直接用 1000 就可以了
chown 1000:0 /home/elasticsearch/data

# 启动Elastic,禁用安全认证
docker run -it --rm --name es01 --net elastic -p 9200:9200 -m 1GB -e "discovery.type=single-node" -e "xpack.security.enabled=false" -v /home/elasticsearch/data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 测试 http 服务是否可用
curl http://192.168.3.222:9200

# 没问题后,启用 Kibana(无需映射 Volumns,都存在 Elastic 数据目录中)
docker run --rm --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.0

Kibana 起来后,访问打印出的链接,点 “Configure manually” 跳过 Enrollment token 输入,填正确的 Elastic 访问地址即可进入 Kibana。

启动容器时,如果禁用安全认证,会报错: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,解决办法:容器启动时添加 -e “discovery.type=single-node”

仅禁用 Https

# 启动 Elastic,仅禁用 https,不禁用安全认证。此时必须要用账号密码登录,但是 ELASTIC_USERNAME 环境变量必须设置 elastic,改成其他的不管用的,也可以不设置此环境变量,默认用户就是 elastic
docker run -it --rm --name es01 --net elastic -p 9200:9200 -m 1GB -e "discovery.type=single-node" -e xpack.security.http.ssl.enabled=false -e xpack.security.transport.ssl.enabled=false -e ELASTIC_USERNAME=elastic -e "ELASTIC_PASSWORD=DkIedPPSCb" docker.elastic.co/elasticsearch/elasticsearch:8.12.0

# 测试 http 服务是否可用
curl -XGET -u "elastic:DkIedPPSCb" http://192.168.3.222:9200?pretty

# 没问题后,启用 Kibana(启动会报错:elastic 是 superuser 账号,无法写入Kibana需要运行的系统索引,请改用服务帐户令牌,暂时未处理,有空再研究了)
docker run --rm --name kib01 --net elastic -p 5601:5601 -e ELASTICSEARCH_USERNAME=elastic -e "ELASTICSEARCH_PASSWORD=DkIedPPSCb" docker.elastic.co/kibana/kibana:8.12.0

elasticsearch-java 客户端

在使用 Elasticsearch 时,常用 Kibana 以交互方式准备和测试查询、聚合、索引映射和其他复杂的API调用,这将产生您可能希望在应用程序中使用的工作 JSON 片段。
因此 Java API 客户端中的大多数数据类都可以从JSON文本加载:对象构建器具有从原始JSON填充构建器的withJson()方法,参考:Creating API objects from JSON data

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注