负载均衡健康检查与会话保持

内容概述

1.nginx负载均衡检查
-1.1 安装依赖包
-1.2 下载第三方模块
-1.3 解压源码包
-1.4 进入nginx目录,为nginx打补丁,需要版本一致
-1.5 在已有的负载均衡上增加健康检查功能
-1.6 重启访问页面
2.nginx负载均衡会话保持
-2.1 什么是会话保持?
-2.2 session共享的方法
-2.3 nfs的session共享存储

内容详细

1. Nginx 负载均衡检查

1.1 安装依赖包

yum install -y gcc glibc gcc-c++ pcre-devel openssl-devel patch autoconf pcre  make automake wget httpd-tools gd gd-devel perl-devel perl-ExtUtils-Embed

1.2 下载第三方模块

# 下载nginx源码包
wget https://nginx.org/download/nginx-1.20.1.tar.gz
# 下载第三方模块
wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/refs/tags/v0.3.0.tar.gz

1.3 解压源码包

# 解压nginx源码包
tar -xf nginx-1.20.1.tar.gz
# 解压第三方模块
tar -xf v0.3.0.tar.gz

1.4 进入nginx目录,为nginx打补丁,需要版本一致

# 进入nginx目录
cd nginx-1.20.1
# 打补丁
patch -p1 <../nginx_upstream_check_module-master/check_1.20.1+.patch
ps:这里p1代表在nginx目录中,p0代表不在nginx的目录中
# 进行编译
./configure --prefix=/usr/share/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 --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug  --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --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-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --add-module=/root/nginx_upstream_check_module-master
# 这里需要注意,打的补丁的版本需要与nginx的版本保持一致
# 编译安装
make && make install

1.5 在已有的负载均衡上增加健康检查功能

现在我们需要在负载均衡服务器上增加健康检查的功能
vim /etc/nginx/conf.d/www.lty.com
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;
}
 
server {
    listen 80;
    server_name www.lty.com;
    location / {
        proxy_pass http://web;
        include proxy_params;
    }
 
    location /upstream_check {
        check_status;
    }
}
# interval  检测间隔时间,单位为毫秒
# rise      表示请求2次正常,标记此后端的状态为up
# fall      表示请求3次失败,标记此后端的状态为down
# type      类型为tcp
# timeout   超时时间,单位为毫秒

1.6 重启访问页面

# 重启
systemctl restart nginx
# 访问
http://www.lty.com/upstream_check

2. Nginx 负载均衡会话保持

2.1 什么是会话保持?

我们在访问网站时,进行登录以后,服务器上会生成一个session,然后服务器会携带着session_id返回给浏览器一个cookie值,这样当第二次访问时,cookie会与服务器上的session进行对比,如果对比成功,就不需要重新登录。
我们在使用负载均衡的时候会遇到会话保持的问题,可以通过以下的方式进行解决:
1.使用nginx的ip_hash调度,根据客户的ip,将请求分配到对应的ip上
2.基于服务端的session会话共享(NFS,MySQL,memcache,redis,file)

2.2 session共享的方法

1.把多台后端服务器session文件目录挂载到NFS同一目录下
2.通过程序将session存储到mysql数据库
3.通过程序将session存储到redis缓存

2.3 nfs的session共享存储

1.web01搭建phpmyadmin
上传phpmyadmin的包
cd /code
rz
2.解压并改名
unzip phpMyAdmin-4.9.0.1-all-languages.zip
mv phpMyAdmin-4.9.0.1-all-languages php
3.修改连接数据库代码
cp /code/php/{config.sample.inc.php,config.inc.php}
vim /code/php/config.inc.php
$cfg['Servers'][$i]['host'] = '172.16.1.51';
4.授权站点目录
chown -R www.www /code/
# chown -R www.www /var/lib/php/session
5.配合站点配置文件
vim /etc/nginx/conf.d/www.php.com.conf
server {
    listen 80;
    server_name linux.php.com;
    root /code/php;
 
    location / {
        index index.php;
    }
 
    location ~* \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
# 重启nginx
systemctl restart nginx
6.访问测试
# 配置hosts
172.16.1.7	www.php.com
# 访问 http://www.php.com
7.登录测试时,如果登录用户密码错误
我们需要数据库的授权
MariaDB [(none)]> grant all on *.* to root@'172.16.1.%' identified by '123456';

web02同步web01
1.同步站点文件
scp -r /code/php 172.16.1.8:/code/
2.同步nginx的配置
scp /etc/nginx/conf.d/www.php.com.conf 172.16.1.8:/etc/nginx/conf.d/
3.为目录授权
chown -R www.www /code/
chown -R www.www /var/lib/php/session
4.访问测试web02
# web03同理
1.配置负载均衡
vim /etc/nginx/conf.d/linux.php.com.conf
upstream phpmyadmin {
    server 172.16.1.7;
    server 172.16.1.8;
    server 172.16.1.9;
}

server {
    listen 80;
    server_name www.php.com;

    location / {
        proxy_pass http://phpmyadmin;
        include proxy_params;
    }
}
2.最后一步,挂载
mount -t nfs 172.16.1.31:/data/wp /var/lib/php/session/
mount -t nfs 172.16.1.31:/data/wp /var/lib/php/session/
mount -t nfs 172.16.1.31:/data/wp /var/lib/php/session/
3.访问测试
posted @ 2021-08-19 18:45  堇雪月寒风  阅读(126)  评论(0编辑  收藏  举报
Live2D