通过docker搭建ELK集群

注意点

  • 服务器内存:要求不低于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.3.1      # 使用的镜像
    container_name: elasticsearch   # 容器名称
    restart: always                 # 失败自动重启策略
    environment:
      - node.name=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 // 这里设置不起作用,但是可以进入容器里面在elasticsearch.yml 文件中添加,或者将此文件映射到宿主机进行修改,然后重启,解决跨域
      # - http.cors.allow-origin="*" # 表示支持所有域名      // 这里设置不起作用,但是可以进入容器里面在elasticsearch.yml 文件中添加,或者将此文件映射到宿主机进行修改,然后重启,解决跨域
      - 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,预先拉取要使用的镜像

    yum -y install epel-release
    yum -y install python-pip

    // 更新pip
    pip install --upgrade 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

接下来,我会写一篇使用如何使用ELK的文章。写好后我会将文章地址贴在此处、

原文地址:https://www.cnblogs.com/lz0925/p/12023521.html

时间: 2024-10-08 22:47:48

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

Docker搭建RabbitMQ集群

Docker搭建RabbitMQ集群 Docker安装 见官网 RabbitMQ镜像下载及配置 见此博文 集群搭建 首先,我们需要启动运行RabbitMQ docker run -d --hostname my-rabbit -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 -p 25672:25672 -p 4369:4369 -v $PWD/rabbitmq-data:/var/rabbitmq/lib --name my_rab

Docker搭建PXC集群

如何创建MySQL的PXC集群 下载PXC集群镜像文件 下载 docker pull percona/percona-xtradb-cluster 重命名 [[email protected] ~]# docker tag docker.io/percona/percona-xtradb-cluster pxc 创建内部网络 处于安全考虑,需要给PXC集群实例创建Docker内部网络 创建网段: [[email protected] ~]# docker network create --sub

docker 搭建zookeeper集群和kafka集群

docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用. Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multicontainer Docker appl

使用 Docker搭建 ZooKeeper 集群

1.镜像下载 docker pull zookeeper 2.启动 ZK 镜像 >>> docker run --name my_zookeeper -d zookeeper:latest 这个命令会在后台运行一个 zookeeper 容器, 名字是 my_zookeeper, 并且它默认会导出 2181 端口.接着我们使用: docker logs -f my_zookeeper 3.使用 ZK 命令行客户端连接 ZK 因为刚才我们启动的那个 ZK 容器并没有绑定宿主机的端口, 因此我

Docker搭建redis-cluster集群三主三备

环境准备 系统:centos7.7 redis:5.0.5 master1:192.168.33.9:7071 master2:192.168.33.10:7072 master3:192.168.33.11:7073 slave1:192.168.33.9:7074 slave2:192.168.33.10:7075 slave3:192.168.33.11:7076 一.搭建redis集群(以下步骤在每台服务器上都要执行) 1.>安装docker yum -y install docker

docker搭建Hadoop集群

一个分布式系统基础架构,由Apache基金会所开发. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储. 首先搭建Docker环境,Docker版本大于1.3.2 安装主机监控程序和加速器(curl -sSL https://get.daocloud.io/daomonit/install.sh | sh -s 7a029f60d36056fe1b85fabca6a133887245abe6) docker pull daocloud.io/library

ubuntu14.04环境下利用docker搭建solrCloud集群

主要内容: 技术关键点:docker17.06.3安装,docker自制镜像及相关容器操作,docker分配固定IP及添加端口映射,solrCloud集群部署等 主要思路:在Ubuntu14.04操作系统的宿主机中,安装docker17.06.3,将宿主机的操作系统制作成docker基础镜像,之后使用自制的基础镜像在docker中启动3个容器,分配固定IP,再在3个容器中配置solrCloud集群. 注:solrCloud采用的solr内置jetty,需要单独配置zookeeper 容器IP及名

docker 搭建PXC集群 与 redis集群

docker基本指令: 更新软件包 yum -y update 安装Docker虚拟机(centos 7) yum install -y docker 运行.重启.关闭Docker虚拟机 service docker start service docker stop 搜索镜像 docker search 镜像名称 下载镜像 docker pull 镜像名称 查看镜像 docker images 删除镜像 docker rmi 镜像名称 运行容器 docker run 启动参数 镜像名称 查看容

Docker搭建mysql集群

RXC方案与Replication方案的对比: RXC采用同步复制,事务在所有集群节点要么同时提交,要么不提交 Replication采用异步复制,无法保证数据的一致性 RXC镜像下载 docker官方仓库:https://hub.docker.com docker pull percona/percona-xtradb-cluster docker创建内部网段 docker network create --subnet=172.18.0.0/24 net1 docker卷:容器中的PXC节点