本篇文章首发于头条号单机如何搭建Elasticsearch集群?使用容器技术快速构建集群环境,欢迎关注头条号和微信公众号“大数据技术和人工智能”(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注CSDN博客

在之前的文章里分别介绍过Elasticsearch本地环境安装和常用操作Elasticsearch源码构建来搭建一个Standalone(单机集群)模式的Elasticsearch环境,那么这种方式的环境能否在实际生产环境中使用呢?很显然是可以的,但是强烈不推荐。随着大数据的不断发展成熟和大数据应用的落地实施,传统的技术架构的缺陷越来越明显,分布式、集群、微服务、云计算等技术架构越来越流行,这篇文章就来介绍一下如何使用Docker来搭建一个Elasticsearch的集群环境。

为什么是Docker?

Docker是一个高速创新的企业级容器平台,优点很多,比如:

  • 可以在任何地方安全地构建、共享和运行任何应用程序
  • 节省资源、降低成本
  • 部署非常灵活方便

让我们开始吧

这个例子会使用Docker来搭建一个主节点两个数据节点的Elasticsearch集群,首先要已经安装好docker,可以使用docker --version命令来看确认一下。

1、下面是目录结构,接下来会基于这个目录结构来操作

.
├── docker-compose.yml
├── config
│ ├── es01
│ │ └── elasticsearch.yml
│ ├── es02
│ │ └── elasticsearch.yml
│ └── es03
│ └── elasticsearch.yml
├── data
│ ├── es01
│ ├── es02
│ └── es03
└── logs
├── es01
├── es02
└── es03

2、编写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: alwaysdepends_on来控制顺序的,这个办法比较简单。

另外,我这里使用的是6.2.0版本的elasticsearch,官方目前只提供了6.8.1和7.2.0版本的docker镜像,所以需要先自己做个6.2.0的镜像,下面简单说下如何制作镜像。

  • 新建一个目录并进入这个目录
  • 新建Dockerfile文件,文件内容为FROM docker.elastic.co/elasticsearch/elasticsearch:6.2.0,保存
  • 打开终端进入当前目录执行docker build .

3、分别编写每个节点的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.namenode.masternode.data配置即可。

4、执行命令docker-compose up部署集群,可以在命令后面加上-d参数使后台执行。

5、验证

浏览器打开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集群。

使用Docker搭建Elasticsearch集群环境的更多相关文章

  1. Elasticsearch使用系列-Docker搭建Elasticsearch集群

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...

  2. docker搭建etcd集群环境

    其实关于集群网上说的方案已经很多了,尤其是官网,只是这里我个人只有一个虚拟机,在开发环境下建议用docker-compose来搭建etcd集群. 1.拉取etcd镜像 docker pull quay ...

  3. 基于docker搭建elasticsearch集群

    es集群的搭建 - 基于单机搭建elasticsearch集群见官网 https://www.elastic.co/guide/en/elasticsearch/reference/current/d ...

  4. 使用 Elastic 技术栈构建 K8S 全栈监控 -1:搭建 ElasticSearch 集群环境

    文章转载自:https://www.qikqiak.com/post/k8s-monitor-use-elastic-stack-1/ 操作步骤 kubectl create ns elastic k ...

  5. Docker部署Elasticsearch集群

    http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...

  6. Docker搭建RabbitMQ集群

    Docker搭建RabbitMQ集群 Docker安装 见官网 RabbitMQ镜像下载及配置 见此博文 集群搭建 首先,我们需要启动运行RabbitMQ docker run -d --hostna ...

  7. docker-compose搭建zookeeper集群环境 CodingCode

    docker-compose搭建zookeeper集群环境 使用docker-compose搭建zookeeper集群环境 zookeeper是一个集群环境,用来管理微服务架构下面的配置管理功能. 这 ...

  8. 在搭建Hadoop集群环境时遇到的一些问题

    最近在学习搭建hadoop集群环境,在搭建的过程中遇到很多问题,在这里做一些记录.1. SSH相关的问题 问题一: ssh: connect to host localhost port 22: Co ...

  9. docker 搭建zookeeper集群和kafka集群

    docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之 ...

随机推荐

  1. 解决在SQLPLUS中无法使用方向键、退格键问题

    1. wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/matthewdva:/build:/E ...

  2. ES6 - 函数扩展(函数参数默认值)

    函数参数默认值 ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log(x, y); ...

  3. elementui---表格拖动排序的问题

    刚刚用elementui的表格,需要用到一个拖动排序的需求,简单弄了下,使用 Sorttable 来做还是挺快的,但是发现一个问题,拖动排序显示不正常. <el-table :data=&quo ...

  4. django入门7之django template和xadmin常用技巧

    django入门7之django template和xadmin常用技巧 <li {% ' == '/course' %}class="active"{% endif %}& ...

  5. apache httpd 从2.2升级到2.4的过程及中间遇到的坑

    背景描述: 最近集团在做安全扫描,扫出了http的漏洞,一看是监控nagios涉及到的httpd,于是就考虑将httpd升级到最新的版本,在升级的过程中,真是遇到了很多的坑,弄了2天终于搞定了,现在梳 ...

  6. 安装和使用nltk

    安装 参考:https://www.cnblogs.com/zrmw/p/10869325.html 分词:注意先分句再分词,这些对象均来自nltk.tokenize库 word_tokenize 导 ...

  7. springMVC返回json数据乱码问

    在springMVC controller中返回json数据出现乱码问题,因为没有进行编码,只需要简单的注解就可以了 在@RequestMapping()中加入produces="text/ ...

  8. mockito的用法

    well,说来惭愧,之前一直知道有这么个东西,但总是看不进去.刚好趁着这次迭代间隙有些闲暇,认真看了下,大概明白是怎么回事了. 首先,mock是个概念,这个词的本意就是“虚假的”.“模仿的”.在测试的 ...

  9. MySQL创建触发器的时候报1419错误( 1419 - You do not have the SUPER privilege and binary logging is enabled )

    mysql创建触发器的时候报错: 解决方法:第一步,用root用户登录:mysql -u root -p第二步,设置参数log_bin_trust_function_creators为1:set gl ...

  10. linux驱动开发学习一:创建一个字符设备

    首先是内核初始化函数.代码如下.主要是三个步骤.1 生成设备号. 2 注册设备号.3 创建设备. #include <linux/module.h> #include <linux/ ...