1.拉取镜像 docker pull elasticsearch:6.5.4
2.创建配置文件es-node01 ,es-node02,es-node03,如下es-node01基本配置,其它节点改一下HTTP端口9200与集群内部通讯端口9300,集群角色设置看情况修改。(discovery.zen.minimum_master_nodes:选主需要的最低有master资格的节点数,设置不对会出现集群脑裂问题。如宕掉master再启动可能发现它未加入到之前的集群而是自己一个独立成了一个新集群的master:解决方法——如这里三节点集群设置master选举的资格节点数为2,即(N/2+1,N为节点数)个节点才能进行选主。)
cluster.name: es-cluster
node.name: es-node01
network.bind_host: 0.0.0.0
network.publish_host: 192.168.0.108
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.0.108:9300","192.168.0.108:9301","192.168.0.108:9302"]
discovery.zen.minimum_master_nodes: 2
cluster.name: es-cluster
node.name: es-node02
network.bind_host: 0.0.0.0
network.publish_host: 192.168.0.108
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.0.108:9300","192.168.0.108:9301","192.168.0.108:9302"]
discovery.zen.minimum_master_nodes: 2
cluster.name: es-cluster
node.name: es-node03
network.bind_host: 0.0.0.0
network.publish_host: 192.168.0.108
http.port: 9202
transport.tcp.port: 9302
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.0.108:9300","192.168.0.108:9301","192.168.0.108:9302"]
discovery.zen.minimum_master_nodes: 2
3.docker run创建容器同时启动, -d后台启动,刚开始最好不要-d便于查看日志
docker run -v /home/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-v /home/es/data:/usr/share/elasticsearch/data/nodes -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name es-node01 elasticsearch:6.5.4
容器创建后再启动容器 ,需要将docker run改成docker create 并去掉参数 -d ,然后docker start es-node01 && docker logs -f es-node01,很多情况下这样更方便,如下如伪集群批量启动 docker start es-node01 es-node02 es-node03 最好把jvm.options配置文件也挂载到宿主机config下方便修改,宿主机data目录可以使用同一个
docker create -v /home/es/config/elasticsearch1.yml:/usr/share/elasticsearch/config/elasticsearch1.yml -v /home/es/data1:/usr/share/elasticsearch/data -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9200:9200 -p 9300:9300 --name es-node01 elasticsearch:6.5.4
docker create -v /home/es/config/elasticsearch1.yml:/usr/share/elasticsearch/config/elasticsearch2.yml -v /home/es/data2:/usr/share/elasticsearch/data -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9201:9200 -p 9301:9300 --name es-node02 elasticsearch:6.5.4
docker create -v /home/es/config/elasticsearch3.yml:/usr/share/elasticsearch/config/elasticsearch3.yml -v /home/es/data3:/usr/share/elasticsearch/data -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9202:9200 -p 9302:9300 --name es-node03 elasticsearch:6.5.4
启动中可能报错:1.Bind for 0.0.0.0:9301 failed: port is already allocated =》systemctl restart docker 一般就可以解决
2."docker-proxy": executable file not found in $PAT 或 docker-runc not installed on system =》cd /usr/libexec/docker 为两个脚本建个软连接 ln -s docker-proxy-current docker-proxy ln -s docker-runc-current docker-runc
3.启动还可能报错权限问题,chmod 777 /home/es -R 粗暴递归最高权限
4.如果之前没装过es,还可能遇到两三个报错,参考tar包解压安装https://mp.csdn.net/postedit/89398393
5.container_linux.go:345: starting container process caused "process_linux.go:430 =>这个问题不只是docker安装es才会遇到,原因是docker 版本与Linux内核不匹配导致的,需要更换docker版本
4.集群通信网络问题
如果各个节点不-p 暴露port,全部使用--net host主机模式集群便没有网络问题,但是不太安全。
5.docker安装head,kibana连接测试
docker pull mobz/elasticsearch-head:5
docker run -d -p 9100:9100 docker.io/mobz/elasticsearch-head:5
head使用很可能出现问题,最好搞个kibana,docker pull kibana:6.5.4,日志系统,搜索业务开发都好用
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --net host kibana:6.5.4
浏览器访问192.168.0.108:5601即可
6. 新版本集群安装参考:https://www.cnblogs.com/werben/p/11550412.html ,插件部分可改为挂载宿主机插件目录