【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 | 查看jdk版本:java -version |
通过docker安装Elasticsearch(参考Elasticsearch官网)
通过docker拉取es镜像:docker pull docker.elastic.co/elasticsearch/elasticsearch:6.6.0
设置kernel setting:sysctl -w vm.max_map_count=262144
(PS: 每次重启服务器都需要设置,文末提供永久设置的方法)
创建并进入目录:~/docker/elk
创建并编辑docker-compose.yml:vim docker-compose.yml
保存并退出::wq
启动当前docker-compose容器:docker-compose up
(后台启动:docker-compose up -d
)
测试es是否成功启动:访问http://{ip}:9200
关闭当前docker-compose容器:docker-compose down
在docker上集成运行Kibana(Kibana实现Elasticsearch的数据可视化,部分参考Kibana官网)
通过docker拉取kibana镜像:docker pull docker.elastic.co/kibana/kibana:6.6.0
进入目录:~/docker/elk
再次编辑docker-compose.yml(即es的docker-compose.yml):vim docker-compose.yml
保存并退出::wq
启动当前docker-compose容器:docker-compose up
(后台启动:docker-compose up -d
)
测试kibana是否成功启动:访问http://{ip}:5601
成功搭建Elasticsearch应用,可以开始开发全文检索服务了
PS:docker启动的容器每次关闭之后数据就会自动清除,如果想要保存数据就要做存储映射,即把容器的数据映射到本机。
补充
实现容器数据映射到主机,只需要修改docker-compose.yml:vim docker-compose.yml
再次启动发现报错
遇到问题:
java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
问题原因:容器内用户在宿主机创建映射目录,但是没有写权限
解决办法:
chmod 777 ./esdata*
参考:docker elasticsearch挂载宿主机报 java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
然后再次启动就能正常。
Reference
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 | 修改系统设置:vim /etc/sysctl.conf |
参考: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