本篇文章主要介绍了使用 Docker Compse 部署 Elasticsearch + Kibana,并整合到 Spring Boot 项目中的详细步骤。
Elasticsearch + Kibana 版本: 7.17.0(7 的最新版本);Spring Boot 版本:2.7.5 。
服务器目录结构
—— root
|—— mall // 根目录
|—— pack
|—— elastic
|-- config
|-- elasticsearch.yml // Elasticsearch 配置文件
|-- data // Elasticsearch 数据目录
|-- plugins // Elasticsearch 插件目录
|-- docker-compose.yaml // 启动容器
|-- kibana
|-- kibana.yml kibana 配置文件
部署 Elasticsearch 和 Kibana
启动容器
- 在 config 目录下,编写 elasticsearch.yml 配置文件,内容如下。
network.host: 0.0.0.0
discovery.type: single-node
- 在 kibana 目录下,编写 kibana.yml 配置文件,内容如下。
server.host: 0.0.0.0
server.name: kibana
- 在 elastic 目录下,编写 docker-compose.yaml 配置文件,内容如下。
version: '3.3'
services:
elasticsearch:
restart: always
image: elasticsearch:7.17.0 # 使用的镜像名称
container_name: elasticsearch # 容器名称
ports: # 指定暴露的端口
- 9200:9200
- 9300:9300
environment:
- ES_JAVA_OPTS= -Xms2g -Xmx2g # 指定 JVM 内存大小
volumes: # 指定挂载目录
- ~/mall/pack/elastic/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ~/mall/pack/elastic/data:/usr/share/elasticsearch/data
- ~/mall/pack/elastic/plugins:/usr/share/elasticsearch/plugins
networks: # 网络配置
- elasticsearch-network
kibana:
restart: always
image: kibana:7.17.0
container_name: kibana
ports:
- 5601:5601
depends_on: # 服务依赖
- elasticsearch
volumes:
- ~/mall/pack/elastic/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
networks:
- kibana-network
networks:
elasticsearch-network:
kibana-network:
- 执行如下命令,启动容器。
docker-compose up -d // 启动容器
docker-compose logs -f // 查看容器启动日志
- 分别访问 localhost:9200 和 localhost:5601 网址。显示如下信息和界面,说明 Elasticsearch 服务和 Kibana 服务部署成功。
{
"name" : "cf55d2d2cfd9",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "ZqDLEOikRW-W8YU4qQuC5A",
"version" : {
"number" : "7.17.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "bee86328705acaa9a6daede7140defd4d9ec56bd",
"build_date" : "2022-01-28T08:36:04.875279988Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
设置登陆密码
- 在 elasticsearch.yml 配置文件中添加如下配置
- 执行如下命令,进入到 elasticsearch 容器中。
docker exec -it elasticsearch /bin/bash
- 执行如下命令,设置密码。一共有七个用户,依次设置这七个用户的密码,我这里统一将密码设置成 123456。
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
- 退出容器,然后在 kibana.yml 文件中添加如下配置。
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
- 重新启动容器,再次访问页面,会出现弹框,输入用户名和密码登陆即可。默认用户名为:elastic 。
docker-compose down
docker-compose up -d
完整配置文件内容
更多配置可以参考官方文档。
- elasticsearsh.yml
network.host: 0.0.0.0
discovery.type: single-node
xpack.security.enabled: true
- kibana.yml
server.host: 0.0.0.0
server.name: kibana
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
Spring Boot 整合 Elasticsearch
Spring Data Elasticsearch 官方文档
添加依赖
Spring Boot 版本要与 Elasticsearch 版本对应上,对应关系如下图所示。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<!-- 版本为 Spring Boot 版本 -->
<version>2.7.5</version>
</dependency>
添加配置
在 application.yaml 配置文件中新增如下配置。
spring:
elasticsearch:
username: elastic
password: 123456
uris: http://192.168.107.65:9200 // 虚拟机地址
connection-timeout: 10s
使用
本文只介绍 Elasticsearch 的基本使用,更详细的用法可以查看官方文档。
- 引入 ElasticsearchRestTemplate
@RestController
@RequestMapping("/demo")
public class Demo {
@Resource
private ElasticsearchRestTemplate elasticsearchRestTemplate;
/**
* 创建索引
**/
@GetMapping("/createIndex")
public void createIndex() {
IndexOperations indexOps = esRestTemplate.indexOps(IndexCoordinates.of("elasticsearch"));
boolean result = indexOps.create();
}
}
- 访问地址,创建索引。然后通过 Kibana 查看新增的索引。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-saUbKMoN-1686135145070)(null)]
问题
-
elasticsearch 容器启动报错。原因是挂载的 data 目录权限不够。
解决:执行命令
chmod -R 777 data
,然后重新启动容器即可。
-
elasticsearch 容器内存占用高达 13G。
解决:在 docker-compose.yaml 文件中添加如下配置,指定 JVM 内存占用大小。
environment:
- ES_JAVA_OPTS= -Xms2g -Xmx2g