新建一个网络,后期把kibana、es都加入改网络里
docker network create es-net
下载elasticsearch镜像
docker pull elasticsearch:7.6.2;
修改虚拟内存区域大小,否则会因为过小而无法启动:
sysctl -w vm.max_map_count=262144
新建目录
新建一个目录,创建三个文件夹:node-1、node-2、node-3
在每个节点文件夹下创建config,data文件夹
修改每个节点文件夹下data目录的权限(不修改后面会报错,权限不够)
chmod 777 data/
编写配置文件(elasticsearch.yml)
#进入node-1目录下的config目录
cd node-1/config
#创建elasticsearch.yml
vim elasticsearch.yml
- node-1
#------------------------------------------- # es1 # 集群的名称(各节点*集群名称*需要保持一致) cluster.name: "myt-escluster" # # # 节点的名称 node.name: node-1 # # # 此节点是否可以用作master节点 node.master: true # # # 此节点是否是存储节点 node.data: true # # # 此节点是否是预处理节点 如果是master节点的话 建议这里是true node.ingest: true #设置主机IP 0.0.0.0时外网可以访问到 network.host: 0.0.0.0 # 配置端口 http.port: 9201 # 集群通信端口 transport.port: 9301 #集群内节点信息 每个节点会共享自己的此参数 discovery.seed_hosts: ["es1:9301","es2:9302","es3:9303"] #集群的master候选节点目录。只有在初始化的时候才生效。 #这里只写node-1 并且配置这个参数 是用于快速搭建集群。集群已启动自动node-1 是master cluster.initial_master_nodes: ["node-1"] #cross 跨域访问 配置这个之后 head就可以用了 http.cors.enabled: true http.cors.allow-origin: "*"
- node-2
#进入node-2目录下的config目录
cd node-2/config
#创建elasticsearch.yml
vim elasticsearch.yml
# es2
# 集群的名称(各节点*集群名称*需要保持一致)
cluster.name: "myt-escluster"
# # # 节点的名称
node.name: node-2
# # # 此节点是否可以用作master节点
node.master: true
# # # 此节点是否是存储节点
node.data: true
# # # 此节点是否是预处理节点 如果是master节点的话 建议这里是true
node.ingest: true
#设置主机IP 0.0.0.0时外网可以访问到
network.host: 0.0.0.0
# 配置端口
http.port: 9202
# 集群通信端口
transport.port: 9302
#集群内节点信息 每个节点会共享自己的此参数
discovery.seed_hosts: ["es1:9301","es2:9302","es3:9303"]
#集群的master候选节点目录。只有在初始化的时候才生效。
#这里只写node-1 并且配置这个参数 是用于快速搭建集群。集群已启动自动node-1 是master
cluster.initial_master_nodes: ["node-1"]
#cross 跨域访问 配置这个之后 head就可以用了
http.cors.enabled: true
http.cors.allow-origin: "*"
- node-3
#进入node-3目录下的config目录
cd node-3/config
#创建elasticsearch.yml
vim elasticsearch.yml
# es3
# 集群的名称(各节点*集群名称*需要保持一致)
cluster.name: "myt-escluster"
# # # 节点的名称
node.name: node-3
# # # 此节点是否可以用作master节点
node.master: true
# # # 此节点是否是存储节点
node.data: true
# # # 此节点是否是预处理节点 如果是master节点的话 建议这里是true
node.ingest: true
#设置主机IP 0.0.0.0时外网可以访问到
network.host: 0.0.0.0
# 配置端口
http.port: 9203
# 集群通信端口
transport.port: 9303
#集群内节点信息 每个节点会共享自己的此参数
discovery.seed_hosts: ["es1:9301","es2:9302","es3:9303"]
#集群的master候选节点目录。只有在初始化的时候才生效。
#这里只写node-1 并且配置这个参数 是用于快速搭建集群。集群已启动自动node-1 是master
cluster.initial_master_nodes: ["node-1"]
#cross 跨域访问 配置这个之后 head就可以用了
http.cors.enabled: true
http.cors.allow-origin: "*"
编写docker-compose配置文件
docker-compose.yml与所有节点文件夹同级即可
vim docker-compose.yml
#docker-compose 文件格式的版本 3
version: "3"
services:
#服务名
es1:
#镜像名
image: elasticsearch:7.6.2
#容器实例名
container_name: es1
#环境参数变量,设置JVM最大(小)可用内存 太小的话es启不起来
environment:
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
#端口映射 宿主机端口->容器实例内端口
ports:
- "9201:9201"
- "9301:9301"
#挂载容器数据卷(类似于reids中的rdb,aof持久化技术,将容器内的数据保存到宿主机磁盘上,前边树宿主机目录,后边是容器目录)
volumes:
- /usr/docker/elasticsearchCluster/node-1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /usr/docker/elasticsearchCluster/node-1/data:/usr/share/elasticsearch/data
#自定义docker网络模式,在调用服务的时候不用写死IP 直接使用服务名调用
networks:
- es-net
es2:
image: elasticsearch:7.6.2
container_name: es2
environment:
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ports:
- "9202:9202"
- "9302:9302"
volumes:
- /usr/docker/elasticsearchCluster/node-2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /usr/docker/elasticsearchCluster/node-2/data:/usr/share/elasticsearch/data
networks:
- es-net
es3:
image: elasticsearch:7.6.2
container_name: es3
environment:
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ports:
- "9203:9203"
- "9303:9303"
volumes:
- /usr/docker/elasticsearchCluster/node-3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /usr/docker/elasticsearchCluster/node-3/data:/usr/share/elasticsearch/data
networks:
- es-net
networks:
es-net:
检查docker-compose.yml是否有语法错误
# 控制台什么都没有输出的话就是没有问题
docker-compose config -q;
如果提示找不到docker-compose命令,则在线安装即可:
# 安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
使用docker-compose一键启动容器实例
后台启动:
docker-compose up -d
如果执行docker-compose up -d
后没反应,则删除docker-compose,重新下载就行
rm /usr/local/bin/docker-compose
docker-compose -version查询docker-compose版本
查看docker进程是否已经启动
docker ps
查看集群状态
访问: http://192.168.52.128:9201/_cluster/health
status状态为green,集群搭建成功;
docker-compose一键关闭容器实例
# 停掉容器
docker-compose stop;
# 停掉并删除容器
docker-compose down;