环境:Elasticsearch 9.0.3 docker容器部署

  • Elasticsearch Docker下载安装文档查找引导如下图

官网地址:https://www.elastic.co/

下载在这里插入图片描述
Docker安装引导
在这里插入图片描述
查找docker镜像资料
在这里插入图片描述
在这里插入图片描述
选择最新版本镜像
在这里插入图片描述

  • 问题:本地安装的docker 拉取不到镜像 可以参考这里
  1. 在配置有镜像加速地址的云服务器上拉取镜像,按照对应的系统来
    docker pull docker.elastic.co/elasticsearch/elasticsearch:9.0.3
  2. 将镜像包存为一个压缩文件
    docker save -o /usr/elasticsearch.tar docker.elastic.co/elasticsearch/elasticsearch
  3. 本地执行加载镜像命令
    sudo docker load -i /mnt/c/***/elasticsearch.tar
  4. 检查镜像是否加载成功
    sudo docker images -a
  • 创建网络桥连接以解决 elasticsearch kibana 和 filebeats的相互连接

docker network create -d bridge bridge-network

  • 启动容器

sudo docker run -d --network bridge-network --network-alias elasticsearch.net --name elasticsearch -p 9200:9200 -p 9300:9300 -e ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true --ulimit memlock=-1:-1 --ulimit nofile=65536:65536 --cap-add=IPC_LOCK docker.elastic.co/elasticsearch/elasticsearch:9.0.3

注意:启动时报错为 ERROR: Elasticsearch died while starting up, with exit code 78 时
原因:Elasticsearch 启动时检查bootstrap失败,容器内无法锁定内存导致失败

  1. sudo sysctl -w vm.max_map_count=262144 :设置单个进程允许的最大虚拟内存映射区域数量, 默认值为:65530,但 Elasticsearch 会创建大量内存映射文件(尤其是使用 mmapfs 存储索引时),默认值可能不够用
  2. sudo sysctl -w vm.swappiness=1:设置内核交换分区的倾向程度,值 0 - 100,0代表尽量不使用,100积极使用交换分区swap

为避免每次启动都执行设置虚拟内存和交换分区倾向度,可以 cd /etc 下编辑 sysctl.conf文件,然后执行 sudo sysctl -p 从配置文件重新加载参数
在这里插入图片描述

  • -d 标识以分离模式后台运行
  • 9200 用于对外提供HTTP REST服务端口
  • 9300 用于用于内部通讯各节点访问
  • –ulimit memlock=-1:-1 把容器进程的 memlock(锁定物理内存)软/硬限制设为 无限
  • –ulimit nofile=65536:65536 把容器进程能打开的最大文件描述符数软/硬限制提高到 65536
  • –cap-add=IPC_LOCK 给容器增加 IPC_LOCK Linux 能力(capability)(即 CAP_IPC_LOCK 一些系统操作能力
  • -e ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true 启用内存锁

进入容器查看配置,然后将配置挂载出来方便操作,比如开启安全特性,账号密码不再在配置文件中设置

sudo docker exec -it elasticsearch /bin/sh
cd /usr/share/elasticsearch/config
cat elasticsearch.yml

进入容器设置用户密码
https://www.elastic.co/docs/deploy-manage/users-roles/cluster-or-deployment-auth/built-in-users
在这里插入图片描述

进入容器后 cd /usr/share/elasticsearch
执行 bin/elasticsearch-setup-passwords interactive
最后根据提示为每个账号设置密码

验证密码
在这里插入图片描述

  • 安装配套的可视化工具Kibana
docker pull docker.elastic.co/kibana/kibana:9.0.3

容器启动命令

sudo docker run -d --network bridge-network --network-alias kibana.net --name kibana -p 5601:5601 -v /mnt/d/docker/images/kibana.yml:/usr/share/kibana/config/kibana.yml docker.elastic.co/kibana/kibana:9.0.3

配置文件地址:/usr/share/kibana/config

备注:eleasticsearch 启用默认SSL开启,所以请用https访问, 另外kibana或默认校验es证书的有效性,在同一网络的情况下可以关闭

配置参考:
在这里插入图片描述
访问前端地址: http://localhost:5601/ 使用 elastic账号访问(要不又该说你没权限了)
在这里插入图片描述

  • Elasticsearch集成到SpringBoot

当前是直接参考的官方文档
这里分别给出了集成和连接的示例。注意如果要使用spring-boot-starter-data-elasticsearch一定要注意版本的匹配,可以直接点击pom文件去查看es的版本,我这里的springboot是3.2.4适配的es是8.11的所以这里就直接采用的官网的方式。另外RestHighLevelClient在Es的7.17版本之后就已经被逐渐弃用,所以使用高版本的需要注意。
在这里插入图片描述

引入elasticsearch-java包后注入bean
注意:java 中的LocalDateTime 序列化的问题
在这里插入图片描述

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d2b31418f87140b8bd42b07cb6b83c94.png
官方的示例是创建了client之后做业务操作最后手动关闭,我们这里直接注入到容器,然后备注在销毁的时候调用ElasticserachClient的close方法。
如果你使用的是https则 .sslContext(TransportUtils.insecureSSLContext()) 必不可少,其作用相当于上面kibana提到的不校验SSL,否则就需要自己设置证书,在官方文档(上面超链接的地址中的connecting目录)中也有提到如何设置。

  • 简单的写入es示例
    在这里插入图片描述

简单的注意一下 IndexRequest和CreateRequest一个自动生成ID一个手动定义
在这里插入图片描述

  • 在kibana中查看刚刚写入的数据
    登录后找到Discover (通常就在左侧目录中的第一个菜单)如下图所示create a data view
    在这里插入图片描述
    编辑数据视图的名称和索引的匹配规则,这里这注意可以选择时间字段
    在这里插入图片描述
    然后就能看到我们的数据
    在这里插入图片描述
    在这里插入图片描述
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