集群中nginx服务的健康检查及负载均衡模板更新

课前回顾

编译的时候大长串是指定相关目录,指定启动用户
源码安装完成之后还能再添加模块,重新编译就好

卸载nginx的时候要先备份相关的.conf文件

tZEN5Q.md.png

nginx负载均衡的健康检查

nginx_upstream_check_module

该模块可以为Nginx提供主动式后端服务器健康检查的功能, 以图形化的方式实时检查后端主机池主机的状态,为集群的批量管理打下基础,

通过负载均衡,检查主机池里的主机nginx是否正常的运行

lb01源码安装nginx和第三方软件

0.卸载yum安装的nginx
yum remove -y nginx

1.安装依赖包
[root@lb02 ~]# yum install -y gcc glibc gcc-c++ pcre-devel openssl-devel patch

2.下载nginx源码包以及nginx_upstream_check模块第三方模块,由于第三方模块不支持nginx-1.18,所以选择下载nginx-1.16
[root@lb02 ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz
[root@lb02 ~]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip

3.解压nginx源码包以及第三方模块
[root@lb02 ~]# tar xf nginx-1.16.1.tar.gz
[root@lb02 ~]# unzip master.zip

4.进入nginx目录,打补丁(nginx的版本是1.14补丁就选择1.14的,p1代表在nginx目录,p0是不在nginx目录),#nginx版本要和check版本一致。

[root@lb02 ~]# cd nginx-1.16.1/
[root@lb02 nginx-1.16.1]# patch -p1 <../nginx_upstream_check_module-master/check_1.16.1+.patch 
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=www --group=www --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=/root/nginx_upstream_check_module-master --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
[root@lb02 nginx-1.14.2]# make && make install

5.修改nginx.conf,创建相关目录
[root@lb01 ~]# mkdir /etc/nginx/conf.d
[root@lb01 ~]# vim /etc/nginx.conf
user  www;
...
include /etc/nginx/conf.d/*.conf;
[root@lb01 ~]# groupadd www -g666 && useradd www -u 666 -g 666

6.在已有的负载均衡上增加健康检查的功能
[root@lb01 conf.d]# vim /etc/nginx/conf.d/jc.conf
upstream web {
    server 172.16.1.7:80 max_fails=2 fail_timeout=10s;
    server 172.16.1.8:80 max_fails=2 fail_timeout=10s;
    server 172.16.1.9:80 max_fails=2 fail_timeout=10s;
    
    check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
    #interval  检测间隔时间,单位为毫秒
    #rise      表示请求2次正常,标记此后端的状态为up
    #fall      表示请求3次失败,标记此后端的状态为down
    #type      类型为tcp(健康检查包的类型)
    #timeout   超时时间,单位为毫秒
}

server {
    listen 80;
    server_name cs.jc.com;
    location / {
        proxy_pass http://web;
        include proxy_params;
    }

    location /uc {
        check_status;
    }

     location = /zt {
        stub_status;
		}
}

7.nginx启动程序加入环境变量
[root@lb01 /etc/nginx]# vim /etc/profile.d/export.sh
export PATH="/usr/sbin/nginx:$PATH"
[root@lb01 /etc/nginx]# source /etc/profile.d/export.sh 

8.编辑/etc/nginx/proxy_params文件
	# 客户端的请求头部信息,带着域名来找我,我也带着域名去找下一级(代理机或者代理服务器)
	proxy_set_header Host $host;
	# 显示客户端的真实ip(和代理的所有IP)
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	
	#nginx代理与后端服务器连接超时时间(代理连接超时)
	proxy_connect_timeout 60s;
	#nginx代理等待后端服务器的响应时间
	proxy_read_timeout 60s;
	#后端服务器数据回传给nginx代理超时时间
	proxy_send_timeout 60s;
	
	#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
	proxy_buffering on;
	#设置nginx代理保存用户头信息的缓冲区大小
	proxy_buffer_size 4k;
	#proxy_buffer_size 8k;
	#proxy_buffers 缓冲区
	proxy_buffers 8 4k;
	#proxy_buffers 8 8k;
	#使用http 1.1协议版本
	proxy_http_version 1.1;
	
	#解决集群单点故障的反馈页面影响用户体验,自动跳转到下一个负载均衡主机
	proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
7.启动nginx
[root@lb01 /etc/nginx]# mkdir -p /var/cache/nginx/client_temp
nginx
nginx -s reload

8.域名解析
10.0.0.5 cs.jc.com

tZUspR.md.png


负载均衡模板

vim /etc/nginx/conf.d/wp.conf
server {
	listen 80;
	server_name cs.zh.com;

    location / {
        proxy_pass http://backend;
        include proxy_params;
    }
}
#include后面的相对路径指定就是/etc/nginx/ 下
vim /etc/nginx/nginx.conf
...
include /etc/nginx/upstream;
include /etc/nginx/conf.d/*.conf;
vim /etc/nginx/upstream
upstream backend {
    #server backend1.example.com       weight=5;
    #server backend2.example.com:8080;
    #server unix:/tmp/backend3;
    #server backup1.example.com:8080   backup;
    #server 10.0.0.7:80 down;
    #server 10.0.0.9:80 backup;
    
    server 10.0.0.7;
    server 10.0.0.8;
    server 10.0.0.9:80 max_fails=1 fail_timeout=10s;
    
    check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
    #interval  检测间隔时间,单位为毫秒
    #rise      表示请求2次正常,标记此后端的状态为up
    #fall      表示请求3次失败,标记此后端的状态为down
    #type      类型为tcp
    #timeout   超时时间,单位为毫秒
}
vim /etc/nginx/proxy_params
	# 客户端的请求头部信息,带着域名来找我,我也带着域名去找下一级(代理机或者代理服务器)
	proxy_set_header Host $host;
	# 显示客户端的真实ip(和代理的所有IP)
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	
	#nginx代理与后端服务器连接超时时间(代理连接超时)
	proxy_connect_timeout 60s;
	#nginx代理等待后端服务器的响应时间
	proxy_read_timeout 60s;
	#后端服务器数据回传给nginx代理超时时间
	proxy_send_timeout 60s;
	
	#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
	proxy_buffering on;
	#设置nginx代理保存用户头信息的缓冲区大小
	proxy_buffer_size 4k;
	#proxy_buffer_size 8k;
	#proxy_buffers 缓冲区
	proxy_buffers 8 4k;
	#proxy_buffers 8 8k;
	#使用http 1.1协议版本
	proxy_http_version 1.1;
	
	#解决集群单点故障的反馈页面影响用户体验,自动跳转到下一个负载均衡主机
	#proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
原文地址:https://www.cnblogs.com/syy1757528181/p/12982773.html