为了账号安全,请及时绑定邮箱和手机立即绑定

Nginx反向代理负载均衡的容器化部署

首先在home目录创建microservices目录开启第一篇章。

cd ~ && mkdir microservices && cd microservices

创建nginx目录在目录下分别创建三个节点目录nginx01nginx02nginx03目的是使nginx01作为反向代理服务器将请求均衡转发到nginx02nginx03

mkdir -p ./nginx/nginx01 ./nginx/nginx02 ./nginx/nginx03

展示效果如下所示。

nginx
├── nginx01
└── nginx02
└── nginx03

将nginx镜像中的配置文件拷贝到各子目录中以便做挂载方法是创建一个临时容器将配置文件拷贝至宿主机目录再删除临时容器。

docker run --name tmpnginx -d nginx:latest
docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx01
docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx02
docker cp tmpnginx:/etc/nginx/nginx.conf ~/microservices/nginx/nginx03
docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx01
docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx02
docker cp tmpnginx:/etc/nginx/conf.d ~/microservices/nginx/nginx03
docker rm -f tmpnginx

此时nginx目录如下所示。

nginx
├── nginx01
│   ├── conf.d
│   │   └── default.conf
│   └── nginx.conf
├── nginx02
│   ├── conf.d
│   │   └── default.conf
│   └── nginx.conf
└── nginx03
    ├── conf.d
    │   └── default.conf
    └── nginx.conf

在根目录创建文件docker-compose.yml创建三个web服务配置文件分别映射到容器中的对应文件。

version: '3'

services:
  web01:  #服务名称
    image: nginx:latest #镜像
    container_name: web01 #容器名称
    ports:  #映射端口号前者宿主机端口后者容器端口
      - 8080:80
    volumes: #映射的目录或文件前者宿主机目录后者容器目录
      - ./nginx/nginx01/nginx.conf:/etc/nginx/nginx.conf #配置文件
      - ./nginx/nginx01/conf.d:/etc/nginx/conf.d #扩展配置目录
      - ./nginx/html:/usr/share/nginx/html #html存放目录

  web02:
    image: nginx:latest
    container_name: web02
    volumes:
      - ./nginx/nginx02/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/nginx02/conf.d:/etc/nginx/conf.d
      - ./nginx/html:/usr/share/nginx/html

  web03:
    image: nginx:latest
    container_name: web03
    volumes:
      - ./nginx/nginx03/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/nginx03/conf.d:/etc/nginx/conf.d
      - ./nginx/html:/usr/share/nginx/html

打开nginx/nginx01/conf.d/default.conf在文章顶部加入upstream配置web02与web03是docker-compose.yml中定义的容器名称container_name

upstream backend {
    server web02:80;
    server web03:80;
}

location /中加入proxy_pass以便将请求转发给backend

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    proxy_pass http://backend;  #追加该行
}

配置完成后执行以下命令将容器跑起来。

cd ~/microservices
docker-compose up

提示以下内容即成功。

Recreating microservices_web01_1 ... done
Recreating microservices_web02_1 ... done
Recreating microservices_web03_1 ... done
Attaching to web02, web01, web03

此时microservices目录结构如下nginx目录下多出了一个html文件夹可以在html目录下创建一个index.html输入Hello world!重新跑一下。

microservices
├── docker-compose.yml
└── nginx
    ├── html
    │   └── index.html
    ├── nginx01
    │   ├── conf.d
    │   │   └── default.conf
    │   └── nginx.conf
    ├── nginx02
    │   ├── conf.d
    │   │   └── default.conf
    │   └── nginx.conf
    └── nginx03
        ├── conf.d
        │   └── default.conf
        └── nginx.conf

现在做个测试在浏览器中访问localhost:8080观察终端打印的日志。

web01    | 172.24.0.1 - - [26/Jun/2019:01:48:28 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web02    | 172.24.0.2 - - [26/Jun/2019:01:48:28 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

上述内容表示本次请求通过web01转发到了web02。

web01    | 172.24.0.1 - - [26/Jun/2019:04:42:36 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"
web03    | 172.24.0.2 - - [26/Jun/2019:04:42:36 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" "-"

再次刷新可以看到请求通过web01转发到了web03到目前为止基本的负载均衡部署就已经完成了上述的web01是将请求均衡转发到web02、web03的这种方法叫轮询法下篇文章介绍几种其他的负载算法。


欢迎入伙Github开源书籍

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
94
获赞与收藏
383

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消