docker-compose构建elasticsearch集群
运行环境
centos 7.4.1708(mini)
docker 18.06.1-ce
docker-compose 1.26.2
镜像环境
docker.elastic.co/elasticsearch/elasticsearch:6.4.0
docker.elastic.co/kibana/kibana:6.4.0
创建数据、日志、配置文件夹
//数据文件夹
mkdir -p /data/elasticsearch/data/{master,note1,note2}
//日志文件夹
mkdir -p /data/elasticsearch/log/{master,note1,note2}
//配置文件夹
mkdir -p /data/elasticsearch/conf
docker-compose文件
version: '3'
services:
elasticsearch_n0:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0
container_name: elasticsearch_n0
entrypoint: ["sh", "/home/docker-es-plugins.sh"]
privileged: true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./data/node0:/usr/share/elasticsearch/data
- ./logs/node0:/usr/share/elasticsearch/logs
- .:/home
- ./conf/master.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9200:9200
- 9300:9300
networks:
- elastic
elasticsearch_n1:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0
container_name: elasticsearch_n1
entrypoint: ["sh", "/home/docker-es-plugins.sh"]
privileged: true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./data/node1:/usr/share/elasticsearch/data
- ./logs/node1:/usr/share/elasticsearch/logs
- .:/home
- ./conf/node1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9201:9200
- 9301:9300
networks:
- elastic
elasticsearch_n2:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0
container_name: elasticsearch_n2
entrypoint: ["sh", "/home/docker-es-plugins.sh"]
privileged: true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./data/node2:/usr/share/elasticsearch/data
- ./logs/node2:/usr/share/elasticsearch/logs
- .:/home
- ./conf/node2.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9202:9200
- 9302:9300
networks:
- elastic
kibana:
image: docker.elastic.co/kibana/kibana:6.4.0
container_name: kibana
environment:
- SERVER_NAME=kibana
- ELASTICSEARCH_URL=http://elasticsearch_n0:9200
- XPACK_MONITORING_ENABLED=true
ports:
- 5601:5601
depends_on:
- elasticsearch_n0
networks:
elastic:
driver: bridge
注意:/data/docker-es-plugins.sh是安装 ik 分词的脚本,亦可使用已安装 ik 的 elasticsearch 镜像
master.yml文件
bootstrap.memory_lock: false
cluster.name: elasticsearch-cluster
node.name: elasticsearch_n0
node.master: true
node.data: true
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: elasticsearch_n0:9300,elasticsearch_n1:9300,elasticsearch_n2:9300
discovery.zen.minimum_master_nodes: 2
path.logs: /usr/share/elasticsearch/logs
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.audit.enabled: true
note1.yml文件
bootstrap.memory_lock: false
cluster.name: elasticsearch-cluster
node.name: elasticsearch_n1
node.master: true
node.data: true
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: elasticsearch_n0:9300,elasticsearch_n1:9300,elasticsearch_n2:9300
discovery.zen.minimum_master_nodes: 2
path.logs: /usr/share/elasticsearch/logs
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.audit.enabled: true
note2.yml文件跟note1.yml类似,需要注意的是修改node.name: elasticsearch_n2
docker-es-plugins.sh 文件
在docker-compose中运行shell脚本或命令,可使用entrypoint
#!/bin/bash
# 离线安装,需要下载安装包
cp /home/analysis-ik /usr/share/elasticsearch/plugins -r
# 在线安装
#bin/elasticsearch-plugin install analysis-icu
#bin/elasticsearch-plugin install analysis-smartcn
#bin/elasticsearch-plugin install --batch https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zip
exec /usr/local/bin/docker-entrypoint.sh elasticsearch
运行
docker-compose up -d
运行一段时间后,检查其节点
文件架构
├── analysis-ik
│ ├── commons-codec-1.9.jar
│ ├── commons-logging-1.2.jar
│ ├── config
│ │ ├── extra_main.dic
│ │ ├── extra_single_word.dic
│ │ ├── extra_single_word_full.dic
│ │ ├── extra_single_word_low_freq.dic
│ │ ├── extra_stopword.dic
│ │ ├── IKAnalyzer.cfg.xml
│ │ ├── main.dic
│ │ ├── preposition.dic
│ │ ├── quantifier.dic
│ │ ├── stopword.dic
│ │ ├── suffix.dic
│ │ └── surname.dic
│ ├── elasticsearch-analysis-ik-6.4.0.jar
│ ├── httpclient-4.5.2.jar
│ ├── httpcore-4.4.4.jar
│ ├── plugin-descriptor.properties
│ └── plugin-security.policy
├── conf
│ ├── master.yml
│ ├── node1.yml
│ └── node2.yml
├── data
│ ├── node0
│ ├── node1
│ └── node2
├── docker-compose.yml
├── docker-es-plugins.sh
└── logs
├── node0
├── node1
└── node2