赞
踩
Elasticsearch 是一个强大的开源搜索引擎,它提供了全文搜索的功能,并且能够处理大规模数据的实时索引和分析。它的设计基于分布式架构,使得数据可以在多个节点上分布存储,从而实现高可用性和水平扩展。
Elasticsearch 的核心是 Apache Lucene,一个高效的全文搜索引擎库。但是,Elasticsearch 通过其简单的 RESTful API 封装了 Lucene 的复杂性,使得开发者可以更容易地构建和维护搜索应用。
Elasticsearch 支持多种数据类型和格式,包括结构化和非结构化数据。它的搜索引擎能够对数据进行快速的全文搜索,同时提供丰富的查询DSL(领域特定语言),使得用户可以构建复杂的搜索查询。
此外,Elasticsearch 还具备数据分析和可视化的能力,通过集成 Kibana 和其他 Elastic Stack 组件,用户可以对数据进行深入的分析和直观的展示。Elasticsearch 的这些特性使其成为处理日志数据、监控系统、内容搜索等多种用例的理想选择。
# 创建自定义网络
docker network create --driver bridge --subnet 172.0.0.0/16 woniu_network
# 查看已存在网络
docker network ls
# 创建主节点数据存放目录
mkdir -p /home/docker/elasticsearch/master/data \
&& chmod 777 /home/docker/elasticsearch/master/data
# 创建主节点配置存放目录
mkdir -p /home/docker/elasticsearch/master/config \
&& chmod 777 /home/docker/elasticsearch/master/config
# 创建主节点日志存放目录
mkdir -p /home/docker/elasticsearch/master/logs \
&& chmod 777 /home/docker/elasticsearch/master/logs
# 创建主节点插件存放目录
mkdir -p /home/docker/elasticsearch/master/plugins \
&& chmod 777 /home/docker/elasticsearch/master/plugins
通过 Docker Hub 查询 Elasticsearch 如下图:
版本选择 8.13.0 如下图:
参考文档:Elasticsearch 安全功能入门
参考文档:Elasticsearch 设置最低安全性
# 安装并运行 Elasticsearch
docker run -d -p 9200:9200 -p 9300:9300 \
--name elasticsearch_master \
--restart=always \
--network woniu_network \
--ip 172.0.0.92 \
--cpuset-cpus="1" \
--memory="2G" \
-e TZ="Asia/Shanghai" \
-e LANG="C.UTF-8" \
elasticsearch:8.13.0
参考文档:安全基本设置
# 在容器 elasticsearch_master 中开启一个交互模式的终端
docker exec -it elasticsearch_master /bin/bash
# 第一步,生成证书,使用 Elasticsearch certutil 工具为集群生成CA。
./bin/elasticsearch-certutil ca
# 1、出现提示时,接受默认文件名,即elastic-stack-ca.p12。
# 此文件包含CA的公共证书和用于对每个节点的证书进行签名的私钥。
# 2、输入CA的密码。如果您没有部署到生产环境,则可以选择将密码留空。
# 第二步,在任何单个节点上,为群集中的节点生成证书和私钥。
# 您包括在上一步中生成的 elastic-stack-ca.p12 输出文件。
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
# 用于对证书进行签名的CA文件的名称。elasticsearch certutil工具的默认文件名为elastic-stack-ca.p12。
# 1、输入CA的密码,如果在上一步中没有配置密码,请按Enter。
# 2、为证书创建密码并接受默认文件名。
# 输出文件是一个名为elastic-certificates.012的密钥库。此文件包含节点证书、节点密钥和CA证书。
# 第三步,把容器中生成的证书复制出来
# 1、退出 elasticsearch_master 容器
exit
# 2、复制 elastic-stack-ca.p12
docker cp -a elasticsearch_master:/usr/share/elasticsearch/elastic-stack-ca.p12 /home/docker/elasticsearch/master/config/certs/
# 3、复制 elastic-certificates.p12
docker cp -a elasticsearch_master:/usr/share/elasticsearch/elastic-certificates.p12 /home/docker/elasticsearch/master/config/certs/
# 如果是集群环境,在集群中的每个节点上,将elastic-certificates.012文件复制到$ES_PATH_CONF目录中。
第一步,生成 CA 证书,如下图
第二步,在任何单个节点上,为群集中的节点生成证书和私钥,如下图
参考文档:Elasticsearch 配置文档
# 把容器中的 elasticsearch_master 配置文件复制出来
docker cp -a elasticsearch_master:/usr/share/elasticsearch/config/ /home/docker/elasticsearch/master/
# 删除 elasticsearch_master 容器
docker rm -f elasticsearch_master
# 修改 elasticsearch_master 配置文件权限
chmod 777 /home/docker/elasticsearch/master/config
# 进入主节点配置文件目录
cd /home/docker/elasticsearch/master/config
# 备份一下原配置文件
cp elasticsearch.yml elasticsearch_bf.yml
# 编辑单机版配置文件
vi elasticsearch.yml
先清空原文件,拷贝如下内容:
# 集群名称,必须一样
# cluster.name: woniu
# 当前该节点的名称,必须不一样
node.name: elasticsearch_master
# 表示主节点
# node.master: true
# 设置网关地址
network.host: 0.0.0.0
# 设置映射端口
http.port: 9200
# 单机运行,此设置可确保您的节点不会无意中连接到可能在您的网络上运行的其他集群。
discovery.type: single-node
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
# 支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization
http.cors.allow-credentials: true
# 设置为 true 则在节点上启用X-Pack安全特性,false表示禁用X-Pack安全特性
xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/http.p12
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/transport.p12
xpack.security.transport.ssl.truststore.path: certs/transport.p12
# 自定义启动 Elasticsearch
docker run -d -p 9200:9200 -p 9300:9300 \
--name elasticsearch_master \
--restart=always \
--network woniu_network \
--ip 172.0.0.92 \
--cpuset-cpus="1" \
--memory="2G" \
-v /home/docker/elasticsearch/master/config/:/usr/share/elasticsearch/config/ \
-v /home/docker/elasticsearch/master/data/:/usr/share/elasticsearch/data/ \
-v /home/docker/elasticsearch/master/plugins/:/usr/share/elasticsearch/plugins/ \
-v /home/docker/elasticsearch/master/logs/:/usr/share/elasticsearch/logs/ \
-v /etc/localtime:/etc/localtime \
-e TZ="Asia/Shanghai" \
-e LANG="C.UTF-8" \
elasticsearch:8.13.0
# 在容器 elasticsearch_master 中开启一个交互模式的终端
docker exec -it elasticsearch_master /bin/bash
# 设置用户名和密码的命令,这里需要为 7 个用户分别设置密码
# elastic,apm_system,kibana,kibana_system,logstash_system
# ,beats_system,remote_monitoring_user
bin/elasticsearch-setup-passwords interactive
示例如下:
# 删除 Elasticsearch
docker rm -f elasticsearch_master
浏览器访问IP:9200,因为我们设置了安全模式所以需要输入密码,用户名示例:elastic 或 kibana,密码是刚才自定义设置,点击登录:
如果出现以下界面就是安装成功
{
"name":"elasticsearch_master",
"cluster_name":"woniu",
"cluster_uuid":"mFIVki4sSiioTH9I7qNKkw",
"version":{
"number":"7.16.2",
"build_flavor":"default",
"build_type":"docker",
"build_hash":"2b937c44140b6559905130a8650c64dbd0879cfb",
"build_date":"2021-12-18T19:42:46.604893745Z",
"build_snapshot":false,
"lucene_version":"8.10.1",
"minimum_wire_compatibility_version":"6.8.0",
"minimum_index_compatibility_version":"6.0.0-beta1"
},
"tagline":"You Know, for Search"
}
Docker 简单部署 Kibana 7.16.2 超详细图文步骤
max_map_count 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量
ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/woniu.log
解决方案
# elasticsearch用户拥有的内存权限太小,至少需要262144
# 查看配置 sysctl.conf
cat /etc/sysctl.conf
# 修改配置 sysctl.conf
sudo vi /etc/sysctl.conf
# 添加下面配置:
vm.max_map_count=655360
# 执行命令:
sysctl -p
Docker 安装文件目录权限问题
[0.000s][error][logging] Error opening log file 'logs/gc.log': Permission denied
[0.000s][error][logging] Initialization of output 'file=logs/gc.log' using options 'filecount=32,filesize=64m' failed.
解决方案
# 修改无权限目录,示例
chmod 777 /home/docker/elasticsearch/master/logs
参考文档:Elasticsearch Java API 客户端 [7.16]
ElasticSearch 是搜索引擎,从搜索的意义上来说,如果筛选条件或前几页都找不到需要的数据,继续深度分页也不会找到想要的数据。
ElasticSearch 不要做深度分页和随机深度跳页。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。