ELK集群以Docker 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 # 更新集群

初步使用

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

先准备好两台同网段的主机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

编写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"

在集群上启动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://blog.csdn.net/weixin_39198406/article/details/85034552

未经允许不得转载:便宜VPS网 » ELK集群以Docker Swarm的方式搭建