4.3.2 Nginx负载均衡器配置
  CYFozBbS5Dub 2023年11月02日 26 0

作者:田逸(formyz)

存在两个项目,一个是Web服务集群,另一个是Python集群。将这两个集群置于同一个负载均衡器之下,有效利用资源。


为了便于开展工作,先把资源分配列举出来,如表4-3所示。

表4- 3

名称

说明

Web服务VIP地址及TCP端口

172.16.35.188:80

自定义Python服务地址及TCP端口

172.16.35.189:10033

负载均衡器物理地址

172.16.35.111172.16.35.112

Web服务后端真实服务器地址

172.16.35.107-109

自定义Python后端真实服务器地址

172.16.35.113-115

操作系统

全部为Rocky 9

主要软件版本

Nginx-1.20.2 Keepalived-2.2.7

软件安装路径

/usr/local/nginx, /usr/local/keepalive

日志路径

/data/logs/keepalived.log,/data/logs/nginx.log


1)Nginx 负载均衡配置

用文本编辑器,撰写Nginx主配置文件”nginx.conf”,其完整内容如下:

user nginx;

worker_processes auto;

error_log /data/logs/nginx/error.log;

pid /run/nginx.pid;


# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.

include /usr/share/nginx/modules/*.conf;

include /etc/nginx/conf.d/tcp10033.conf;



events {

    worker_connections 1024;

}


http {

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';


    access_log  /data/logs/nginx/access.log  main;


    sendfile            on;

    tcp_nopush          on;

    tcp_nodelay         on;

    keepalive_timeout   65;

    types_hash_max_size 4096;


    include             /etc/nginx/mime.types;

    default_type        application/octet-stream;


    include /etc/nginx/conf.d/web.conf;

server {

        listen 80;

        server_name localhost;


        location / {

                proxy_pass http://web;

        }



        location /status {

           healthcheck_status html;

        }


        error_page 404 /404.html;

        location = /404.html {

        }


        error_page 500 502 503 504 /50x.html;

        location = /50x.html {

        }

    }


}


主配置文件以“include”指令包含两个自定义的子配置文件”web.conf”和“tcp10033.conf”,这两条的的位置特别有讲究。第一条自定义的“include  /etc/nginx/conf.d/tcp10033.conf”指令,必须要放在文本块 http{}之外;而另一行“include /etc/nginx/conf.d/web.conf”将其放在此处的用意是,单独把与Web服务相关的配置规整在一起,方便维护。指令错放位置,将会报错或者得不到期待的结果。


主配置文件”nginx.conf”中手动添加了文本块“location /status { healthcheck_status html;}”这个文本块的作用是可以通过Nginx第三方模块“healthckeck”收集负载均衡器健康检查实时反馈过来的后端真实服务器(Realserver)服务运行的状态,比登录系统查看日志更直观一些。与“第2章之2.2小节”所呈现方式差不多,但调用模块存在差异,因为”healthcheck_status”既收集Web服务的状态,也收集自定义的TCP服务状态。


Nginx子配置文件”tcp10033.conf”的完整内容如下:

stream {

    upstream tcp10033 {

        server 172.16.35.113:10033;

        server 172.16.35.114:10033;

        server 172.16.35.115:10033;


        check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;

    }

    log_format basic '$remote_addr [$time_local] '

                 '$protocol $status $bytes_sent $bytes_received '

                 '$session_time';



    server {

    listen 10033;

        proxy_pass tcp10033;

        access_log /data/logs/tcp10033-access.log basic buffer=32k;

    }

}


此配置文件有一个需要注意的地方,那就是需要把日志文件的路径“access_log /data/logs/tcp10033-access.log”定义到文本块“server{}”内部,虽然在外部也不会报错,但它不会真正起作用(不记录访问日志)。


另一个用于Web负载均衡、健康检查功能的子配置文件”web.conf”完整内容如下:

upstream web {

        server 172.17.35.107  max_fails=1 fail_timeout=10;

server 172.17.35.108  max_fails=1 fail_timeout=10;

        server 172.17.35.109  max_fails=1 fail_timeout=10;

        check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;

}

        access_log  /data/logs/access.log  main;


以纯文本方式撰写好Nginx所需的主配置、子配置文件后,人工检查一遍书写内容,接着在系统命令行执行”nginx -t”进行语法检查,无误后再继续执行指令“nginx”真正启动Nginx服务。通过远端的Web浏览器,输入刚配置完的负载均衡器所设定的url,正常情况下,可观察到整个集群的运行状况,如图4-3 所示。

4.3.2 Nginx负载均衡器配置_nginx

图4- 3

 

2)撰写监控Nginx进程的Shell脚本

在已经配置好Nginx的负载均衡器宿主系统命令行下,用文本编辑器撰写Shell脚本,基本思路是检查系统进程是否存在“nginx”,如果不存在则启动“nginx”服务。


一个完整的、用于与Keepalived相整合的Shell脚本“/usr/local/bin/check_nginx.sh”内容如下:

#!/bin/bash

STATUS=`ps -C nginx --no-header |wc -l`


if [ "$STATUS" -eq "0" ]; then

  /usr/local/nginx/sbin/nginx

#systemctl start nginx

    STATUS2=`ps -C nginx --no-header|wc -l`

        if [ "$STATUS2" -eq "0"  ]; then

        kill -9 $(ps -ef | grep keepalived | grep -v grep | awk '{print $2}')

        fi

fi


系统命令行下,使Nginx服务处于未运行状态,再手动执行脚本“/usr/local/bin/check_nginx”,命令为“sh /usr/local/bin/check_nginx.sh”。执行过程没有错误输出,初步可以断定脚本是正确的,再加上用浏览器方式验证已经配置好的测试页面,万无一失。


3)配置Keepalived

Keepalived配置文件”keepalived.conf”本身不存在,直接用文本编辑器撰写一个,放置于目录“/etc/keepalived”,一个用于与配置好Nginx服务相关联的“keepalived.conf”配置文件的完整内容如下:

global_defs {

   router_id 202

}


vrrp_script chk_nginx {

    script "/usr/local/bin/check_nginx.sh"

    interval 2

    weight 2

   }


################################################################

#      vvrp_instance  define                                      #

################################################################

vrrp_instance VI_SERY{

    state  MASTER

    interface ens18

    virtual_router_id 120

    priority 100

    garp_master_delay 1

    authentication {

        auth_type PASS

        auth_pass KJj23576hYgu23I

    }

    track_interface {

        ens18

    }

    track_script {

        chk_nginx

    }

    virtual_ipaddress {

    172.16.35.188

    }

}


配置文件“keepalived.conf”文本块的位置有一个需要注意的地方,那就是“vrrp_script chk_nginx{}”要在前边,“track_script{}”要在靠近文本的末尾,如果位置不恰当,Keepalived服务即便能运行,也不能达到预定的目标。

4.3.2 Nginx负载均衡器配置_nginx_02


配置好Keepalived及Nginx以后,确保系统没有Nginx进程和Keepalived进程存在。在命令行执行指令“/usr/local/keepalived/sbin/keepalved”,执行如无报错输出,用以下指令进行初步验证。

#查看系统进程

ps auxww| grep -e nginx -e keepalived

#查看nginx监听端口

netstat -anp| grep -e 80 -e 1003

上述两条指令输入的结果,如图4-4所示。

4.3.2 Nginx负载均衡器配置_配置文件_03

图4- 4

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  bifOjSxj34Bv   2023年12月07日   22   0   0 nginxDockerdockernginx
CYFozBbS5Dub
最新推荐 更多