Docker swarm上线的一些问题
简介
由于公司高峰业务,单机服务不能承载那么多的并发量,考虑使用docker swarm作为集群。主要记录此次上线使用碰到的一些问题
4789端口和阿里云udp端口冲突问题
这个是最没有想到的问题,在测试环境的时候,节点之间的镜像同步发现没问题。但是上线之后,发现当更新镜像的时候,从节点一直报错No such image。首先想到的是iptable设置问题。
通过firewall-cmd --zone=public --list-ports查看发现端口都已经开放
- 用于集群管理通信的TCP端口2377
- TCP和UPD端口7946,用于节点之间的通信
- UPD端口4789,用于overlay网络流量。
检查主节点和从节点的iptables都没有发现.查看集群结点的话,也都是正常状态。链接在此
后来在查看一个链接的时候,发现了阿里云这里有这个问题。
这里也就是4789位系统保留端口。所以导致集群之间无法进行同步。找到问题后,把4789端口改变为5789.该问题顺利解决。
在创建docker swarm的时候,指定UDP端口号(范围1024-49151之间).并且docker 版本必须在1.40+
docker swarm init --advertise-addr 192.168.1.1 --data-path-port 5789
集群结点崩溃
发生的情况是,测试的时候,如果有3个结点,当其中一个Leader节点leave的时候,此时在执行命令就会报错。
Error response from daemon: rpc error: code = 4 desc = context deadline exceeded
使用该参数是保证,当丢失Leader时,强制重建集群
docker swarm init --force-new-cluster --advertise-addr 192.168.1.1 --data-path-port 5789