Docker容器Nginx负载均衡配置、check及stub模块安装


Nginx是一款高性能的HTTP和反向代理、负载均衡web服务器。本次在Docker容器中部署三个tomcat,Nginx代理三个tomcat服务(以下称节点)来模拟实现负载均衡效果,配置check模块,在前台查看各个节点的状态。

准备资料

  • Centos的Dokcer容器环境
  • jdk安装包,安装tomcat需要java运行环境,官网下载
  • Tomcat安装包,官网下载
  • Nginx安装包,官网下载
  • check补丁包master https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master

1、创建容器

  • -i 交互模式
  • -d 后端运行
  • -h 容器的hostname
  • --name 容器名
  • --network 网卡
  • --ip IP地址
  • -p 端口映射
  • --privileged=true 和 /usr/sbin/init 为特权模式参数
[root@localhost Tools]# docker run -i -d -h nginx --name nginx --net docker-br0 --ip 172.127.0.205 -p 1580:80 --privileged=true centos:7 /usr/sbin/init

2、上传资料 或者用wget命令下载

  • 进入容器
[root@localhost Tools]# docker exec -it nginx /bin/bash

  • 创建资料存放文件夹
[root@nginx /]# mkdir Tools

  • 更新yum源
[root@nginx /]# yum -y update

  • 安装常用命令及网络相关依赖包(vim zip unzip wget net-tools )
[root@nginx /]# yum -y install vim zip unzip wget net-tools

  • 使用wget下载master、nginx
[root@localhost Tools]# wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
[root@localhost Tools]# wget http://nginx.org/download/nginx-1.20.1.tar.gz
[root@nginx Tools]# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.18/bin/apache-tomcat-10.0.18.tar.gz

  • jdk下载需要Oracle账户登录,免费注册后即可下载,上传jdk安装包
  • docker cp 需在宿主机执行
[root@localhost Tools]# docker cp jdk-8u321-linux-x64.tar.gz nginx:/Tools/

3、安装jdk

  • 解压
    • -C 指定解压后的目录
[root@nginx Tools]# tar -zxvf jdk-8u321-linux-x64.tar.gz -C /usr/local/

  • 配置环境变量,使之生效
[root@nginx Tools]# vim /etc/profile
[root@nginx Tools]# source /etc/profile
[root@nginx Tools]# cat /etc/profile | grep export

  • 验证
[root@nginx Tools]# java -version

4、安装3个Tomcat服务

  • 解压后复制三份
[root@nginx Tools]# tar -zxvf apache-tomcat-10.0.18.tar.gz 
[root@nginx Tools]# cp -R apache-tomcat-10.0.18 /usr/local/tomcat01
[root@nginx Tools]# cp -R apache-tomcat-10.0.18 /usr/local/tomcat02
[root@nginx Tools]# cp -R apache-tomcat-10.0.18 /usr/local/tomcat03
  • 修改配置文件,主要是调整端口,三个tomcat的端口不一致即可
[root@nginx Tools]# vim /usr/local/tomcat01/conf/server.xml 
[root@nginx Tools]# vim /usr/local/tomcat02/conf/server.xml 
[root@nginx Tools]# vim /usr/local/tomcat03/conf/server.xml 
[root@nginx Tools]# cat /usr/local/tomcat01/conf/server.xml

  • 启动三个tomcat服务
[root@nginx Tools]# /usr/local/tomcat01/bin/startup.sh
[root@nginx Tools]# /usr/local/tomcat02/bin/startup.sh
[root@nginx Tools]# /usr/local/tomcat03/bin/startup.sh

  • 验证
[root@nginx Tools]# ps -ef | grep tomcat

5、安装Nginx

  • 安装依赖包
[root@nginx Tools]# yum -y install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel patch

  • 解压
[root@nginx Tools]# tar -zxvf nginx-1.20.1.tar.gz 
[root@nginx Tools]# unzip master 

check模块非官方程序,需选择对应版本的补丁进行更新

  • 打补丁,必须在解压后的文件目录
[root@nginx Tools]# cd nginx-1.20.1
[root@nginx nginx-1.20.1]# patch -p1 < /Tools/nginx_upstream_check_module-master/check_1.20.1+.patch

  • 配置
    • --prefix 指定安装Nginx的路径
    • --with-http_stub_status_module 增加stub模块,用来检测集群节点的请求状态
    • --add-module=/Tools/nginx_upstream_check_module-master/ check模块,主动检测集群状态模块
[root@nginx nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --add-module=/Tools/nginx_upstream_check_module-master/

  • 编译及安装
[root@nginx nginx-1.20.1]# make && make install

  • 配置nginx.conf,一般在安装文件的conf目录下,本例为/usr/local/nginx/conf/nginx.conf
[root@nginx nginx-1.20.1]# vim /usr/local/nginx/conf/nginx.conf
worker_processes  1;          # 进程数
events {
    worker_connections  1024; # 连接数
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    # 集群配置
    upstream tomcat {
        server 172.127.0.205:8080 weight=1 max_fails=3 fail_timeout=30s ;
        server 172.127.0.205:8081 weight=1 max_fails=3 fail_timeout=30s ;
        server 172.127.0.205:8081 weight=1 max_fails=3 fail_timeout=30s ;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat;    # 代理配置
        }
        # check模块配置
        location /check_status {
                   check_status;
                   access_log off;
            }
        # stub模块配置
        location /stub_status {
                   stub_status;
                   access_log off;
            }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
  • 启动nginx
[root@nginx nginx-1.20.1]# /usr/local/nginx/sbin/nginx 
  • 验证nginx
[root@nginx nginx-1.20.1]# ps -ef | grep nginx

6、代理、负载状态check、stub模块验证

  • 代理验证

  • 负载状态check

  • stub模块验证