Elasticsearch 集群Docker Compose部署
Elasticsearch 集群Docker Compose部署
官方网站:
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/index.html
本教程适用于三台不同服务器的 Elasticsearch 集群,使用 Docker Compose 方式搭建
-
环境信息
IP地址 访问端口 集群节点间通讯端口 节点描述 10.1.10.241 9201 9301 主节点 10.1.10.242 9200 9300 从节点1 10.1.10.188 9200 9300 从节点2
-
操作步骤
-
拉取镜像
-
拉取ES镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2
等待后,查看是否拉取成功
#查看镜像是否拉取成功 docker images
成功如下,未成功则无此镜像
-
下载安装 Docker Compose
-
下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如上命令执行不成功,可选择下方命令进行安装,再次安装前需删除原失败下载相关文件
sudo curl -L --fail https://github.com/docker/compose/releases/download/1.26.2/run.sh -o /usr/local/bin/docker-compose sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose pip install docker-compose sudo pip install docker-compose
-
删除
如果使用 curl 进行安装
sudo rm /usr/local/bin/docker-compose
如果使用 pip 进行安装的
pip uninstall docker-compose
-
权限设置
sudo chmod +x /usr/local/bin/docker-compose
-
查看是否安装成功
docker-compose -version
-
-
创建容器挂载目录、配置文件
-
查看硬盘使用占比,使用磁盘空间充足的路径进行挂载点创建
df -h
选择磁盘空间充足的路径进行创建,否则启动会产生硬盘容量不足,无法创建索引或分片的情况
原因:官方默认磁盘已用空间不可超过85%。解决方案:后期可以通过命令对默认值进行修改
-
创建挂载目录
在三台服务器磁盘空间充足的路径上分别创建目录,名称随意
mkdir es cd es mkdir config #用于存放配置文件 mkdir data #用于存放数据 mkdir logs #用于存放日志 mkdir plugins #用于存放插件
-
创建配置文件
在三台服务器的 config 目录下创建配置文件
-
10.1.10.241 主节点
-
docker-compose.yml(注意:三台服务器上的此文件名不可变)
version: "3" services: #服务名称 es-master: #容器名称 container_name: es-master #镜像名称:版本号 image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 #节点名称 hostname: es-master #如遇到问题是否尝试自动重启 restart: always #服务端口、通讯端口 ports: - 9201:9201 - 9301:9301 #挂载路径 volumes: #冒号前的路径改为自己创建的目录,后面的路径不变 - /mnt/disk2/es-data/config/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /mnt/disk2/es-data/data:/usr/share/elasticsearch/data - /mnt/disk2/es-data/logs:/usr/share/elasticsearch/logs - /mnt/disk2/es-data/plugins:/usr/share/elasticsearch/plugins #内存配置 environment: - "ES_JAVA_OPTS=-Xms4g -Xmx4g
-
config.yml
#集群名称-三节点的集群名称必须一致,否则启动集群后,互相通讯时进行的校验不通过 cluster.name: es-cluster #节点名称 node.name: es-node1 #是否可以被选举为主节点 node.master: true #用于外网访问,不可更改 network.host: 0.0.0.0 #本机IP地址 network.publish_host: 10.1.10.241 #此容器节点端口号 http.port: 9201 #此容器节点通讯端口号 transport.port: 9301 #集群中所有节点的通讯地址 discovery.seed_hosts: - 10.1.10.241:9301 - 10.1.10.242:9300 - 10.1.10.188:9300 #集群初始化时,成为主节点的节点名称名称 cluster.initial_master_nodes: - es-node1 #跨域 http.cors.enabled: true http.cors.allow-origin: "*"
-
-
10.1.10.242 从节点1
-
docker-compose.yml
version: "3" services: es-slave1: container_name: es-slave1 image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 restart: always ports: - 9200:9200 - 9300:9300 volumes: - /home/es/node2/config/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /home/es/node2/data:/usr/share/elasticsearch/data - /home/es/node2/logs:/usr/share/elasticsearch/logs - /home/es/node2/plugins:/usr/share/elasticsearch/plugins environment: - "ES_JAVA_OPTS=-Xms4g -Xmx4g"
-
config.yml
cluster.name: es-cluster node.name: es-node2 node.master: true network.host: 0.0.0.0 network.publish_host: 10.1.10.242 http.port: 9200 transport.port: 9300 discovery.seed_hosts: - 10.1.10.241:9301 - 10.1.10.242:9300 - 10.1.10.188:9300 cluster.initial_master_nodes: - es-node1 http.cors.enabled: true http.cors.allow-origin: "*"
-
-
10.1.10.188 从节点2
-
docker-compose.yml
version: "3" services: es-slave2: container_name: es-slave2 image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 restart: always ports: - 9200:9200 - 9300:9300 volumes: - /home/es/config/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /home/es/data:/usr/share/elasticsearch/data - /home/es/logs:/usr/share/elasticsearch/logs - /home/es/plugins:/usr/share/elasticsearch/plugins environment: - "ES_JAVA_OPTS=-Xms4g -Xmx4g"
-
config.yml
cluster.name: es-cluster node.name: es-node3 node.master: true network.host: 0.0.0.0 network.publish_host: 10.1.10.188 http.port: 9200 transport.port: 9300 discovery.seed_hosts: - 10.1.10.241:9301 - 10.1.10.242:9300 - 10.1.10.188:9300 cluster.initial_master_nodes: - es-node1 http.cors.enabled: true http.cors.allow-origin: "*" xpack.security.enabled: false
-
-
-
-
权限设置
给目录、配置文件设置权限,用于容器创建数据、日志等信息(三台都设置)
chmod 777 config chmod 777 data chmod 777 logs chmod 777 plugins chmod 777 docker-compose.yml chmod 777 config.yml
-
-
节点容器启动
-
启动,需进入到 docker-compose.yml 文件目录
#后台启动 docker-compose up -d #前台启动 docker-compose up
-
查看节点是否启动
docker ps
如下情况,则表示启动成功
如下情况,则表示启动未成功
-
排查方法
查看容器日志报错,并解决
docker logs es-master
-
如报错解决完成,并都启动成功
-
查看是否可以正常访问
http://10.1.10.241:9201 http://10.1.10.242:9200 http://10.1.10.188:9200
-
查看集群节点状态
#使用任意节点容器服务地址和端口号 http://10.1.10.241:9201/_cat/nodes?pretty
如下情况表示集群节点加入成功,* 代表主节点
查看集群节点在服务器中的状态http://10.1.10.241:9201/_cat/nodes?v&h=http,version,jdk,disk.total,disk.used,disk.avail,disk.used_percent,heap.current,heap.percent,heap.max,ram.current,ram.percent,ram.max,master
显示如下,可以根据状态信息判断内存和磁盘报错
-
-
-
-
-
报错异常处理
-
内存不足
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
内存不足导致报错,执行以下命令,显示 vm.max_map_count = 262144 则表示成功#设置 sysctl -w vm.max_map_count=262144 #查看 sysctl -a|grep vm.max_map_count
-
以上命令主机重启后失效,永久修改方法如下:
在 /etc/sysctl.conf文件最后添加 vm.max_map_count=262144
-
-
启动成功,节点加入不进去
[master-a.example.com] master not discovered yet, this node has
not previously joined a bootstrapped (v7+) cluster, and this
node must discover master-eligible nodes [master-a, master-b] to
bootstrap a cluster: have discovered [{master-b.example.com}{…- 检查节点间的通讯地址与端口号是否正确
- 检查节点名称是否重复或漏写
- 踩坑确认9301:9300,这样的写法会导致无法发现节点,也会报此问题
-
-
其余参考
-
docker-compose命令
参考网址:https://www.cnblogs.com/ziyue7575/p/10e5e11ac09dc4bb36fff48d5ee518c3.html
#初次启动,并后台启动 docker-compose up -d #停止集群 docker-compose stop #再次启动 docker-compose start #列出项目中所有容器 docker-compose ps #停止并删除容器、网络、卷 docker-compose down #查看日志,后面可跟容器名称 docker-compose logs
-
docker 命令
参考网址:https://www.runoob.com/docker/docker-command-manual.html
#搜索网络中的镜像 docker search 软件名称 #拉取镜像 docker pull 镜像名:版本号 #查看已拉取到本地的镜像 docker images #查看已启动容器 docker ps #查看所有容器 docker ps -a #查看容器日志 docker logs 容器名 #停止容器 docker stop 容器名 #删除容器 docker rm 容器名 #进入容器 docker exec -it 容器名 /bin/bash
-
-
如有问题可评论,会试验后对文档进行修改
下一篇: 凯恩环是什么东西?凯恩环是谁发现的?
推荐阅读
-
docker-compose一键部署redis一主二从三哨兵模式(含密码,数据持久化)
-
Elasticsearch单机双节点集群部署实战
-
ASP.NET Core 3.0 : 二十八. 在Docker中的部署以及docker-compose的使用
-
docker部署rabbitmq集群的实现方法
-
docker-compose部署php项目实例详解
-
Docker 简单部署 ElasticSearch的实现方法
-
Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
-
使用docker-compose 一键部署你的分布式调用链跟踪框架skywalking
-
通过Docker部署Redis 6.x集群的方法
-
使用docker快速部署Elasticsearch集群的方法