docker-swarm实践总结

1. 规划

  • 目前有多个系统,每个系统的运行应该尽量彼此独立

    使用各自的docker-compose.yml进行部署

  • 多个系统采用统一的nginx作为入口

    每个系统的配置尽量隔离开,这样采用nginx.config中的include属性来隔离开

    nginx使用的网络要对其他服务开放

    指定机器上运行

  • 多个系统采用统一的redis进行缓存

    redis使用的网络要对其他服务开放

    指定机器上运行

  • 多个系统的数据库mysql暂时使用各自的

    通过volumn将数据挂载到host上

    指定机器上运行

2. 步骤记录

配置nginx

在http{} 配置域内,通过include,引用各个系统自己的config文件

docker build -t registry-vpc.cn-xxxx.aliyuncs.com/registry-nameXXXX/duobang-nginx:0.2.2 .
docker push registry-vpc.cn-xxxx.aliyuncs.com/registry-nameXXXX/duobang-nginx:0.2.2

注意这里使用内网进行build与push,速度快了很多

配置各个系统的docker-compose.yml

需要将nginx与redis的网络在外侧创建出来:

docker network create -d overlay ingress-network
docker network create -d overlay redis-network

运行nginx与1个系统

  • 运行系统:

    docker stack deploy --with-registry-auth -c docker-compose.yml xxxStackName

    因为多个节点,所以使用--with-registry-auth,否则其他节点不能下载镜像;

  • 通过命令查看状态:

    docker stack ls
    docker stack ps xxxServiceName
    
  • 通过日志查看具体情况:

    docker service logs -f --tail 500 xxxServiceName
    
  • 访问路由确保能经过nginx,并且服务能正常访问:

    这个过程反复的看nginx日志,并修改nginx.config以及docker-compose.yml才可。

    这里注意一下两种nginx的反馈:

    1. xxx拒绝了我们的连接请求:
      nginx的问题,确认nginx.config配置
    2. 接口请求 502 Bad Gateway
      服务的问题,确认服务的docker-compose.yml

运行其他系统

3. 踩坑记录

  • nginx运行不起来

    access_log的位置以及配置不对

    access_log main; main不对

    listen listen 443 ssl

  • sight-server运行不起来

    数据库的密码重置没改docker-compose.yml

    数据库的密码重置没改sight-server中的配置文件,druid重新生成

  • 服务启动正常,但没法访问前端

    修正nginx.conf,发现需要将sight.conf中upstream的配置放到nginx.conf中,与http同等级

  • nginx不转发请求到前端

    网络配置问题

  • 挤掉了worker节点上的80端口

    overlay网络负载均衡的特点,导致worker节点上出现问题

  • 可以访问前端了,但访问不了后端

    认证对比了nginx的配置,配置没问题

    怀疑是后端的问题,从log中,发现了tomcat对host有_的情况,不解析。本身用stack自动生成的service名字会带有"_",且也可以做DNS转发,只不过转发后tomcat由于标准升级缘故不解析。

    搜索一顿之后,发现在docker-compose.yml中可以通过hostname属性为service指定hostname,然后在nginx.conf中通过hostname去做解析,而不通过service name

  • pms部署后,访问前端失败,后端服务接口可以访问

    问题是前端nginx报502,尚未确定原因,韩锐重新发布前端之后,可以正常访问,怀疑是版本问题

  • pms中用户有权限,却报鉴权失败

    从日志中发现,是docker-compose配置时,访问account的url出现笔误,导致鉴权失败

  • 发现日事日毕中缺少数据

    数据库移植日期是11-04,重新移植了数据库

4. 其他

  • 配置了docker自启动systemctl enable docker

  • docker images | awk '{print $3}' | xargs docker rmi --force

  • docker ps -a | awk '{print $1}' | xargs docker rm

  • 修改mysql的密码

    SET PASSWORD FOR 'root'@'%' = PASSWORD('Password2');
    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Password2');
    flush privileges;
    
# 微服务 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×