使用Nginx为nginx docker容器做负载均衡的一次实践

使用Nginx为nginx docker容器做负载均衡的一次实践

Author:apt
Date:2018.12.18
usage:一次使用Nginx为五台docker容器中的nginx做负载均衡的实践笔记

文章目录

  • 使用Nginx为nginx docker容器做负载均衡的一次实践
    • 架构图
    • 测试环境
      • 版本信息
      • 环境简介
      • 其他注意事项
    • 测试操作步骤
    • 参考博客、文章

架构图

使用Nginx为nginx docker容器做负载均衡的一次实践_第1张图片

测试环境

版本信息

  • 操作系统:CentOS Linux release 7.6.1810
  • Docker-ce:18.03.1
  • Nginx:1.15.7(Docker image)
  • Nginx:1.12.2(rpm)

环境简介

内网IP Hostname 操作系统 安装软件 作用
172.16.37.4 apt-1 CentOS 7.6 Nginx 反向代理和负载均衡作用
172.16.37.5 apt-2 CentOS 7.6 Docker Docker运行的5个Nginx container作为被代理方

其他注意事项

  • Docker版本的选择:商业版可以选择docker-ee非商业版可以选择docker-ce
  • Nginx版本的选择:(待商榷)
  • Nginx镜像的选择:(待商榷)
  • 操作系统版本的选择:Centos7以上或者Ubuntu16.04以上(Ubuntu更适合使用Docker)

测试操作步骤

下面的内容直接使用Hostname代替IP

  1. 对两台服务器做一些初始化操作以及安全加固配置等(略过)

  2. 在apt-1上面安装nginx

    这里为了方便快速进行测试就直接使用yum进行安装了

    [root@apt-1 ~]# yum -y install nginx 
    
  3. 在apt-2上面安装Docker-CE

    安装Docker-CE的步骤

    # step 1: 安装必要的一些系统工具
    [root@apt-2 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
    # Step 2: 添加软件源信息
    [root@apt-2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # Step 3: 更新并安装 Docker-CE
    [root@apt-2 ~]# yum makecache fast
    [root@apt-2 ~]# yum -y install docker-ce
    # Step 4: 开启Docker服务并且设置为开机启动
    [root@apt-2 ~]# systemctl start docker
    [root@apt-2 ~]# systemctl enable docker 
    

    检查一下docker的版本

    [root@apt-2 ~]# docker version 
    Client:
     Version:           18.09.0
     API version:       1.39
     Go version:        go1.10.4
     Git commit:        4d60db4
     Built:             Wed Nov  7 00:48:22 2018
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          18.09.0
      API version:      1.39 (minimum version 1.12)
      Go version:       go1.10.4
      Git commit:       4d60db4
      Built:            Wed Nov  7 00:19:08 2018
      OS/Arch:          linux/amd64
      Experimental:     false
    
  4. 在apt-2上面pull Nginx Image

    [root@apt-2 ~]# docker pull nginx
    Using default tag: latest
    latest: Pulling from library/nginx
    a5a6f2f73cd8: Pull complete 
    1ba02017c4b2: Pull complete 
    33b176c904de: Pull complete 
    Digest: sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dba
    Status: Downloaded newer image for nginx:latest
    
  5. 在apt-2本地 /data/nginx 目录下分别创建nginx{1…5}用来存放5个nginx container需要的文件

    [root@apt-2 ~]# mkdir -p /data/nginx/nginx{1..5}
    [root@apt-2 ~]# mkdir -p /data/nginx/nginx{1..5}/conf.d    # 用来存放nginx的配置类文件
    [root@apt-2 ~]# mkdir -p /data/nginx/nginx{1..5}/html      # 用来存放html资源
    
  6. 对apt-1的Nginx配置和apt-2的Docker Nginx配置文件进行修改

    修改apt-1的Nginx配置文件,使访问Nginx能对nginx container进行轮询访问。如下所示:

    [root@apt-1 ~]# vim /etc/nginx/nginx.conf
    
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        
        upstream docker	   # 添加需要进行轮询访问的nginx container的IP与PORT
        {
            server 172.16.37.5:801;
            server 172.16.37.5:802;
        }
    
        server {
            listen       80;
            server_name  47.98.211.195;
            
            location / {
                proxy_pass http://docker;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    修改apt-2中nginx1与nginx2的default.conf配置文件(其他都可以默认,只要修改server_name为本机IP即可)

    [root@apt-2 ~]# vim /data/nginx/nginx1/conf.d/default.conf /data/nginx/nginx2/conf.d/default.conf  
    
    server {
        listen       80;
        server_name  172.16.37.5;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    
  7. 在apt-2的/data/nginx/nginx{1..5}/html目录下创建好index.html50x.html文件(这个是nginx container配置文件里面默认存在的,暂时就先按着一样的来操作比较好)

    编写nginx1的index.html

    [root@apt-2 nginx1]# vim /data/nginx/nginx1/html/index.html
    
    
    
    
    Welcome to nginx!
    this is nginx1 !!!
    
    

    编写nginx2的index.html

    [root@apt-2 nginx1]# vim /data/nginx/nginx2/html/index.html
    
    
    
    
    Welcome to nginx!
    this is nginx2 !!!
    
    

    50x.html则直接复制原来的文件内容即可,下面附上源文件内容

    root@97aae2c7c344:/usr/share/nginx/html# cat 50x.html 
    
    
    
    
    Error
    
    
    
    

    An error occurred.

    Sorry, the page you are looking for is currently unavailable.
    Please try again later.

    If you are the system administrator of this resource then you should check the error log for details.

    Faithfully yours, nginx.

  8. 在apt-2上面创建运行5个Nginx Container(其实2个就可以测试,所以暂时只使用2个container)

    创建运行2个nginx container,并把nginx需要的资源目录和nginx.conf配置文件挂载到container里面

    分别指定nginx的80端口映射到 801,802

    [root@apt-2 ~]# docker run -d -v "/data/nginx/nginx1/conf.d/:/etc/nginx/conf.d/" -v "/data/nginx/nginx1/html:/usr/share/nginx/html/" -p 801:80   --name nginx1 nginx:laster
    
    [root@apt-2 ~]# docker run -d -v "/data/nginx/nginx2/conf.d/:/etc/nginx/conf.d/" -v "/data/nginx/nginx2/html:/usr/share/nginx/html/" -p 802:80   --name nginx2 nginx:laster
    
  9. 启动所有的服务

    启动apt-1的Nginx服务

    [root@apt-1 ~]# systemctl start nginx 
    
  10. 测试验证

    在任意一台机器上访问 http://172.16.37.4:80,结果如下:

    [root@apt-1 ~]# curl 172.16.37.4
    
    
    
    Welcome to nginx!
    this is nginx2 !!!
    
    [root@apt-1 ~]# curl 172.16.37.4
    
    
    
    Welcome to nginx!
    this is nginx1 !!!
    
    [root@apt-1 ~]# curl 172.16.37.4
    
    
    
    Welcome to nginx!
    this is nginx2 !!!
    
    [root@apt-1 ~]# curl 172.16.37.4
    
    
    
    Welcome to nginx!
    this is nginx1 !!!
    
    
  11. 总结

    通过本次的测试步骤,已经成功的完成了通过nginx服务做反向代理与负载均衡实现了对docker容器内部的5个nginx container进行轮询访问

参考博客、文章

  • Docker镜像源站Ubuntu与CentOS的安装
  • Nginx反向代理和负载均衡

你可能感兴趣的:(运维相关)