好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Docker_学习笔记系列之docker-swarm

官方文档:https://docs.docker测试数据/engine/swarm/how-swarm-mode-works/nodes/

docker-compose 解决单台机器多服务协同工作问题

docker-swarm 解决多台机器,实现集群高可用,负载均衡

搭建swarm集群 搭建swarm,初始化swarm集群,且设置本节点为管理节点
 # 在没有加入过集群的干净的且安装了docker的单节点上
docker swarm init 

2.查看如何增加管理节点或worker节点命令及对应token

 
docker swarm join-token worker |  manager
# 在管理节点上,执行上面的命令会生成加入该swarm集群的命令 

3.在预加入swarm集群的机器上,以工作节点加入swarm

 
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配置

 
# 在一个管理节点上加入自动锁: 会生成一个密钥,在重新加入时需要用到
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 
swarm集群的Raft协议【一致性协议】

Raft协议:保证大多数节点存活才可用,即>1,集群至少大于3台!

环境:双主双从,假设一个节点挂了,其它节点是否可用?

将docker主节点【leader】机器宕机,另一个主节点【reachable】也不能使用,即【两台主挂了一台,就不能用】

将原主节点重启后,又自动加入了,但其现在不是leader了,而是reachable了,但集群可以用了

如果是3个主节点,一个挂了,集群还可以用,如果2个挂了,集群就不可用了 管理集群

直接通过命令部署集群服务

 # 开启服务且启动一个实例
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 文件部署集群服务

获取服务id/服务名称
 # 查看命令帮助
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 服务副本及全局副本

一般服务是工作节点和管理节点都能启动实例

但副本分全局副本即所有节点【管理+工作】都可以跑,服务副本即只能在工作节点上跑

 
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测试数据

# 场景:日志收集
每一个节点都有自己的日志收集器,过滤,把所有日志最终再传给日志中心
服务监控,状态性能
 

查看更多关于Docker_学习笔记系列之docker-swarm的详细内容...

  阅读:38次