当前位置:   article > 正文

使用docker安装部署elasticsearch,并持久化到容器卷_docker-compose安装es并实现es日志持久化

docker-compose安装es并实现es日志持久化

使用docker安装部署elasticsearch,并持久化到容器卷

1.拉取Elasticsearch Docker镜像

在终端中执行以下命令来从Docker Hub拉取特定版本(如8.2.0)的Elasticsearch镜像。请确保你的网络连接正常,并且Docker已经在你的机器上安装并正确配置。

# 从Docker Hub拉取版本为8.2.0的Elasticsearch镜像
docker pull elasticsearch:8.2.0
# 查看镜像列表
docker images
  • 1
  • 2
  • 3
  • 4

image-20231211154318061

2.创建挂载目录

执行以下命令在本地创建文件夹,用于持久化 Elasticsearch 的数据和配置。

# 创建用于数据持久化的文件夹
mkdir -p /mydata/es/data 

# 创建用于存储 Elasticsearch 插件的文件夹
mkdir -p /mydata/es/plugins

# 创建用于存储 Elasticsearch 日志的文件夹
mkdir -p /mydata/es/logs

# 创建用于存储 Elasticsearch 配置的文件夹
mkdir -p /mydata/es/config
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

如果上述文件夹创建成功,但在运行时遇到权限问题,请尝试使用sudo或者更改这些文件夹的权限。

3.创建并运行 Elasticsearch 容器

# 创建并运行一个名为 "es1" 的Elasticsearch容器
docker run -d --name es1  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m"   -e "discovery.type=single-node" --privileged  -p 9200:9200 -p 9300:9300 elasticsearch:8.2.0
  • 1
  • 2

如果命令执行成功,它将返回一个容器 ID。否则,它可能会抛出一个错误消息。确保你的Docker具有运行新容器所需的资源和权限

4.开启防火墙端口

在 CentOS 7.4 或其他使用 firewalld 进程管理的系统上,可以使用以下命令开启防火墙端口9200和9300:
ps:云服务器需要放开对应的安全组

# 开启防火墙端口9200
firewall-cmd --zone=public --add-port=9200/tcp --permanent

# 开启防火墙端口9300
firewall-cmd --zone=public --add-port=9300/tcp --permanent

# 重新加载防火墙配置使更改生效
firewall-cmd --reload
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这些命令需要以 root 用户或带有适当权限的用户执行,并确保 firewalld 服务正在运行。如果返回 “success”,则说明操作成功。如果失败,可能需要检查你的 firewalld 进程状态或命令的语法是否正确。

访问服务器Ip:9200端口

image-20231211162809839

5.配置数据和配置的持久化

在这一步中,我们将从运行的 Elasticsearch 容器中复制数据到本地已创建的文件夹中以实现持久化,然后删除原有容器,并利用本地持久化数据创建新的容器。

# 复制 Elasticsearch 容器的相关数据到本地持久化的文件夹
docker cp es1:/usr/share/elasticsearch/data/ /mydata/es/
docker cp es1:/usr/share/elasticsearch/plugins/ /mydata/es/
docker cp es1:/usr/share/elasticsearch/logs/ /mydata/es/
docker cp es1:/usr/share/elasticsearch/config/ /mydata/es/

# 删除原 Elasticsearch 容器
docker rm -f es1

# 利用本地持久化数据和配置创建新的 Elasticsearch 容器
docker run -d --name es  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node"  -v /mydata/es/data:/usr/share/elasticsearch/data  -v /mydata/es/plugins:/usr/share/elasticsearch/plugins -v /mydata/es/config:/usr/share/elasticsearch/config  -v /mydata/es/logs:/usr/share/elasticsearch/logs --privileged  -p 9200:9200 -p 9300:9300 elasticsearch:8.2.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

访问服务器Ip:9200端口

image-20231211162809839

6.配置IK分词器

1.你可以从IK分词器的官方Github仓库上下载与当前版本相同的分词器,然后解压上传到/mydata/es/plugins文件夹中,最后重启Elasticsearch容器。
ik分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/
2.使用命令,进入docker 容器内直接下载

#进入es容器 -u root 以root用户进入,防止执行命令命令权限不足
docker exec -it -u root es /bin/bash
#安装ik分词器插件
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.2.0/elasticsearch-analysis-ik-8.2.0.zip
  • 1
  • 2
  • 3
  • 4

最后都要重启容器,加载分词器插件

# 重启Elasticsearch容器以应用新配置
docker restart es
  • 1
  • 2

7.容易出现问题

1):访问服务器Ip:9200端口 访问不到,但是端口也都开放了,云服务器防火墙也开放了

原因可能是

config下es配置文件elasticsearch.yml,中设置为

xpack.security.http.ssl:
  enabled: true
  • 1
  • 2

这个用于设置HTTP API客户端连接的SSL/TLS加密。enabled: false,表示启用HTTP API的SSL/TLS加密。

也就是需要https访问 解决方式xpack.security.http.ssl.enabled: false关闭ssl加密

xpack.security.http.ssl:
  enabled: false
  • 1
  • 2

2):访问服务器Ip:9200端口可以访问但是需要输入密码,解决方式

方法1.关闭xpack

xpack.security.enabled: false
  • 1

方法2.使用密码登录

#进入es容器
docker exec -it es /bin/bash
#生成用户elastic密码
elasticsearch-reset-password -u elastic

  • 1
  • 2
  • 3
  • 4
  • 5

new value:后就是用户elastic的密码
在这里插入图片描述

#es修改密码
./bin/elasticsearch-reset-password --username elastic -i
  • 1
  • 2

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/775817
推荐阅读
相关标签
  

闽ICP备14008679号