官方文档:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/node
docker-compose 解决单台机器多服务协同工做问题python
docker-swarm 解决多台机器,实现集群高可用,负载均衡ios
# 在没有加入过集群的干净的且安装了docker的单节点上 docker swarm init
2.查看如何增长管理节点或worker节点命令及对应tokennginx
docker swarm join-token worker | manager # 在管理节点上,执行上面的命令会生成加入该swarm集群的命令
3.在预加入swarm集群的机器上,以工做节点加入swarmdocker
docker swarm join --token SWMTKN-1-3ube2y4dopioi3nk0z1ossxdryixqxughkufios3f1edywcb45-f3bxjlcqqalcpoxeh2v5mlva3 192.168.0.150:2377 \ --advertise-addr 192.168.0.151:2377 \ --listen-addr 192.168.0.151:2377 # 简化命令 docker swarm join 192.168.0.151:2377
4.查看swarm中的节点负载均衡
docker node ls
5.旧的管理节点从新加入swarm,或者某台机子docker重启为防止请除了swarm配置ide
# 在一个管理节点上加入自动锁: 会生成一个密钥,在从新加入时须要用到 docker swarm update --autolock=true # 重启管理节点 service docker restart # 查看节点是否加入: 并无,显示其down和unreachable下线和不能到达的 docker node ls # 执行以下安装的将一个已经下掉的管理节点从新加入 $ docker swarm unlock Please enter unlock key: <enter your key>
6.docker swarm 删除节点 (解散集群)性能
# 排空节点上的集群容器 docker node update --availability drain 8gt1q5bkq5cac5e49o9da3ahd # 主动离开集群,让节点处于down状态,才能删除 docker swarm leave # 删除指定节点 (管理节点上操做) docker node rm g36lvv23ypjd8v7ovlst2n3yt # 管理节点,解散集群 docker swarm leave --force
Raft协议:保证大多数节点存活才可用,即>1,集群至少大于3台!rest
环境:双主双从,假设一个节点挂了,其它节点是否可用?日志
将docker主节点【leader】机器宕机,另外一个主节点【reachable】也不能使用,即【两台主挂了一台,就不能用】
将原主节点重启后,又自动加入了,但其如今不是leader了,而是reachable了,但集群能够用了
直接经过命令部署集群服务
# 开启服务且启动一个实例 docker run #容器启动,没有扩缩容 docker Service create -p 8000:80 --name my-nginx nginx # 集群启动,具备扩缩容,灰度升级,滚动更新 # 经过update更新的方式命令增长副本数量 docker service update --replicas 3 my-nginx # 经过update来减小副本数量 docker service update --replicas 1 my-nginx # 经过scale来扩缩容 docker service scale my-nginx=3
基于docker-compose.yml 文件部署集群服务
# 查看命令帮助 docker Service --help # 管理节点上操做 docker service ls
2.查看服务运行日志
docker service logs 服务名/服务id
3.【查看】查看集群服务实例运行状况
docker service ps 服务名/服务id # 查看服务运行中的容器分布在那些机器上 docker service ps 服务名/服务id --filter 'desired-state=running'
4.【重启】中止服务,而后启动服务
docker service rm 服务名 docker stack deploy -c docker-compose.yml llb
5.【更新】不停服务升级服务--更换新的版本镜像
docker service update --image 仓库/镜像名 经过docker service ls获得的服务名或服务id docker service update --image rc_ctec01009_createorder:20200803_v1 llb_ctec01009_create_order
6.【更新】不停服务升级服务【什么也没变】须要在上面的基础上加上--force参数
docker service update --image 10.251.26.11:5000/prod_python3_sunxiuwen_ctec01009_createorder:20200826_v1 llb_prod-ctec01009-create-order --force
7.【扩容】不停服务扩展服务
docker service scale 服务id=30
8.【回滚】不停服回滚上一次操做前
# 回滚上一次update改动版本【包含扩容都算更新】 docker service update --rollback llb_prod-ctec01009-service
通常服务是工做节点和管理节点都能启动实例
但副本分全局副本即全部节点【管理+工做】均可以跑,服务副本即只能在工做节点上跑
docker service create --help --mode string Service mode (replicated or global) (default "replicated") docker service create --mode replicated --name myservice nginx docker service create --mode global --name logCenter alpine ping baidu.com # 场景:日志收集 每个节点都有本身的日志收集器,过滤,把全部日志最终再传给日志中心 服务监控,状态性能