19.负载均衡健康检查模块与源码安装Nginx

咻咻ing 2020-06-01

面试常问

你们公司的会话保持(session共享)怎么做的?

# 开发做会话保持,将用户登录信息存储在redis,MySQL,文件共享存储...中
1.记录用户的登录状态(logined=1)
2.通过用户对应的user_id跟cookie结合,记录用户的登录状态(明确知道是哪个用户登录的)
3.不安全,如果知道别人的user_id,或者尝试别人的id
4.通过session的加密,来保护cookie

# 开发没有做会话保持,我们通过运维的方式做会话保持,nginx的upstream模块中的ip_hash调度算法,保证用户的请求一直发送到同一台机器
# 不过这么做有弊端...负载不均衡,所以我们公司,先让运维做会话保持,后面开发会写

# 什么是cookie?
cookie是后端服务器,传给浏览器的一段字符串,作用是用来记录用户登录的状态,和数据库中的user id结合,可
以保证知道是哪一个用户登录的。仅存储在浏览器。

# 什么是session?
session是后端服务器,传给浏览器的一段字符串,作用也是用来记录用户的登录状态(通过加密的方式保护
cookie,防止其他用户通过user id随意登录别人账号),存储在服务器[redis,mysql,file,mongodb,es,memcache...]

nginx的负载均衡健康检查模块

在Nginx官方模块提供的模块中,没有对负载均衡后端节点的健康检查模块,但可以使用第三方模块。
nginx_upstream_check_module来检测后端服务的健康状态。

第三方模块项目地址:TP

# 模块写法
例如:

[ conf.d]# cat proxy_web.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;
    
    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 web.drz.com;
    location / {
        proxy_pass http://web;
        include proxy_params;
    }

    location /up {                       # 负载均衡状态
        check_status;                    # 和nginx状态模块写法很像 
    }
}


##### 具体操作如下

需要源码安装nginx

# 1.安装依赖包
[ ~]# yum install -y openssl-devel  pcre-devel openssl-devel patch

