基于docker swarm搭建ELK集群

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39198406/article/details/85034552

阿里云docker安装教程以及镜像下载加速
docker-elastic镜像地址

1 Swarm介绍

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
总而言之使用swarm搭建集群是非常方便的,先看一下docker swarm的一些命令。

root@iZwz:~# docker swarm -h
Flag shorthand -h has been deprecated, please use --help

Usage:	docker swarm COMMAND

Manage Swarm

Commands:
  ca          Display and rotate the root CA  # 加入集群后,显示管理节点的根证书
  init        Initialize a swarm  # 初始化一个集群
  join        Join a swarm as a node and/or manager  # 作为管理节点或者普通节点加入一个集群
  join-token  Manage join tokens  # 可以显示worker和manage加入的tokens
  leave       Leave the swarm  # 离开这个集群
  unlock      Unlock swarm  # 解锁集群
  unlock-key  Manage the unlock key  # 管理解锁密钥
  update      Update the swarm  # 更新集群

2. 初步使用

先准备好两台同网段的主机A和B,然后确保docker都安装好。
先初始化一个集群出来,在A主机上执行docker swarm init命令。这里会提示到加入集群的命令为docker swarm join --token ...

root@iZwz:~# docker swarm init
Swarm initialized: current node (92irgcp4xemxjzra97cnzonqk) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4bjd7a3lzrep33vl351isahd0tch4l2b61rky1mf8ee2f4 192.168.1.126:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

然后在B主机上执行上面的命令docker swarm join --token ...

root@iZwz9:~# docker swarm join --token SWMTKN-1-4bjd7a3lzrep33vl351isahd0tch4l2b61rky1mf8ee2f4izlu-0tdz2ef58x6 192.168.1.126:2377
This node joined a swarm as a worker.

这样B就加入了A创建的集群。
查看集群的节点使用docker node ls

root@iZwz96ociz0lats9i12tzpZ:~# docker node ls
ID                            HOSTNAME                  STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ej6p0305fr1tt8ccz2vyn872e     iZwz9                      Ready               Active                                  18.09.0
92irgcp4xemxjzra97cnzonqk *   iZwz                       Ready               Active              Leader              18.09.0

可以看到集群中已经有了两个节点,其中iZwz是管理节点。
查看网络,可以看到多了两个网络docker_gwbridgeswarm

root@iZwz96ociz0lats9i12tzpZ:~# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
1919a9525cf4        bridge              bridge              local
e6f18d4a9240        docker_gwbridge     bridge              local
94d29affd332        host                host                local
fsd9xxtmtpcc        ingress             overlay             swarm
539fd79f795c        none                null                local

3. 编写docker-compose file

以下的compose-file做了这些事情:

  1. 启动两个es
  2. 启动两个logstash
  3. 启动一个kibana
  4. 创建两个数据卷
  5. 创建一个overlay网络
version: '3.6'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
    deploy:
      placement:
        constraints:
          - node.role == manager
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch"
    volumes:
      - esdata2:/usr/share/elasticsearch/data
    networks:
      - esnet
    deploy:
      placement:
        constraints:
          - node.role == worker
  logstash:
    image: docker.elastic.co/logstash/logstash:6.2.4
    environment:
      - "LS_JAVA_OPTS=-Xms256m -Xmx256m"
    networks:
      - esnet
    deploy:
      replicas: 2
  logstash2:
    image: docker.elastic.co/logstash/logstash:6.2.4
    environment:
      - "LS_JAVA_OPTS=-Xms256m -Xmx256m"
    networks:
      - esnet
    deploy:
      replicas: 2
  kibana:
    image: docker.elastic.co/kibana/kibana:6.2.4
    ports:
      - "5601:5601"
    networks:
      - esnet
    deploy:
      placement:
        constraints:
          - node.role == manager
volumes:
  esdata1:
    driver: local
  esdata2:
    driver: local

networks:
  esnet:
    driver: "overlay"

4. 在集群上启动ELK系列服务

执行docker stack deploy -c docker-compose.yaml elk_cluster启动服务:

root@iZw:~/docker_i/elk_cluster# docker stack deploy -c docker-compose.yaml elk_cluster
Creating network elk_cluter_esnet
Creating service elk_cluter_elasticsearch2
Creating service elk_cluter_logstash
Creating service elk_cluter_logstash2
Creating service elk_cluter_kibana
Creating service elk_cluter_elasticsearch

查看在不同节点上启动的容器:

docker ps -a

可以在管理节点上查看所启动的服务:

docker service ls

查看日志:

docker service logs -f elk_cluster

删除服务:

docker stack rm elk_cluster

部分参考:https://www.cnblogs.com/franknihao/p/8490416.html

猜你喜欢

转载自blog.csdn.net/weixin_39198406/article/details/85034552
今日推荐