Docker环境安装Elasticsearch7.17.7(ik分词器 + 单节点模式)+ Kibana7.17.7
2020/12/03
Docker
Elasticsearch
Kibana
# Elasticsearch > 官方教程:[Install Elasticsearch with Docker](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docker.html) ## 镜像拉取 ```bash docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.7 ``` > 因为`Spring Boot 2.7.6`对应的`Spring Data Elasticsearch 4.4.6`对应的`Elasticsearch`的版本为`7.17.7`,所以本文以此版本为例 ## 系统配置 ### 修改 sysctl.conf 编辑配置文件 ```bash vim /etc/sysctl.conf ``` 添加如下设置 ```bash vm.max_map_count = 262144 net.ipv4.tcp_retries2=5 ``` 保存后执行以下命令立即生效 ```bash sysctl -p ``` ### 检查 ulimits 的 nofile 和 nproc 运行一个测试容器(运行时会拉取centos镜像,请耐心等待),输出默认值 ```bash docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su' ``` 默认情况下,会输出如下内容 - 前两位代表:最多可开启的文件数,最小要求65536 - 后两位代表:进程开启多少个线程,最小要求4096 - unlimited代表不受限制 ``` 1048576 1048576 unlimited unlimited ``` 若出现被限制的值,则需要在执行`docker run`时添加如下参数 ```bash --ulimit nofile=65536:65536 --ulimit nproc=4096:4096 ``` ### 禁用 swap 分区 若已关闭则忽略 #### 方案1:关闭宿主机的 swap 临时关闭 ```bash swapoff -a ``` 永久关闭 ```bash #编辑配置文件 vim /etc/fstab # 在/etc/fstab中swap分区这行前加 # # /dev/mapper/centos-swap swap swap defaults 0 0 ``` #### 方案2:关闭容器的 swap 在执行`docker run`时添加如下参数 ```bash -e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1 ``` ### 映射端口 端口 | 协议 | 作用 ---|---|--- 9200 | tcp | 客户端访问 9300 | tcp | 集群数据通信 在执行 `docker run` 时添加 `-p` 参数完成端口映射,如果是单节点,9300可以不用映射,如果不需要外部访问,仅容器之间访问,9200也可以不用映射 ### 检查Docker存储驱动程序 不建议使用`loop-lvm`驱动,执行以下命令查看驱动 ```bash docker info | grep Storage ``` 查看结果是否如下,默认情况下,驱动为 `overlay2` ```bash Storage Driver: overlay2 ``` 如若出现 `loop-lvm` ,请参考 [Docker storage drivers](https://docs.docker.com/storage/storagedriver/select-storage-driver/) 相关文档 ## 其他配置 ### 自定义网络 创建一个网络,方便后续的其他服务连接进来,网络名称( `elk-birdge` )可自定义 ```bash docker network create elk-birdge ``` ### 文件夹准备 ```bash # 创建 elasticsearch 文件夹 mkdir -p /work/elasticsearch # 进入该文件夹(下文中的命令均以该目录为基础!) cd /work/elasticsearch # 创建自定义 image 文件夹,并创建ik分词器文件夹 mkdir -p image/ik ``` ### 添加 elasticsearch-analysis-ik #### 下载 下载地址:[https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.17.7](https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.17.7) 下载对应的 `7.17.7` 版本 `zip` 包。注意!是 `zip` 包! #### 解压 ```bash # 安装解压工具(若已安装,则忽略此步) yum -y install zip unzip # 解压 unzip elasticsearch-analysis-ik-7.17.7.zip -d /work/elasticsearch/image/ik/ # 删除 rm -rf elasticsearch-analysis-ik-7.17.7.zip ``` ### 制作自定义镜像(含时区和自定义插件) #### 编写 Dockerfile 新建一个Dockerfile文件 ```bash vim ./image/Dockerfile ``` 添加如下内容 ```dockerfile FROM docker.elastic.co/elasticsearch/elasticsearch:7.17.3 # 切换至 root USER root # 设置为国内源,更新源、安装 tzdata 、设置时区 RUN curl -o /etc/apt/sources.list http://mirrors.cloud.tencent.com/repo/ubuntu20_sources.list \ && apt-get update -y && apt-get upgrade -y \ && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo "Asia/Shanghai" > /etc/timezone \ && apt-get install -y tzdata \ && dpkg-reconfigure -f noninteractive tzdata \ && apt-get clean \ && apt-get autoclean # 回到 elasticsearch 用户 USER elasticsearch ADD ik /usr/share/elasticsearch/plugins/ik/ ``` 执行制作镜像 ```bash docker build -t elasticsearch-ik:7.17.7 ./image/ ``` ## 单节点模式启动 ### 创建文件夹 创建数据存储文件夹,并修改文件夹所有者。说明:默认情况下,容器运行使用 `elasticsearch` 用户并且 `uid:gid` 为 `1000:0` ,所以使用 `-v` 绑定本地数据卷时,需要修改文件夹访问权限以允许容器访问 ```bash mkdir data chmod g+rwx data chgrp 0 data ``` ### 启动容器 ```bash docker run -d --name elasticsearch -h elasticsearch --restart always \ -v /work/elasticsearch/data/:/usr/share/elasticsearch/data \ --network elk-birdge -p 9200:9200 \ -e "network.host=0.0.0.0" \ -e "network.publish_host=192.168.220.101" \ -e "discovery.type=single-node" \ -e "ingest.geoip.downloader.enabled=false" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ elasticsearch-ik:7.17.7 ``` 启动脚本注意如下事项 - `ulimit` 相关设置根据情况自行添加 - `swap` 相关设置根据情况自行添加 - 如果后面搭建的 `Kibana` 和 `Elasticsearch` 在同一台服务器同一个网络下,则无需添加 `-e "network.publish_host=192.168.220.101" \` ,其中 `192.168.220.101` 为宿主机的 `IP` - `-e "discovery.type=single-node"` :使用单节点模式 - `-e "ingest.geoip.downloader.enabled=false"` :关闭 `geoip` 数据下载 - `-e ES_JAVA_OPTS="-Xms512m -Xmx512m"` : `JVM` 内存设置,根据实际情况调整,但是 `Xms` 和 `Xmx` 的值一定要相等 - 端口根据需要进行映射 ### 查看日志 跟踪日志,当日志停止输出且中途未出现 ERROR 即可表示容器启动成功,此时可以按 `Ctrl + c` 退出跟踪 ```bash docker logs -f elasticsearch ``` ### 访问 浏览器访问:`http://[ip]:9200` # Kibana 官方教程:[Install Kibana with Docker](https://www.elastic.co/guide/en/kibana/7.17/docker.html) ## 镜像拉取 ```bash docker pull docker.elastic.co/kibana/kibana:7.17.7 ``` ## 启动容器 ```bash docker run -d --name kibana -h kibana --restart always \ --network elk-birdge -p 5601:5601 \ -e "ELASTICSEARCH_HOSTS=http://192.168.220.101:9200" \ docker.elastic.co/kibana/kibana:7.17.7 ``` 注意:如果 `Kibana` 和 `Elasticsearch` 在同一台服务器同一个网络下,则无需填写 `-e "ELASTICSEARCH_HOSTS=http://192.168.220.101:9200" \` ,其中 `192.168.220.101` 为 `Elasticsearch` 宿主机的 `IP` ## 访问 浏览器访问:`http://[ip]:5601`
146