docker1.12 Swarm 模式简介
1.Docker Engine 1.12 集成了Swarm集群工具.
2.主要使用三个新的命令行工具创建一个swarm集群:
docker swarm 开启swarm模式; 加入Swarm集群; 配置集群参数
docker node 查询集群节点信息; 提升/移除一个管理节点; 管理swarm节点主机
docker service 创建管理 service
创建swarm集群
准备
两台centOS7(manager:10.10.135.154、worker:10.10.56.134)
安装docker1.12版本,具体操作参照官网:https://docs.docker.com/engine/installation/linux/centos/
创建swarm
manager节点初始化,为了高可用初始化后可以join多个manager节点
1 | [root@10-10-135-154 ~]# docker swarm init |
worker节点:加入到swarm
1 | [root@10-10-56-134 ~]# docker swarm join \ |
manager节点查看集群各个节点状态:
1 | [root@10-10-135-154 ~]# docker node ls |
创建service
创建管理service,相当于单机docker run
metebee/swarmdemo:0.0.1 是一个springboot搭建的rest服务
启动5个swarmdemo实例
1 | [root@10-10-135-154 ~]# docker service create --name hello --publish 8080:8080 --replicas 5 metebee/swarmdemo:0.0.1 java -jar /usr/down/swarmtest-0.0.1-SNAPSHOT.jar |
查看启动服务状态
1 | [root@10-10-135-154 ~]# docker service ls |
查看各个实例状态
1 | [root@10-10-135-154 ~]# docker service ps hello |
可以看到worker(10-10-56-134)上启动了两个实例;manager(10-10-135-154)上启动了3个实例
实时查看各个实例状态:
1 | watch docker service ps hello |
注意DESIRED STATE列, 一个service副本的创建过程,会经历以下几个状态:
—accepted 任务已经被分配到某一个节点执行
—preparing 准备资源, 现在来说一般是从网络拉取image
—running 副本运行成功
—shutdown 呃, 报错,被停止了…
此时如果杀死一个实例,swarm会自动重启该实例
1 | docker stop <ID> |
测试
在master执行
1 | curl http://127.0.0.1:8080/resttest/helloword |
控制台响应:helloworld
此时请求会随机转发到这5个springboot实例上。
session问题
由于swarm这种转发不像nginx的ip_hash模式,所以可以选择使用redis集中管理session的方式解决session问题。