【拆分版】Docker-compose构建Elasticsearch 7.1.0集群
写在前边
搞了两三天了,一直有个问题困扰着我,ES集群中配置怎么能正确映射到主机上,这边经常报ClusterFormationFailureHelper master not discovered or elected yet.
原因是容器中的ES节点没有正确的映射到主机上,而且容器内ip是易变的,我该怎么配置呢?
临下班了,终于想到个法子,固定容器ip——使用network_mode: host
看到主机模式的我眼前一亮,容器就相当于一个主机服务,你占哪个端口就是哪个,没有必要再去自己指定port去映射到主机。这样只要主机ip不变,容器中ip不就没问题了么!!!
本文内容架构图
解释:
Master节点作为Master节点与协调节点,为防止脑裂问题,降低负载,不存数据
Node1~Node3为数据节点,不参与Master竞选
TribeNode节点不存数据,不参与Master竞选
准备环境
- GNU/Debain Stretch 9.9 linux-4.19
- Docker 18.09.6
- Docker-Compose 1.17.1
- elasticsearch:7.1.0
配置脚本参见我的Github <https://github.com/hellxz/docker-es-cluster.git>
宿主机环境准备参考ELK集群搭建,基于7.1.1 文中开始搭建的前四步
目录结构
.
├── docker-es-data01
│ ├── data01
│ ├── data01-logs
│ ├── docker-compose.yml
│ ├── .env
│ └── es-config
│ └── elasticsearch.yml
├── docker-es-data02
│ ├── data02
│ ├── data02-logs
│ ├── docker-compose.yml
│ ├── .env
│ └── es-config
│ └── elasticsearch.yml
├── docker-es-data03
│ ├── data03
│ ├── data03-logs
│ ├── docker-compose.yml
│ ├── .env
│ └── es-config
│ └── elasticsearch.yml
├── docker-es-master
│ ├── docker-compose.yml
│ ├── .env
│ ├── es-config
│ │ └── elasticsearch.yml
│ ├── master-data
│ └── master-logs
└── docker-es-tribe
├── docker-compose.yml
├── .env
├── es-config
│ └── elasticsearch.yml
├── tribe-data
└── tribe-logs
最终效果
各目录代表节点与端口号
节点目录 | 节点名称 | 协调端口号 | 说明 | 查询端口号 |
---|---|---|---|---|
docker-es-data01 | data01 | 9301 | 数据节点1,非master节点 | 9201 |
docker-es-data02 | data02 | 9302 | 数据节点2,非master节点 | 9202 |
docker-es-data03 | data03 | 9303 | 数据节点3,非master节点 | 9203 |
docker-es-master | master | 9300 | master节点,非数据节点 | 9200 |
docker-es-tribe | tribe | 9304 | 协调节点,非master非数据节点 | 9204 |
想测试这些节点是否可用,只需要修改每个节点目录下的es-config/elasticsearch.yml
中的ip地址,全部换成你需要的ip即可。
各文件功用举例说明
鉴于这里边有很多是重复操作,这里仅拿其中的master节点进行举例,其余代码参见Github
.env 这个文件为docker-compose.yml提供默认参数,方便修改
# the default environment for es-master
# set es node jvm args
ES_JVM_OPTS=-Xms256m -Xmx256m
# set master node data folder
MASTER_DATA_DIR=./master-data
# set master node logs folder
MASTER_LOGS_DIR=./master-logs
2020/02/26 更新:启动es时如果提示无法访问日志或数据目录的问题可以通过,在docker-compose.yml的environment节点下添加- TAKE_FILE_OWNERSHIP=true
docker-compose.yml docker-compose的配置文件
version: "3"
services:
es-master:
image: elasticsearch:7.1.0
container_name: es-master
environment: # setting container env
- ES_JAVA_OPTS=${ES_JVM_OPTS} # set es bootstrap jvm args
restart: always
volumes:
- ./es-config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ${MASTER_DATA_DIR}:/usr/share/elasticsearch/data:rw
- ${MASTER_LOGS_DIR}:/usr/share/elasticsearch/logs:rw
network_mode: "host"
简单来说,就是修改pull的镜像,替换其中的变量与配置文件,挂载数据与日志目录,最后用的host主机模式,让节点服务占用到实体机端口
elaticsearch.yml elasticsearch的配置文件,搭建集群最关键的文件之一
# ======================== Elasticsearch Configuration =========================
cluster.name: es-cluster
node.name: master
node.master: true
node.data: false
node.attr.rack: r1
bootstrap.memory_lock: true
http.port: 9200
network.host: 10.2.114.110
transport.tcp.port: 9300
discovery.seed_hosts: ["10.2.114.110:9301","10.2.114.110:9302","10.2.114.110:9303","10.2.114.110:9304"]
cluster.initial_master_nodes: ["master"]
gateway.recover_after_nodes: 2
按照前几篇文章下来,大家对这些参数已经不是很陌生了,这里简单说下几个比较重要的参数
transport.tcp.port
设置es多节点协调的端口号discovery.seed_hosts
设置当前节点启动后要发现的协调节点位置,当然自己不需要发现自己,推荐使用ip:port形式,集群形成快cluster.initial_master_nodes
集群中可以成为master节点的节点名,这里指定唯一的一个,防止脑裂
使用说明
- 若想将此脚本使用到生产上,需要修改每个节点下的
.env
文件,将挂载数据、日志目录修改为启动es的集群的用户可读写的位置,可以通过sudo chmod 777 -R 目录
或sudo chown -R 当前用户名:用户组 目录
来修改被挂载的目录权限 - 修改.
env
下的JVM参数,扩大堆内存,启动与最大值最好相等,以减少gc次数,提高效率 - 修改所有节点下的
docker-compose.yml
中的network.host
地址 为当前所放置的主机的ip,discovery.seed_hosts
需要填写具体各待发现节点的实体机ip,以确保可以组成集群 - 确保各端口在其宿主机上没有被占用,如有占用需确认是否有用,无用kill,有用则更新
docker-compose.yml
的http.port
或transport.tcp.port
,注意与此同时要更新其它节点的discovery.seed_hosts
对应的port - 如果在同一台主机上,可以参考使用文章后边的简单的shell脚本
各节点操作命令
后台启动命令均为docker-compose up -d
关闭命令:
docker-compose down
: 关闭同时移除容器与多余虚拟网卡docker stop contains_name
: 根据容器名称关闭容器,不移除容器
简单的Shell脚本
docker-es-cluster-up.sh
#/bin/bash
# please put this shell script to the root of each node folder.
# this shell script for start up the docker-es-cluster designed in the one of linux server.
cd docker-es-master && docker-compose up -d && \
cd ../docker-es-data01 && docker-compose up -d && \
cd ../docker-es-data02 && docker-compose up -d && \
cd ../docker-es-data03 && docker-compose up -d && \
cd ../docker-es-tribe && docker-compose up -d && \
cd ..
docker-es-cluster-down.sh
#/bin/bash
# please put this shell script to the root of each node folder.
# this shell script for remove the docker-es-cluster's containers and networks designed in the one of linux server.
cd docker-es-tribe && docker-compose down && \
cd ../docker-es-data03 && docker-compose down && \
cd ../docker-es-data02 && docker-compose down && \
cd ../docker-es-data01 && docker-compose down && \
cd ../docker-es-master && docker-compose down && \
cd ..
docker-es-cluster-stop.sh
#/bin/bash
# please put this shell script to the root of each node folder.
# this shell script for stop the docker-es-cluster's containers designed in the one of linux server.
docker stop es-tribe es-data03 es-data02 es-data01 es-master
如果你想让这些脚本有执行权限,不妨试试
sudo chmod +x *.sh
这些脚本中没有使用sudo,如需要使用sudo才能启动docker,请添加当前用户到docker组
Enjoy.
本文系原创文章,禁止转载。
【拆分版】Docker-compose构建Elasticsearch 7.1.0集群的更多相关文章
- Docker Compose 一键部署Nginx代理Tomcat集群
Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [root@localhost ~]# tree compose_nginx_tomcat/ compose_nginx ...
- 【拆分版】 Docker-compose构建Logstash多实例,基于7.1.0
[拆分版]Docker-compose构建Logstash多实例 写在最前 说起Logstash,这个组件并没有什么集群的概念,与其说是集群,不如说是各自去收集日志分析过滤存储到Elasticsear ...
- 企业运维实践-丢弃手中的 docker build , 使用Kaniko直接在Kubernetes集群或Containerd环境中快速进行构建推送容器镜像
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 首发地址: h ...
- docker swarm英文文档学习-7-在集群中管理节点
Manage nodes in a swarm在集群中管理节点 List nodes列举节点 为了查看集群中的节点列表,可以在管理节点中运行docker node ls: $ docker node ...
- Elasticsearch常见用法-分布式集群
集群内部工作方式 Elasticsearch用于构建高可用和可扩展的系统.扩展的方式可以是购买更好的服务器(纵向扩展(vertical scale or scaling up))或者购买更多的服务器( ...
- Elasticsearch(二)--集群原理及优化
一.ES原理 1.索引结构ES是面向文档的 各种文本内容以文档的形式存储到ES中,文档可以是一封邮件.一条日志,或者一个网页的内容.一般使用 JSON 作为文档的序列化格式,文档可以有很多字段,在创建 ...
- Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET
Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET undefined Package - crawler undefined 科学网- ...
- docker swarm英文文档学习-8-在集群中部署服务
Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...
- spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群
一 .搭建Eureka 编写Eureka Server 由于有多个spring boot项目,采用maven多module的结构,项目结构如下: 新建一个maven主工程,在主maven的pom文件中 ...
随机推荐
- HDU 6351暴力枚举 6354计算几何
Beautiful Now Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)T ...
- HDU 6235.Permutation (2017中国大学生程序设计竞赛-哈尔滨站-重现赛)
Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tot ...
- bzoj 1305: [CQOI2009]dance跳舞
题目链接 bzoj 1305: [CQOI2009]dance跳舞 题解 男,女生拆点A1A2,B1B2,拆成两点间分别连容量为K的边,限制与不喜欢的人跳舞的数量 A1连接源点容量为x,B1连接汇点容 ...
- 【CodeForces 788B】奇妙的一笔画问题
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61845295 题目大意 给定n个点m条边的无向图 ...
- Flash3D学习计划(四)——学习纹理相关知识,载入一张纹理,并应用于前面的矩形;并学习多层纹理映射相关知识,尝试dark map, glow map
实现效果 主要代码 package { import com.adobe.utils.AGALMiniAssembler; import com.adobe.utils.Perspective ...
- iOS静态库打包
当了三年多程序员,第一次写随便,说来有些惭愧.想成为一个优秀的程序员,分析,思考,总结并且做记录是必不可少的,今天先从简单的命令总结记起.好了,废话不多说了,Let's start our games ...
- [读书笔记] CSS揭秘-背景与边框
半透明边框 默认情况下,背景会延伸到边框所在的区域下层.可以通过background-clip属性调整该默认行为. border: 10px solid rgba(0,0,0,.2) backgrou ...
- JAVA和.NET工作流相关项目收集
.NET以自主实现为主, 暂未发现使用WWF框架开发的开源工作流, java以BPM系为主 . .NET: RoadFlow : http://www.cqroad.cn/ 使用了百度编辑器扩展 ...
- 一个简单功能的SQL 实现
1.假设有一张表示cj表 Name Subject Result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 89 要求查询结果: 姓名 语文 ...
- virtualenv 环境安装
# Python 2.7.6:wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xztar xf Python-2.7.6.tar. ...