Docker + Elasticsearch 集群环境搭建
无论是安装包形式还是基于Docker,搭建Elasticsearch集群环境还是较为简单的,实操的时候还遇到过一丢小问题,本文用于记录下操作过程。
运行
先用docker分别启动两个es服务,由于后面需要进行配置,这里假设es1所在的机器公网ip为:123.11.23.1
,es2所在机器ip:123.11.23.2
# 运行ES1
docker run --name es1 -e "ES_JAVA_OPTS=-Xms128m -Xmx128m" -d -p 9200:9200 -p 9300:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.3.2
# 运行ES2
docker run --name es2 -e "ES_JAVA_OPTS=-Xms128m -Xmx128m" -d -p 19200:9200 -p 19300:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.3.2
启动的时候指定了jvm参数,此外还可以通过编辑config/jvm.options
配置文件进行参数调整。
测试命令:curl localhost:9200 && curl localhost:19200
,注意到响应字段cluster_name
,不出意料默认应该都是docker-cluster
,然后两个es实例对应的name
应该不同(随机分配)。
配置
Elasticsearch集群环境由多个节点(es实例)之间互相发现并组成,因此核心关键就是正确配置,而主要的配置文件也仅有config/elasticsearch.yml
。基于Docker启动服务的时候可以选择将配置目录(或文件)挂载出来,但这里并没有这么做,所以还可以进入到容器内部进行操作,以es1为例:
# 进入es1
docker exec -it es1 bash
# 编辑config目录下的elasticsearch.yml
vi config/elasticsearch.yml
下图Elasticsearch v6.3.2中的配置项较于低版本可是精简了很多(约定大于配置),由于本文仅介绍ES集群的搭建,所以详尽的配置说明可以参考这里。
elasticsearch.yml简单起见,本示例就不修改cluster.name
这个配置项了,一个es集群首先就是要保证各节点该配置的相同,还有一个配置属性:node.name
,这里应该设置成更为容易理解的节点名称。
接着继续贴上两项配置,这也是让节点之间相互发现的关键所在:
# 当前机器公网ip
network.publish_host: 123.11.23.1
# 其它节点的位置
discovery.zen.ping.unicast.hosts: ["123.11.23.2:19300"]
总之,参考上述说明,根据实际情况分别配置好两个es实例,最后重启实例即可:
docker restart es1 && docker restart es2
测试
以下列出的几种方式都可以查看集群状态:
-
查看日志:
docker logs -f es1
-
节点信息:
curl http://localhost:9200/_nodes?pretty
- 集群健康:
curl http://localhost:9200/_cluster/health
- 插件
elasticsearch-head
文章已授权获得转载,原文地址: https://blog.mariojd.cn/elasticsearch-cluster-environment-construction-based-docker.html