本篇文章首发于头条号单机如何搭建Elasticsearch集群?使用容器技术快速构建集群环境,欢迎关注头条号和微信公众号“大数据技术和人工智能”(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注CSDN博客。node
在以前的文章里分别介绍过Elasticsearch本地环境安装和经常使用操做和Elasticsearch源码构建来搭建一个Standalone(单机集群)模式的Elasticsearch环境,那么这种方式的环境可否在实际生产环境中使用呢?很显然是能够的,可是强烈不推荐。随着大数据的不断发展成熟和大数据应用的落地实施,传统的技术架构的缺陷愈来愈明显,分布式、集群、微服务、云计算等技术架构愈来愈流行,这篇文章就来介绍一下如何使用Docker来搭建一个Elasticsearch的集群环境。docker
Docker是一个高速创新的企业级容器平台,优势不少,好比:shell
这个例子会使用Docker来搭建一个主节点两个数据节点的Elasticsearch集群,首先要已经安装好docker,可使用docker --version
命令来看确认一下。json
一、下面是目录结构,接下来会基于这个目录结构来操做bootstrap
. ├── docker-compose.yml ├── config │ ├── es01 │ │ └── elasticsearch.yml │ ├── es02 │ │ └── elasticsearch.yml │ └── es03 │ └── elasticsearch.yml ├── data │ ├── es01 │ ├── es02 │ └── es03 └── logs ├── es01 ├── es02 └── es03
二、编写docker-compose.yml文件浏览器
version: '2' services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.0 container_name: es01 restart: always environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./data/es01:/usr/share/elasticsearch/data - ./config/es01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./logs/es01:/usr/share/elasticsearch/logs ports: - 9200:9200 - 9300:9300 networks: - esnet es02: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.0 container_name: es02 restart: always environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./data/es02:/usr/share/elasticsearch/data - ./config/es02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./logs/es02:/usr/share/elasticsearch/logs depends_on: - es01 networks: - esnet es03: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.0 container_name: es03 restart: always environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./data/es03:/usr/share/elasticsearch/data - ./config/es03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ./logs/es03:/usr/share/elasticsearch/logs depends_on: - es01 networks: - esnet networks: esnet:
Elasticsearch集群启动的时候,须要主节点启动成功后,其余节点才能启动并join到集群里,所以在配置文件里要保证这一点,官网Control startup and shutdown order in Compose这篇文章介绍了如何控制启动和关闭顺序的问题,我这里是经过配置restart: always
和depends_on
来控制顺序的,这个办法比较简单。
另外,我这里使用的是6.2.0版本的elasticsearch,官方目前只提供了6.8.1和7.2.0版本的docker镜像,因此须要先本身作个6.2.0的镜像,下面简单说下如何制做镜像。安全
FROM docker.elastic.co/elasticsearch/elasticsearch:6.2.0
,保存docker build .
三、分别编写每一个节点的elasticsearch.yml配置微信
cluster.name: es-cluster node.name: es01 node.master: true node.data: false path.data: /usr/share/elasticsearch/data path.logs: /usr/share/elasticsearch/logs bootstrap.memory_lock: true network.host: 0.0.0.0 http.port: 9200 transport.tcp.port: 9300 discovery.zen.ping.unicast.hosts: ["es01", "es02", "es03"] # discovery.seed_hosts: ["es02", "es03"] # cluster.initial_master_nodes: ["es01", "es02", "es03"] http.cors.enabled: true http.cors.allow-origin: "*" xpack.security.enabled: false xpack.security.transport.ssl.enabled: false
每一个节点的配置基本同样,这里只写一个节点的配置,其余节点主要改下node.name
、node.master
、node.data
配置便可。架构
四、执行命令docker-compose up
部署集群,能够在命令后面加上-d
参数使后台执行。cors
五、验证
浏览器打开http://127.0.0.1:9200
,输出以下则表示成功了。
{ "name" : "es01", "cluster_name" : "es-cluster", "cluster_uuid" : "-zUZlE_lTJ2LX7JMq4R40g", "version" : { "number" : "6.2.0", "build_hash" : "37cdac1", "build_date" : "2018-02-01T17:31:12.527918Z", "build_snapshot" : false, "lucene_version" : "7.2.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
接下来再使用Elasticsearch提供的API来检查一下集群和节点的健康情况。
使用/_cluster/health
或/_cat/health?v
查看集群健康情况,结果分别以下图:
使用/_cat/nodes?v
查看节点,结果以下图:
至此,就已经完成了使用Docker搭建的Elasticsearch集群。