注意点

  • 服务器内存:要求不低于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. PAT 甲级 1036 Boys vs Girls (25 分)(简单题)

    1036 Boys vs Girls (25 分)   This time you are asked to tell the difference between the lowest grade ...

  2. Xena L23网络测试仪Valkyrie使用技巧100例,目录

    Xena L23网络测试仪Valkyrie使用技巧100例,先写个目录 100例,会不会有点多,写不完... ^_^ 第1次编辑于2019-11-27 22:05:52, Evan YE. 编号 标题 ...

  3. 零基础python之列表的简单介绍

    你点击关注,就分你小鱼干 一.概念:列表,由一系列按特定顺序排列的元素组成. 在 python 中,用 [ ] 方括号来表示列表,并用逗号来分割其中的元素. 二.访问列表因素 列表是有序集合,如要访问 ...

  4. Memcached集群实现及原理介绍

    一.Memcached集群介绍 1.自身通过算法保证数据唯一性2.集群形式对用户和Memcached都是透明的3.Memcached的集群是通过客户端实现的4.Memcached服务端相互不认识 二. ...

  5. 【牛客网】Longest Common Subsequence

    [牛客网]Longest Common Subsequence 发现只有d数组最格路 于是我们把前三个数组中相同的数记成一个三维坐标,同一个数坐标不会超过8个 从前往后枚举d,每次最多只会更新不超过8 ...

  6. 【洛谷】P3980 [NOI2008]志愿者招募

    [洛谷]P3980 [NOI2008]志愿者招募 我居然现在才会用费用流解线性规划-- 当然这里解决的一类问题比较特殊 以式子作为点,变量作为边,然后要求就是变量在不同的式子里出现了两次,系数一次为+ ...

  7. 数据结构 -- 哈希表(hash table)

    简介   哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函 ...

  8. java日志框架系列(6):logback框架encoder详解

    1.Encoder 1.encoder功能 Encoder 负责两件事,一是把事件转换为字节数组,二是把字节数组写入输出流. 注意:在logback 0.9.19 版之前没有 encoder. 在之前 ...

  9. @ConfigurationProperties和@Value的区别

    @ConfigurationProperties @Value 功能: 批量注入配置文件中的属性 一个个指定,多个属性多个@Value 松散绑定: 支持 不支持 SpEL: 不支持    支持 JSR ...

  10. 20190621-N皇后

    N皇后 难度分类 困难 题目描述 n皇后问题研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n  ...