使用docker-compose构建elasticsearch集群
需求分析
仔细看自己写的上一篇文章,虽然比手动启动好一点,但还是麻烦,以及还有多出来的新的需求。
- 容器集群的配置文件是需要定制修改的,但是每次启动以后再进去修改是一个工作量非常大的事情,也是在集群管理的时候最不能做的,一定要一步到位。
- 集群生成的数据和日志文件最好不要写在容器中,不方便使用管理和扩展。
- 启动命令长的不行,不保存下来我绝对不愿意去手动输入第二次。
那么接下来的方案确实完美解决了我的需求又符合了我对程序的审美,优雅而又不耦合。
知识点
docker-compose
通俗的说是一个docker的执行清单,有别于dockerfile,不会产生新的镜像。过程中我其实有考虑生成新的image来解决?但还是没这个方案清爽。
volumes
docker的参数,将容器的存储挂载到宿主。
实现方式
目标:2个节点的es集群,1主1从
- 首先准备好两个节点的目录和配置文件
我的目录结构如下
├── README
├── docker-compose.yml
├── elasticsearch.yml
├── es1
│ ├── data
│ └── elasticsearch.yml
└── es2
├── data
└── elasticsearch.yml
- 主节点配置文件
cluster.name: meitu
node.name: node-master
node.master: true
node.data: true
http.port: 9200
network.host: 0.0.0.0
#network.publish_host: master-ip
#discovery.zen.ping.unicast.hosts: ["master-ip"]
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.minimum_master_nodes: 1
xpack.security.enabled: false
3.从节点配置文件
cluster.name: meitu
node.name: node-data-1
node.master: false
node.data: true
http.port: 9200
network.host: 0.0.0.0
#network.publish_host: data-ip
discovery.zen.ping.unicast.hosts: ["es1"]
http.cors.enabled: true
http.cors.allow-origin: "*"
discovery.zen.minimum_master_nodes: 1
xpack.security.enabled: false
4.最后串联起来的docker-compose.yml配置文件
version: '2'
services:
es1:
image: docker.elastic.co/elasticsearch/elasticsearch:5.6.3
container_name: es1
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
mem_limit: 1g
cap_add:
- IPC_LOCK
volumes:
- /Users/huangqq/soft/docker/elasticsearch/es1/data:/usr/share/elasticsearch/data
- /Users/huangqq/soft/docker/elasticsearch/es1/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9201:9200
networks:
- esnet
es2:
image: docker.elastic.co/elasticsearch/elasticsearch:5.6.3
container_name: es2
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
mem_limit: 1g
cap_add:
- IPC_LOCK
volumes:
- /Users/huangqq/soft/docker/elasticsearch/es2/data:/usr/share/elasticsearch/data
- /Users/huangqq/soft/docker/elasticsearch/es2/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
ports:
- 9202:9200
links:
- es1
networks:
- esnet
volumes:
esdata1:
driver: local
esdata2:
driver: local
networks:
esnet:
driver: bridge
5.最后在目录下启动
docker-compose up
顺利的话集群就启动成功,在用上篇文章安装的head插件连接查看,完美!