容器中启动的ElasticSearch实例,如果不配置持久化,就会在重启时丢失数据。借助最近将一个实例迁移到k8s中的机会简单记录一下如何在容器中持久化ElasticSearch实例。同时记录一下ik分词器如何安装到容器中
# 容器中的es
# Docker拉取ES
- 搜索镜像:打开 DockerHub 官网 https://hub.docker.com/然后搜索 Elasticsearch 镜像
- 命令
docker pull elasticsearch: x.x.x
其中x.x.x为需要的版本
# 容器中的es
尝试启动一个es的docker容器,并使用docker --it
命令
可以看到容器的默认执行目录为/usr/share/elasticsearch
。其中有如下文件夹与文件夹
|
|
其中:
- config文件夹为默认配置存放路径
- data为数据持久化路径
- plugins为插件安装路径
因为我们的目标是配置持久化的es,并且安装ik分词。因此这三个目录都需要进行挂载来防止容器重启后数据丢失
# k8s中的ES持久化
# 存储卷与配置
- 先临时启动一个容器,用于配置
- 创建一个存储卷,挂载并映射到
/usr/share/elasticsearch/data
,作为数据文件夹持久化用 - 创建一个存储卷,挂载并映射到
/usr/share/elasticsearch/plugins
,作为插件文件夹持久化用 - 创建一个存储卷,挂载并映射到
/usr/share/elasticsearch/myconfig
,作为配置文件夹持久化用 - 进入容器中,执行命令
cp -r ./config、。 /myconfig
将默认的配置项复制到/myconfig
中 - 修改
/myconfig
文件夹中的各种配置文件,用于es的配置。参考默认的ES文档
# 启动容器
给容器配置环境变量ES_PATH_CONF="/usr/share/elasticsearch/myconfig"
,容器就会在启动时自动去加载挂载的/myconfig
文件夹中的配置文件
# 安装Ik-分词插件
- 进入容器,来到目录
/usr/share/elasticsearch/pulgins
- 创建目录
mkdir /usr/share/elasticsearch/plugins/ik
cd mkdir /usr/share/elasticsearch/plugins/analysis-ik
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/vx.x.x/elasticsearch-analysis-ik-x.x.x.zip
,将其中的x.x.x替换为需要的版本unzip elasticsearch-analysis-ik-x.x.x.zip
- 删除容器并重启
注:这里最好不要用/bin/elasticsearch-plugin install
命令进行安装。否则可能会将ik分词器的配置文件安装到默认的/config
文件夹中,导致容器重启后配置失效丢失
# 验证
按照上面的挂载方式修改完成后,打开http://ipaddress/_cluster/health?pretty
查看节点是否都启动成功。打开http://ipaddress/_analyze
查看分词器是否配置正确
# docker中的es持久化
# 方式1
可以参考上面的方式,将config文件夹中的文件复制到/myconfig中。然后使用如下命令启动。之后参考上面的方式按照ik分词器
|
|
# 方式2
可以直接将本地的配置文件挂载到docker的es中,如下。这样可以减少一个挂载目录。之后参考上面的方式按照ik分词器
|
|
# 验证
方式同上,略