起因

最近阿里的费用消耗过高,所以打算从阿里迁移到有一定的优惠的azure china上,其实我本人是抗拒的
一,azure 的生态还不够完善,比如类似阿里的容器系统,一键部署的服务都得自己用k8s,或者swarm进行控制统一部署
二,部署时会有和种安全性的配置,还需要去里面自己管理平台进行设置
其它的就没什么特别的问题了,和正常的ubuntu使用没有太大的区别

准备

  • docker
  • docker-compose
  • nginx镜像
    安装docker ,使用python pip 安装docker-compose ,装备nginx 镜像

场景

  • 有一台主机器 A
  • 若干从机B,C,D,E,F
  • 开放主机3001 的http端口,转发到从机的,3301这样可以实现负载均衡,统一一个入口点,当然,负载的策略可以根据自己的需要来,具体可以查查nginx weight 的关键字

使用

准备我们的nginx 的应用配置文件 appfirst.conf

    upstream appfirst {
        server 10.0.0.4:3301;
        server 10.0.0.5:3301;
        server 10.0.0.7:3301;
        server 10.0.0.8:3301;
        server 10.0.0.9:3301;
    }
    
    server {
        listen 3301;
    
        # The host name to respond to
        server_name appfirst;
    
        location / {
            proxy_pass http://appfirst;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Real-Port $server_port;
            proxy_set_header X-Real-Scheme $scheme;
        }
    }

在upsteam里面,填入的就是我们实际的B,C,D,E,F appfirst 应用内网地址,如果你有多个应用需要转发,可以类似的编写appsecond.conf …等等
在同目录下编写docker-compose.yml文件,内容如下

    proxy:
        image: nginx
        ports:
            - "3301:3301"
            #- "3302:3303"
            #- "3303:3303"
        volumes:
            - "./appfirst.conf:/etc/nginx/conf.d/appfirst.conf"
            #- "./appsecond.conf:/etc/nginx/conf.d/appsecond.conf"
            #- "./appthird.conf:/etc/nginx/conf.d/appthird.conf"

Ok ,准备工作都做完了,将docker-compose.yml,appfirst.conf等放在同一个目录 ,使用如下命令

    sudo docker-compose up -d 

将接下来就可以看到使用docker-compose 的nginx的负载均衡就完成了