【Elasticsearch】using docker-compose to set up elasticsearch cluster

在学习Elasticsearch框架之前,必须先让Elasticsearch集群跑起来,最简单且容易迁移的办法就是使用docker。

Goal

搭建Elasticsearch集群,并完成测试。

Environment & Tools

centos7, openjdk1.8, docker 18.09.1, docker-compose 1.23.2,

Guide

检查环境

1
2
3
查看jdk版本:java -version
查看docker版本:docker version
查看docker-compose版本:docker-compose version

2019.02.14 - 01 - 01

2019.02.14 - 01 - 02

通过docker安装Elasticsearch(参考Elasticsearch官网

通过docker拉取es镜像:docker pull docker.elastic.co/elasticsearch/elasticsearch:6.6.0

2019.02.14 - 01 - 03

2019.02.14 - 01 - 04

设置kernel setting:sysctl -w vm.max_map_count=262144(PS: 每次重启服务器都需要设置,文末提供永久设置的方法)

2019.02.14 - 01 - 05

创建并进入目录:~/docker/elk

创建并编辑docker-compose.yml:vim docker-compose.yml

保存并退出::wq

2019.02.14 - 01 - 06

启动当前docker-compose容器:docker-compose up(后台启动:docker-compose up -d

2019.02.14 - 01 - 07

测试es是否成功启动:访问http://{ip}:9200

2019.02.14 - 01 - 08

关闭当前docker-compose容器:docker-compose down

在docker上集成运行Kibana(Kibana实现Elasticsearch的数据可视化,部分参考Kibana官网

通过docker拉取kibana镜像:docker pull docker.elastic.co/kibana/kibana:6.6.0

2019.02.14 - 01 - 09

进入目录:~/docker/elk

再次编辑docker-compose.yml(即es的docker-compose.yml):vim docker-compose.yml

保存并退出::wq

2019.02.14 - 01 - 10

启动当前docker-compose容器:docker-compose up(后台启动:docker-compose up -d

2019.02.14 - 01 - 11

测试kibana是否成功启动:访问http://{ip}:5601

2019.02.14 - 01 - 12

成功搭建Elasticsearch应用,可以开始开发全文检索服务了

PS:docker启动的容器每次关闭之后数据就会自动清除,如果想要保存数据就要做存储映射,即把容器的数据映射到本机。

补充

实现容器数据映射到主机,只需要修改docker-compose.yml:vim docker-compose.yml

2019.02.14 - 01 - 13

再次启动发现报错

遇到问题:java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes

问题原因:容器内用户在宿主机创建映射目录,但是没有写权限

解决办法:chmod 777 ./esdata*

2019.02.14 - 01 - 14

参考:docker elasticsearch挂载宿主机报 java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes

然后再次启动就能正常。

Reference

Elasticsearch官网

Kibana官网

Problem Shooting

###1. Creating network “elk_default” with the default driver ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables –wait -t nat -I DOCKER -i br-15789cc8f3fb -j RETURN: iptables: No chain/target/match by that name. (exit status 1))

重新启动docker服务:systemctl restart docker

2. 永久设置kernel setting

1
2
3
修改系统设置:vim /etc/sysctl.conf
在尾行添加以下内容:vm.max_map_count=262144
执行命令:sysctl -p

参考:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

3. 通过docker-compose up -d后台启动如何查看启动日志

查看容器启动日志:docker-compose logs

分页查看容器启动日志:docker-compose logs | more