本文将使用Docker 容器(使用docker-compose 编排)快速部署Elasticsearch 集群 ,可用于开发环境(单机多实例)或生产环境部署。
注意,6.x 版本已经不能通过 -Epath.config 参数去指定配置文件的加载位置,文档说明:
For the archive distributions, the config directory location defaults to $ES_HOME/config . The location of the >config directory can be changed via the ES_PATH_CONF environment variable as follows:
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
Alternatively, you can export the ES_PATH_CONF environment variable via the command line or via your shell profile.
即交给环境变量 ES_PATH_CONF 来设定了(官方文档),单机部署多个实例且不使用容器的同学多多注意。
准备工作
安装 docker & docker-compose
这里推进使用 daocloud 做个加速安装:
#docker
curl -sSL https://get.daocloud.io/docker | sh
#docker-compose
curl -L \
https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` \
> /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#查看安装结果
docker-compose -v
数据目录
#创建数据/日志目录 这里我们部署3个节点
mkdir /opt/elasticsearch/data/{node0,nod1,node2} -p
mkdir /opt/elasticsearch/logs/{node0,nod1,node2} -p
cd /opt/elasticsearch
#权限我也很懵逼啦 给了 privileged 也不行 索性0777好了
chmod 0777 data/* -R && chmod 0777 logs/* -R
#防止JVM报错
echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p
docker-compse 编排服务
创建编排文件
vim docker-compose.yml
参数说明
- cluster.name=elasticsearch-cluster
集群名称
- node.name=node0
- node.master=true
- node.data=true
节点名称、是否可作为主节点、是否存储数据
- bootstrap.memory_lock=true
锁定进程的物理内存地址避免交换(swapped)来提高性能
- http.cors.enabled=true
- http.cors.allow-origin=*
开启cors以便使用Head插件
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
JVM内存大小配置
- "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
- "discovery.zen.minimum_master_nodes=2"
由于5.2.1 后的版本是不支持多播的,所以需要手动指定集群各节点的tcp 数据交互地址,用于集群的节点发现 和failover ,默认缺省9300 端口,如设定了其它端口需另行指定,这里我们直接借助容器通信,也可以将各节点的9300 映射至宿主机,通过网络端口通信。
设定failover 选取的quorum = nodes/2 + 1
当然,也可以挂载自己的配置文件,ES 镜像的配置文件是/usr/share/elasticsearch/config/elasticsearch.yml ,挂载如下:
volumes:
- path/to/local/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
docker-compose.yml
version: '3'
services:
elasticsearch_n0:
image: elasticsearch:6.6.2
container_name: elasticsearch_n0
privileged: true
environment:
- cluster.name=elasticsearch-cluster
- node.name=node0
- node.master=true
- node.data=true
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
- "discovery.zen.minimum_master_nodes=2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./data/node0:/usr/share/elasticsearch/data
- ./logs/node0:/usr/share/elasticsearch/logs
ports:
- 9200:9200
elasticsearch_n1:
image: elasticsearch:6.6.2
container_name: elasticsearch_n1
privileged: true
environment:
- cluster.name=elasticsearch-cluster
- node.name=node1
- node.master=true
- node.data=true
- bootstrap.memory_lock=true
- http.cors.enabled=true
- http.cors.allow-origin=*
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.zen.ping.unicast.hosts=elasticsearch_n0,elasticsearch_n1,elasticsearch_n2"
- "discovery.zen.minimum_master_nodes=2"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./data/node1:/usr/share/elasticsearch/data
- ./logs/node1:/usr/share/elastic@c4(4(4(3B;"oG:r'"&U*Rǒ}jfCk"Cjcnc:c+>Gbo/*:'6&"B*
3R3Z4(鉅4)`AUP}p4(
е蝅p4(}聙4(brZj3ro疒j惚r'&*rokkR2 |