# 2.下载官方的nginx包,和下载负载均衡健康检查的包
[ ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
[ ~]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip


# 3.解压
[ ~]# tar xf nginx-1.14.2.tar.gz 
[ ~]# unzip master.zip

# 4.进入nginx目录,打补丁(nginx的版本是1.14补丁就选择1.14的,p1代表在nginx目录,p0是不在nginx目录)
[ ~]# cd nginx-1.14.2/
[ nginx-1.14.2]# patch -p1 <../nginx_upstream_check_module-master/check_1.14.0+.patch

# 4.1进入目录生成
[ ~]# cd nginx-1.14.2/
[ nginx-1.14.2]# ./configure --prefix=/appinx-1.14.2 --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=/rootinx_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‘

# 5.编译和安装
[ ~]# make && make install

# 6.做软连接
[ ~]# ln -s /app/nginx-1.14.2/ /app/nginx

# 7.添加环境变量
[ ~]# vim /etc/profile.d/nginx.sh
export PATH="/app/nginx/sbin:$PATH"

# 8.重新加载环境变量
[ ~]# source /etc/profile.d/nginx.sh

# 9.创建用户
[ ~]# groupadd www -g 666
[ ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

# 10.修改nginx的配置文件
user  www;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
        include /app/nginx/conf.d/*;
}


# 11.创建虚拟主机配置文件存放目录
[ ~]# mkdir /app/nginx/conf.d

# 12.配置文件添加模块
upstream qwe {
        server 172.16.1.7;
        server 172.16.1.8;
 check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
}

server {
        listen 80;
        server_name www.wp.com admin.com;
        location / {
        proxy_pass http://qwe;
        proxy_set_header Host $http_host;
        }
  location /up {
        check_status;
    }
}

# 13.检查语法
[ ~]# nginx -t

# 14.重现加载配置文件
[ ~]# nginx -s reload


## 最后访问网站

19.负载均衡健康检查模块与源码安装Nginx

nginx在不影响用户体验的情况下

1.如何增加模块

就比如增加nginx_upstream_check_module模块

## 在你源码安装完之后

# 1.安装依赖包
[ ~]# yum install -y patch openssl-devel

# 2.下载负载均衡健康检查的包
[ ~]# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip

# 3.解压
[ ~]# tar xf nginx-1.14.2.tar.gz 
[ ~]# unzip master.zip

# 4.进入nginx目录,打补丁(nginx的版本是1.14补丁就选择1.14的,p1代表在nginx目录,p0是不在nginx目录)
[ ~]# cd nginx-1.14.2/
[ nginx-1.14.2]# patch -p1 <../nginx_upstream_check_module-master/check_1.14.0+.patch

# 4.1进入目录生成(一般在这需要什么模块就添加什么模块)
[ ~]# cd nginx-1.14.2/
[ ~]# ./configure --prefix=/app/nginx-1.14.2_new --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 --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‘ --user=www --group=www

# 5.编译和安装
[ ~]# make && make install

# 6.查看
[ ~]# cd /app/
[ /app]# ll
total 0
lrwxrwxrwx  1 root root  18 May 29 01:13 nginx -> /app/nginx-1.14.2/
drwxr-xr-x 12 root root 165 May 29 01:25 nginx-1.14.2
drwxr-xr-x  6 root root  54 May 29 01:59 nginx-1.14.2_new

# 7.拷贝nginx配置文件到新的
[ ~]# \cp /app/nginx/conf/nginx.conf /app/nginx-1.14.2_new/conf/
# 创建conf.d
[ ~]# mkdir /app/nginx-1.14.2_new/conf.d/
[ ~]# \cp /app/nginx/conf.d/* /app/nginx-1.14.2_new/conf.d/

# 8.拷贝pid到新的nginx
[ ~]# cp /app/nginx/logs/nginx.pid /app/nginx-1.14.2_new/logs/

# 9.拷贝站点目录
[ ~]# \cp -a /app/nginx/html/* /app/nginx-1.14.2_new/html/

# 10.给配置文件加上nginx_upstream_check_module模块
[ ~]# vim /app/nginx-1.14.2_new/conf.d/php_lb.conf
upstream qwe {
        server 172.16.1.7;
        server 172.16.1.8;
 check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
}

server {
        listen 80;
        server_name www.wp.com admin.com;
        location / {
        proxy_pass http://qwe;
        proxy_set_header Host $http_host;
        }
  location /up {
        check_status;
    }
}

# 检查语法
[ ~]# nginx -t

# 11.在其他虚拟机上写1秒访问一次的脚本
[ ~]# vim a.sh 

#!/bin/bash
while true;do
        status_code=`curl -I -m 10 -o /dev/l -s -w %{http_code} http://www.qwe.com`
        if [  $status_code -eq 200 ];then
                echo "$(date +%F-%T)_访问成功" >> /tmp/111.log
        else
                echo "$(date +%F-%T)_访问失败" >> /tmp/111.log
        fi
        sleep 1
done


# 12.执行并查看脚本
[ ~]# sh a.sh 

[ ~]# tailf /tmp/111.log 
2020-05-28-18:36:53_访问成功
2020-05-28-18:36:54_访问成功
。。。


# 13.删除老连接并创建新链接
[ ~]# rm -rf /app/nginx && ln -s /app/nginx-1.14.2_new/ /app/nginx

### 最好reload下或者[ /app]# nginx -s stop && nginx

###  web01如果没有失败那就是添加完成了

19.负载均衡健康检查模块与源码安装Nginx

状态模块也ok

19.负载均衡健康检查模块与源码安装Nginx

2.如何升级版本

必须要把负载均衡的健康模块带上和相对应的版本

# 1.查看nginx现有的模块(生成语句./configure)
[ suibian]# nginx -V
--prefix=/app/nginx-1.14.2_new --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‘

# 2.下载新版本源码包
[ ~]# wget http://nginx.org/download/nginx-1.16.1.tar.gz

# 3.解压
[ ~]# tar xf nginx-1.16.1.tar.gz 

# 4.进入目录并生成,给负载均衡健康模块打补丁。
[ ~]# cd nginx-1.16.1/
[ ~/nginx-1.16.1]# patch -p1 <../nginx_upstream_check_module-master/check_1.16.1+.patch

[ ~/nginx-1.16.1]# ./configure --prefix=/app/nginx-1.16.1 --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 --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‘ --add-module=/source/nginx_upstream_check_module-master

# 5.编译和安装
[ ~]# make && make install

# 6.查看
[ ~]# ll /app/
total 0
lrwxrwxrwx  1 root root  22 May 29 02:24 nginx -> /app/nginx-1.14.2_new/
drwxr-xr-x 12 root root 165 May 29 01:25 nginx-1.14.2
drwxr-xr-x 12 root root 165 May 29 02:27 nginx-1.14.2_new
drwxr-xr-x  6 root root  54 May 29 04:37 nginx-1.16.1


# 7.拷贝配置文件
[ ~]# \cp /app/nginx/conf/nginx.conf /app/nginx-1.16.1/conf/
# 创建conf.目录
[ ~]# mkdir /app/nginx-1.16.1/conf.d
[ ~]# cp /app/nginx/conf.d/* /app/nginx-1.16.1/conf.d/

# 8.拷贝pid
[ ~]# cp /app/nginx/logs/nginx.pid /app/nginx-1.16.1/logs/

# 9.拷贝站点目录
[ ~]# \cp -a /app/nginx/html/* /app/nginx-1.16.1/html/

# 10.执行并查看脚本                ## 这是写脚本的机子上
[ ~]# sh a.sh 

[ ~]# tailf /tmp/111.log 
2020-05-28-18:36:53_访问成功
2020-05-28-18:36:54_访问成功
....

# 11.删除以前的软链接并生成新版本的软链接
[ ~]# rm -rf /app/nginx && ln -s /app/nginx-1.16.1/ /app/nginx

# 12.重新加载配置文件,或者启动马上重启(但是有一个失败的,不妨碍吧)
[ ~]# nginx -s reload
[ ~]# nginx -s stop && nginx

19.负载均衡健康检查模块与源码安装Nginx

19.负载均衡健康检查模块与源码安装Nginx

19.负载均衡健康检查模块与源码安装Nginx

相关推荐