Docker搭建ElasticSearch集群
一、环境准备
- Linux Verison(7.9)
- VMware(16)
- Docker(20.10.16)
- ElasticSearch(7.17.1)
- Docker-compose(2.7.0)
二、环境搭建
2.1从Docker Hub上拉取ES镜像
docker pull elasticsearch:7.17.1
2.2查看本地镜像
docker images
2.3修改虚拟内存大小(ES所需要的内存比较大 不改的话后边会报错(亲自采坑))
vim /etc/sysctl.conf
#一个进程可以拥有的VMA(虚拟内存区域)的数量,默认值为65536
vm.max_map_count=655360
2.4重新加载配置文件
sysctl -p
2.5创建目录
- 自定义目录下创建三个文件夹(节点1,2,3)
-
在每个节点文件夹下创建config,data
-
修改每个节点文件夹下data目录的权限(不修改后面会报错,权限不够)
chmod 777 data/
2.6编写配置文件(elasticsearch.yml)
- node-1
#进入node-1目录下的config目录
cd node-1/config
#创建elasticsearch.yml
vim elasticsearch.yml
#-------------------------------------------
# es1
# 集群的名称(各节点*集群名称*需要保持一致)
cluster.name: "docker-cluster"
# # # 节点的名称
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: "docker-cluster"
# # # 节点的名称
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: "docker-cluster"
# # # 节点的名称
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: "*"
2.7编写docker-compose配置文件
- docker-compose.yml与所有节点文件夹同级(相对路径好找)
vim docker-compose.yml
#docker-compose 文件格式的版本 3
version: "3"
services:
#服务名
es1:
#镜像名
image: elasticsearch:7.17.1
#容器实例名
container_name: es1
#环境参数变量,设置JVM最大(小)可用内存 太小的话es启不起来
environment:
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
#端口映射 宿主机端口->容器实例内端口
ports:
- "9201:9201"
- "9301:9301"
#挂载容器数据卷(类似于reids中的rdb,aof持久化技术,将容器内的数据保存到宿主机磁盘上)
volumes:
- /opt/mydata/elasticsearch/node-1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /opt/mydata/elasticsearch/node-1/data:/usr/share/elasticsearch/data
#自定义docker网络模式,在调用服务的时候不用写死IP 直接使用服务名调用
networks:
- es_net
es2:
image: elasticsearch:7.17.1
container_name: es2
environment:
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ports:
- "9202:9202"
- "9302:9302"
volumes:
- /opt/mydata/elasticsearch/node-2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /opt/mydata/elasticsearch/node-2/data:/usr/share/elasticsearch/data
networks:
- es_net
es3:
image: elasticsearch:7.17.1
container_name: es3
environment:
- "ES_JAVA_OPTS=-Xms256m -Xmx256m"
ports:
- "9203:9203"
- "9303:9303"
volumes:
- /opt/mydata/elasticsearch/node-3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- /opt/mydata/elasticsearch/node-3/data:/usr/share/elasticsearch/data
networks:
- es_net
networks:
es_net:
-
检查docker-compose.yml是否有语法错误
docker-compose config -q
控制台什么都没有输出的话就是没有问题
2.8使用docker-compose一键启动容器实例
后台启动:docker-compose up -d
-
查看docker进程是否已经启动
docker ps
es集群启动成功 端口映射成功
2.9 查看集群状态
-
访问:
http://IP:9201/_cluster/health
status状态为green,集群搭建成功
3.0 docker-compose一键关闭容器实例
docker-compose down
三、寄语
最后文中如果有那里有错别的地方希望指出,没有看得特别仔细,希望此次演示能给您带来方便,感谢阅读!