Docker Swarm 集群搭建

Docker Engine 从v1.12.0版本开始,原生集成了 Docker Swarm,对集群的操作可以直接通过docker service命令来控制,非常方便,操作过程也大大简化。Docker Swarm 对于一般的开发者而言,最大的好处在于原生支持的负载均衡机制,能够有效的将service给scale up,借助 Raft Consensus 算法,将系统的 robustness 做得非常好,最大限度能够容忍 (n-1)/2 个故障节点。
搭建Swarm集群

安装最新docker

curl -sSL https://get.docker.com/ | sh CentOS 7防火墙放开 firewall-cmd --permanent --zone=trusted --add-port=2377/tcp && \ firewall-cmd --permanent --zone=trusted --add-port=7946/tcp && \ firewall-cmd --permanent --zone=trusted --add-port=7946/udp && \ firewall-cmd --permanent --zone=trusted --add-port=4789/udp && \ firewall-cmd --reload

创建管理节点

$ docker swarm init --advertise-addr 192.168.99.100 Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377 To add a manager to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 \ 192.168.99.100:2377

当管理节点创建完成,我们可以通过docker info和docker node ls命令查看节点创建情况。

$ docker info Containers: 2 Running: 0 Paused: 0 Stopped: 2 ...snip... Swarm: active NodeID: dxn1zf6l61qsb1josjja83ngz Is Manager: true Managers: 1 Nodes: 1 ...snip... $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS dxn1zf6l61qsb1josjja83ngz * manager1 Ready Active Leader 创建worker节点

根据前面命令行输出结果提示,现在将两台worker添加到集群中。记得执行时将相对应的token和IP地址换成实际情况中的值。

$ docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377 This node joined a swarm as a worker. $ docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.99.100:2377 This node joined a swarm as a worker. #这里可以设置静态hostname `hoshnamectl set-hostname worker2`

现在我们可以在manager1节点上查看集群中的所有节点

$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 3g1y59jwfg7cf99w4lt0f662 worker2 Ready Active j68exjopxe7wfl6yuxml7a7j worker1 Ready Active dxn1zf6l61qsb1josjja83ngz * manager1 Ready Active Leader

到目前为止,集群环境搭建完毕。

部署测试服务

我们以部署nginx为例,测试我们搭建的Swarm集群。

$ docker service create --replicas 3 --publish 8080:80 --name helloworld nginx

这里的--replicas参数用来表示nginx需要部署多少个实例,因为这里是三台物理机器,如果replicas设为3,swarm会在三台机器上各部署一个实例。如果想要重新scale实例的个数,可以通过下面的命令。

docker service scale helloworld=5

我们可以通过一系列的命令去查看nginx的部署情况,例如

$ docker service inspect --pretty helloworld $ docker service ps helloworld

删除一个服务也很简单,直接执行rm就可以了。

$ docker service rm helloworld

先来看一份 docker-compose.yml 文件,不用管这是干嘛的,只是有个格式方便后文解说:

version: '2' services: web: image: dockercloud/hello-world ports: - 8080 networks: - front-tier - back-tier redis: image: redis links: - web networks: - back-tier lb: image: dockercloud/haproxy ports: - 80:80 links: - web networks: - front-tier - back-tier volumes: - /var/run/docker.sock:/var/run/docker.sock networks: front-tier: driver: bridge back-tier: driver: bridge

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b0de54cacc03766d67ddbde05652b435.html