之前一直想写用docker搭建es集群的方法,今天有时间,来写一写,欢迎讨论。
拉取镜像配置配置文件启动容器查看集群启动情况避免脑裂的注意事项
拉取镜像需要在dockerhub选择适合自己系统的镜像。(镜像适配的系统不同)
docker pull es镜像
配置配置文件# es1 # 主master配置样例子 # 集群的名称 cluster.name: "docker-cluster" # 节点的名称 node.name: node-1 # 此节点是否可以用作master节点 node.master: true # 此节点是否是存储节点 node.data: false # 此节点是否是预处理节点 如果是master节点的话 建议这里是true node.ingest: true # network.host: 0.0.0.0 # 配置端口 http.port: 9200 # 集群通信端口 transport.port: 9300 # 集群内节点信息 每个节点会共享自己的此参数 # 这里我配置自己的dockerIP discovery.seed_hosts: ["172.17.0.2:9300","172.17.0.3:9300","172.17.0.4:9300"] # 集群的master候选节点目录。只有在初始化的时候才生效。 # 这里只写node-1 并且配置这个参数 是用于快速搭建集群。集群已启动自动node-1 是master cluster.initial_master_nodes: ["node-1"] # cross 跨域访问 配置这个之后 head就可以用了 http.cors.enabled: true http.cors.allow-origin: "*"
# es2 # 从节点配置样例子 # 集群的名称 cluster.name: "docker-cluster" # 节点的名称 node.name: node-2 # 此节点是否可以用作master节点 node.master: true # 此节点是否是存储节点 node.data: true # 此节点是否是预处理节点 如果是master节点的话 建议这里是true node.ingest: true # network.host: 0.0.0.0 # 配置端口 http.port: 9200 # 集群通信端口 transport.port: 9300 # 集群内节点信息 每个节点会共享自己的此参数 # 这里我配置自己的dockerIP discovery.seed_hosts: ["172.17.0.2:9300","172.17.0.3:9300","172.17.0.4:9300"] # 集群的master候选节点目录。只有在初始化的时候才生效。 # 这里只写node-1 并且配置这个参数 是用于快速搭建集群。集群已启动自动node-1 是master cluster.initial_master_nodes: ["node-1"] # cross 跨域访问 配置这个之后 head就可以用了 http.cors.enabled: true http.cors.allow-origin: "*"
# es3 # 从节点配置样例子 # 集群的名称 cluster.name: "docker-cluster" # 节点的名称 node.name: node-3 # 此节点是否可以用作master节点 node.master: true # 此节点是否是存储节点 node.data: true # 此节点是否是预处理节点 如果是master节点的话 建议这里是true node.ingest: true # network.host: 0.0.0.0 # 配置端口 http.port: 9200 # 集群通信端口 transport.port: 9300 # 集群内节点信息 每个节点会共享自己的此参数 # 这里我配置自己的dockerIP discovery.seed_hosts: ["172.17.0.2:9300","172.17.0.3:9300","172.17.0.4:9300"] # 集群的master候选节点目录。只有在初始化的时候才生效。 # 这里只写node-1 并且配置这个参数 是用于快速搭建集群。集群已启动自动node-1 是master cluster.initial_master_nodes: ["node-1"] # cross 跨域访问 配置这个之后 head就可以用了 http.cors.enabled: true http.cors.allow-origin: "*"启动容器
# 我自己的镜像版本是7.17.0 # 必须限制es内存的大小 es默认内存是4g 单机docker模拟的话 不限制内存 资源是不够的 docker run -d --name es1 -e ES_JAVA_OPTS="-Xms156m -Xmx156m" -p 9200:9200 -p 9300:9300 -v /Users/es/es1/e1.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.17.0 docker run -d --name es2 -e ES_JAVA_OPTS="-Xms156m -Xmx156m" -p 9201:9200 -p 9301:9300 -v /Users/es/es2/e2.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.17.0 docker run -d --name es3 -e ES_JAVA_OPTS="-Xms156m -Xmx156m" -p 9201:9200 -p 9301:9300 -v /Users/es/es2/e3.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.17.0查看集群启动情况
http://127.0.0.1:9200/_cat/nodes?pretty避免脑裂的注意事项
脑裂形成的原因
master节点配置的既是master又是data,master节点频繁处理数据,导致的响应慢网络不好,从节点等待master回复的时间设置的短
预防脑裂
master节点不做data节点使用等待master节点的响应时间设置长一点设置最小节点同意选举的参数。值建议为(n/2)+1。例如三个节点的情况,当两个节点认为master挂了的时候,才会重新选master。



