Docker快速部署ES集群

  • Docker快速部署ES集群已关闭评论
  • 134 views
  • A+
所属分类:未分类

自从接触 Docker 之后,对 Docker 简直是爱不释手,做什么都是行云流水。遇到部署开源软件需求,第一时间想到的都是有没有现成的 Docker 镜像?能不能直接拉起来使用?

所以,这次网平的 ES 集群的重建,全部使用 DockerHub 已有镜像完成部署,整个过程变得非常简单!本文将分享详细的部署过程,希望对 ES 感兴趣或即将入坑 ES 的同学带来一些帮助。

一、整体架构

这里,我先给出本文最终的整体架构,让大家有一个清晰的部署思路:

Docker快速部署ES集群

角色分离:本文分享的 ES 架构中,特意将 Master 和 Client 独立出来,后续节点的重启维护都能快速完成,对用户几乎没有影响。另外将这些角色独立出来的以后,对应的计算资源消耗也就从 Data 节点剥离了出来,更容易掌握 Data 节点资源消耗与写入量和查询量之间的联系,非常有利于集群后续的容量管理和规划,算是一个比较成熟的中小型方案,准备正儿八经开搞的同学可以参考部署。

Ps:详细的 ES 角色职责说明可以查看官方文档。

数据流向:Beats 或自研系统上报日志到 Kafka,然后 Logstash 从 Kafka 读取数据写入 ES.Client,最终数据存放到 ES.Data 节点。用户可以通过 Kibana 或 ES.Client 的 Restful 接口查询数据。

本文涉及的 IP 的角色属性清单:

名称 服务器 IP 角色 备注
Docker 仓库 192.168.1.111 Docker/registry 内网私有仓库,需要外网
Kafka Cluster 192.168.1.100 Kafka/Zookeeper
192.168.1.101 Kafka/Zookeeper
192.168.1.102 Kafka/Zookeeper
ES Cluster 192.168.2.100 ES: Master/Client/Kibana 128Gx35 核
192.168.2.101 ES: Master/Client/Kibana
192.168.2.102 ES: Master/Client/Kibana
192.168.3.100 ES: DATA
   64Gx32 核 2TBx12
Ps:预算充足的强烈推荐上 SSD 硬盘,可以极大的提高集群性能!
192.168.3.101 ES: DATA
192.168.3.102 ES: DATA
192.168.3.103 ES: DATA

 本文涉及的部分参数简单解释(更多详细解释请咨询搜索引擎):

本文涉及的部分参数简单解释(更多详细解释请咨询搜索引擎):

二、Docker 资源

1、Docker 私有仓库搭建(针对内网环境)

①、在有外网的服务器 192.168.1.111 上进行如下操作:

Ps:若内部没有外网服务器,可以使用离线导出导入(save/load)的方案来做本地仓库,具体参考我之前整理的 Docker 入门教程-->传送门

②、docker 启动后,开始拉取所需镜像:

以下镜像均位于 dockerHub,拉取龟速,这里可以使用阿里云的 dockerHub 加速服务(腾讯云的仅支持腾讯云服务器内网使用)

Docker快速部署ES集群

zookeeper

镜像主页:https://hub.docker.com/_/zookeeper/

kafka

镜像主页: https://hub.docker.com/r/wurstmeister/kafka/

Elastic

镜像主页:https://www.docker.elastic.co/

Ps:6.X 版本强制启用了 content-type 头部请求,比较烦,本文选择 5.X 的最后一个版本,实际使用请自行抉择。

完成以上步骤,我们就在 192.168.1.111 上建立了一个 Docker 私有仓库,地址是 192.168.1.111:5000。

2、所有服务器节点都安装要 docker,并开启私有仓库支持

vim /etc/sysconfig/docker 添加兼容私有仓库非 https 协议配置:

启动 Docker:

完成这一步之后,Docker 环境已准备完毕。

三、部署 Kafka 集群

Ps:若只是单纯部署 ES 集群,而不需要用到 kafka,可以跳过本步骤

1、部署 zookeeper

①、部署节点 1

②、部署节点 2

③、部署节点 3

2、部署 kafka

①、部署节点 1

②、部署节点 2

只需要修改如下参数,其他和节点 1 代码一样:

③、部署节点 3

同上所述,只需要修改如下参数:

完成之后,我们就使用纯 Docker 搭建了一个 Kafka 集群。

四、部署 ES 集群

1、内核参数优化

vim /etc/sysctl.conf

最后,执行 sysctl -p 生效

3、创建挂载目录

Master 节点:

Client 节点:

data 节点(TS 机器有 12 块盘,这里都用起来):

Ps:ES 官方 Docker 镜像启动用户 ID 是 1000,所以这里给 1000:1000 授权。

5、启动 Master、Client 和 DATA 节点

在 3 台 Master 节点执行如下启动脚本,其中只需要修改 node.name 值,比如 MASTER-100:

在 3 台 Client 节点启动如下脚本,同样只需要修改 node.name 的值,比如 CLIENT-101:

在4台 DATA 节点启动如下脚本,同样只需要修改 node.name 的值,比如 DATA-101:

6、注册 x-pack

官方镜像都默认集成了 x-pack,x-pack 是 elastic 官方的商业版插件,支持监控、鉴权以及机器学习等功能。

坏消息是这玩意按节点收费,一个节点 6 万/年,比较昂贵!

好消息是我们可以免费使用 x-pack 的基础版本(1 年授权,可更换),支持集群可视化监控,导入授权后 x-pack 会自动关闭 monitoring 以外的功能,比如登陆鉴权等【

套餐详情】。

注册步骤:

①、注册并下载授权码:https://register.elastic.co/xpack_register

,得到类似 jager-zhang-d13eeec2-723c-41d2-b912-4c56674c32a0-v5.json 授权文件

②、导入授权信息:

教程:

https://www.elastic.co/guide/en/x-pack/current/license-management.html

这样就激活了 x-pack 了。

7、部署 kibana

Ps:XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED 这个参数还有一个折腾记录,回头补上分享。

8、部署 logstash

logstash 在整个架构中属于消费者角色,将数据从 kafka 中读出,然后写入 ES。

Ps:/data/elastic/config 存放了 logstash 配置文件,其中 pipeline 文件夹里面存放 logstash 的 input、filter、output 规则。logstash.yml 是主配置文件,如下是推荐配置项

Ps:本文附件可以下载到完整的 config 配置文件。

10、拓展配置

由于我们使用的是 x-pack 的基础版本,所以没有鉴权功能,这里只好折中处理一下:

  • 引入 Aproxy 对 kibana 做鉴权(部署文档
  • 使用 iptables 对端口做安全限制,只允许指定机器访问相关端口,比如:

五、成品展示

全部完成之后,访问 kibana 地址就能看到漂亮的界面啦!当然,真正数据上报之前,我们还需要做一些准备工作,比如添加索引模板等,本文篇幅有限这里就不做更多介绍了,敬请关注张戈博客 ES 系列文集(整理中)!

下面截 2 张美图,诱惑一下,喜欢的话赶紧折腾吧!
Docker快速部署ES集群
Docker快速部署ES集群

Ps:因为是预发布时截图的,节点信息不全,请忽略里面的具体数据信息。另外,Kibana 的汉化教程下次整理分享,敬请期待!

  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar