注意点

  • 服务器内存:要求不低于8G,如果4G,没有跑其他程序的话,应该也可以,低于4G基本不用考虑。
  • 我的系统:阿里云centOS7.1,执行cat /proc/version 查看linux version,不能低于3.10
  • 服务器列表: 172.168.50.41,172.168.50.40,172.168.50.240(在50.41上搭建ELK,其他两台服务器es节点)

首先安装docker 和 docker-compose

# 更新yum
yum update # 移除docker旧版本(如果有的话)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine # 安装系统依赖
yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加docker源信息(下载速度比较快)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 更新yum缓存
yum makecache fast # 安装docker-ce
yum -y install docker-ce # 启动docker后台服务
sudo systemctl start docker # 配置阿里云镜像加速器(仅建议进行配置, 这里加速器地址仅用于展示,无加速功能,请使用自己的阿里云加速器,教程见百度,加速器免费)
mkdir /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://6y4h812t.mirror.aliyuncs.com"]}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker # 安装docker-compose
cd /usr/local/src
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version # 至此,docker 和docker-compose安装完毕, 如有错误,请留言,毕竟是之前写的自动安装脚本copy过来的。

首先搭建三节点ES集群,以下步骤均需在三台服务器执行

  • 1、使用docker-compose,建立存放yml文件的目录
   建立文件夹,/root/elk(随意即可)
mkdir /root/elk
  • 2、创建docker-compose.yml文件
    cd /root/elk
touch docker-compose.yml

-3、docker-compose.yml 的文件内容如下

version: '3'
services:
elasticsearch: # 服务名称
image: elasticsearch:7.1.1 # 使用的镜像
container_name: elasticsearch # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=node-41 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=172.168.50.41 # 用于集群内各机器间通信,其他机器访问本机器的es服务
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
- discovery.seed_hosts=172.168.50.40,172.168.50.240,172.168.50.41 # es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
- cluster.initial_master_nodes=172.168.50.40,172.168.50.240,172.168.50.41 # es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /root/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 将容器中es的配置文件映射到本地,设置跨域, 否则head插件无法连接该节点
- esdata:/usr/share/elasticsearch/data # 存放数据的文件, 注意:这里的esdata为 顶级volumes下的一项。
ports:
- 9200:9200 # http端口
- 9300:9300 # es节点直接交互的端口,非http
volumes:
esdata:
driver: local # 会生成一个对应的目录和文件,如何查看,下面有说明。
  • 4、另外两台服务器也照着这个配置进行配置,但IP,以及节点名称需要改一下即可。
  • 5、内存设置,三台服务器都需要
两种方式:
1、操作简单,但是机器重启后需再次设置
sysctl -w vm.max_map_count=262144 2、直接修改配置文件, 进入sysctl.conf文件添加一行(解决容器内存权限过小问题) vi /etc/sysctl.conf sysctl vm.max_map_count=262144 sysctl -p 立即生效

-6、es的配置文件

  • 在当前目录下"/root/elk" 执行 vim elasticsearch.yml
  • elasticsearch.yml 内容如下:
    network.host: 0.0.0.0
http.cors.enabled: true # 设置跨域,主要用于head插件访问es
http.cors.allow-origin: "*" # 允许所有域名访问
{
"cluster_name" : "es-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
  • 9、使用head监控es集群
    // 拉取镜像
docker pull mobz/elasticsearch-head:5
// 启动
docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5
  • 10、在浏览器输入http://IP:9100

    注意,IP地址要使用你es所在服务器的地址,然后点击连接,出现类似的显示说明,没问题,这里是三个节点,星星代表master。

    如果点击连接没有反应,F12查看network是403,或者200,但是console中提示跨域,那么说明跨域设置的有问题,直接进入容器中,使用 docker exec -it 容器ID /bin/bash ,检查/usr/share/elasticsearch/config/elasticsearch.yml文件,是否有以下两行:
http.cors.enabled: true
http.cors.allow-origin: "*"
  • 上面说到的顶级volumes, 如何查看挂载卷在宿主机的位置呢?
    # docker volume create elk_data // 创建一个自定义容器卷
# docker volume ls // 查看所有容器卷
# docker volume inspect elk_data // 查看指定容器卷详情信息, 包括真实目录
注意: 如果你要删除一个挂载卷,或者重新生成,请执行删除卷操作
# docker volume rm edc-nginx-vol // 直接执行这个命令,同时会删除文件,但是先删除文件的话,必须执行此命令,否则可能导致该节点无法加入集群。

以上都完成,则es三节点集群搭建完成,下面修改172.168.50.41服务器的/root/elk/docker-compose.yml文件,之前只是es,现在将支持ELK

ELK 前置工作, 升级pip,预先拉取要使用的镜像

    // 下载elasticsearch,logstash,kibana, 自es5开始,一般三个软件的版本都保持一致了。

    docker pull docker.elastic.co/elasticsearch/elasticsearch:7.1.1 && docker pull docker.elastic.co/logstash/logstash:7.1.1 && docker pull docker.elastic.co/kibana/kibana:7.1.1

ELK搭建

  • 1、建立存放elk配置文件的目录,

    cd /root/elk

    vim docker-compose.yml // 作为docker-compose启动elk这一组容器的引导文件
  • 2、docker-compose.yml文件内容如下
version: '3'
services:
elasticsearch: # 服务名称
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1 # 使用的镜像
container_name: elasticsearch7.1.1 # 容器名称
environment: # 环境变量
- node.name=node-41 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=172.168.50.41 # 用于集群内各机器间通信,其他机器访问本机器的es服务
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
- discovery.seed_hosts=172.168.50.40,172.168.50.240,172.168.50.41 # es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点
- cluster.initial_master_nodes=172.168.50.40,172.168.50.240,172.168.50.41 # es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群
#- http.cors.enabled=true # 是否支持跨域,是:true,主要用于head插件访问es,这里设置不起作用,原因未知,我们会将es的配置文件映射到宿主机进行修改
#- http.cors.allow-origin="*" # 表示支持所有域名,是:true,这里设置不起作用,原因未知,我们会将es的配置文件映射到宿主机进行修改
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存大小
volumes:
- esdata:/usr/share/elasticsearch/data # 设置es数据存放的目录
- /root/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml # 映射es容器中的配置文件到宿主机
hostname: elasticsearch # 服务hostname
ulimits: # 是否限制内存
memlock:
soft: -1
hard: -1
restart: always # 重启策略
ports:
- 9200:9200 # http端口
- 9300:9300 # es节点直接交互的端口,非http
kibana:
image: docker.elastic.co/kibana/kibana:7.1.1
container_name: kibana7.1.1
environment:
- elasticsearch.hosts=http://elasticsearch:9200 # 设置连接的es节点
hostname: kibana
depends_on:
- elasticsearch # 依赖es服务,会先启动es容器在启动kibana
restart: always
ports:
- 5601:5601 # 对外访问端口
logstash:
image: docker.elastic.co/logstash/logstash:7.1.1
container_name: logstash7.1.1
hostname: logstash
restart: always
depends_on:
- elasticsearch
ports:
- 9600:9600 # 这两个端口, 我进行测试其他功能用的,在本文中不用配置问题应该也不大。
- 5044:5044
volumes: # 顶级volumes
esdata:
driver: local # 会生成一个对应的目录和文件,如何查看,下面有说明。
  • 当前目录执行 docker-compose up -d 启动ELK服务
    出现done表示成功,docker-compose logs 查看日志(分别输出elk三个服务的日志)执行docker ps -a 可以看到三个服务的运行状态
在浏览器输入http://IP:5601/ 访问kibana
  • 另外注意通过head连接ELK服务器的es,看看是否正常连接,如果三个es节点都正常,http://IP:5601也可以正常访问,那么ELK集群搭建完成。

接下来,我会写一篇使用使用ELK + kafka(zookeeper) + filebeat 的实用架构方案。

通过docker搭建ELK集群的更多相关文章

  1. Docker 搭建 ELK 集群步骤

    前言 本篇文章主要介绍在两台机器上使用 Docker 搭建 ELK. 正文 环境 CentOS 7.7 系统 Docker version 19.03.8 docker-compose version ...

  2. 【杂记】docker搭建ELK 集群6.4.0版本 + elasticsearch-head IK分词器与拼音分词器整合

    大佬博客地址:https://blog.csdn.net/supermao1013/article/category/8269552 docker elasticsearch 集群启动命令 docke ...

  3. Docker 搭建 etcd 集群

    阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...

  4. Docker搭建PXC集群

    如何创建MySQL的PXC集群 下载PXC集群镜像文件 下载 docker pull percona/percona-xtradb-cluster 重命名 [root@hongshaorou ~]# ...

  5. Docker搭建RabbitMQ集群

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

  6. docker搭建etcd集群环境

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

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

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

  8. 使用Docker搭建Spark集群(用于实现网站流量实时分析模块)

    上一篇使用Docker搭建了Hadoop的完全分布式:使用Docker搭建Hadoop集群(伪分布式与完全分布式),本次记录搭建spark集群,使用两者同时来实现之前一直未完成的项目:网站日志流量分析 ...

  9. 使用Docker搭建Hadoop集群(伪分布式与完全分布式)

    之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hado ...

随机推荐

  1. 【pep8规范】arc diff 不符合 pep 8 规范

    arc land 的时候,arc报错提示代码不符合pep8规范: 1.单行代码过长(括号中的换行不需要加 /) python代码换行加 / https://blog.csdn.net/codechel ...

  2. Java使用jxl修改现有Excel文件内容,并验证其是否对公式的结果产生影响

    jxl的maven坐标: <!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl --> <dep ...

  3. 【Leetcode_easy】766. Toeplitz Matrix

    problem 766. Toeplitz Matrix solution1: class Solution { public: bool isToeplitzMatrix(vector<vec ...

  4. Python3之切片及内置切片函数slice

       切片   取一个list或tuple的部分元素是非常常见的操作.比如,一个list L=[0,1,2,3,4,5,6,7,8,9] 取前3个元素,应该怎么做 笨方法,一个个列出来 >> ...

  5. .Net Core 请求上下文IHttpContextAccessor

    namespace Microsoft.AspNetCore.Http { public interface IHttpContextAccessor { HttpContext HttpContex ...

  6. 心の壁 From EOE:Air / 真心为你

    https://www.bilibili.com/bangumi/media/md10272/ 真嗣:我问你. 凌波:什么? 真嗣:梦到底是什么呢? 凌波:梦? 真嗣:我不太明白什么是现实. 凌波:你 ...

  7. 如何实现批量截取整个网页完整长截图,批量将网页保存成图片web2pic/webshot/screencapture/html2picture

    如何实现批量截取整个网页完整长截图,批量将网页保存成图片web2pic/webshot/screencapture [困扰?疑问?]: 您是否正受到:如何将网页保存为图片的困扰?网页很高很长截图截不全 ...

  8. 使用说明(2S)

    [Build Status] 功能 系统代理设置 PAC 模式和全局模式 [GFWList] 和用户规则 支持 HTTP 代理 支持多服务器切换 支持 UDP 代理 支持插件 下载 下载 [最新版]. ...

  9. python for循环 - python基础入门(11)

    在python开发中,除了前篇文章介绍的while循环还有一个for循环也经常使用,两者使用都是大同小异,for循环的使用相对于while循环更加灵活,下面我们一起来了解下具体区别. 一.for 循环 ...

  10. 99%的人都理解错了GET与POST的区别

    原文链接:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3 ...