美文网首页
Nginx+负载均衡-2

Nginx+负载均衡-2

作者: 空留灯半盏 | 来源:发表于2018-07-14 21:12 被阅读0次

    Nginx+负载均衡-2

    rewrite重写

    规则

    语法: location 配置 (注: 需要pcre才能开启此模块)

    前缀含义
    location =  /uri    精确匹配(必须全部相等)
    location ^~ /uri     匹配指定字符开头
    location ~  pattern   区分大小写
    location ~* pattern  不区分大小写
    location /         通用匹配,任何请求都会匹配到 
    

    例如

    #精确匹配,网址:http://www.example.com/
    location = / {}
    
    #区分大小写 
    location ~ /Example/ {}
    http://www.example.com/Example/  [成功]
    http://www.example.com/example/  [失败]
    
    #不区分大小写 
    location ~* /Example/ {}
    
    #匹配指定字符开头
    location ^~ /img/ {}
    #http://www.example.com/img/a.jpg   [成功]
    #http://www.example.com/img/b.mp4   [成功]
    #http://www.example.com/video/b.mp4 [失败]
    

    动静分离

    准备两台服务器,分别为apache和nginx

    修改nginx 配置文件 apache处理php nginx 处理图片

    server {
        #监听端口
        listen 80;
        
        #请求php文件则交给大括号处理
        location ~ \.php$ {
            #重写交给指定服务器的指定端口处理
            proxy_pass http://192.168.159.131:8082;
        }
        
        #请求图片则交给大括号处理
        location ~ \.(gif|jpg|jpeg|png)${
            #重写交给指定服务器指定端口处理
            proxy_pass http://192.168.159.131:8081;
        }
    }
    
    server{
        #监听端口
        listen 8081;
        
        location / {
        项目跟目录
        root /php/wwwroot/wev2;
        location / {
            #项目根目录
            root /php/wwwroot/web2;
            #默认首页
            index index.html index.htm;
        }
    }       
    

    修改配置文件后需要重启服务

    vi /php/server/nginx/sbin/nginx -s reload

    修改apache配置文件启动服务

    vi /php/server/apache/conf/httpd.conf

    #apache 服务端口修改为8082
    Listen 8082;
    

    重启apache服务

    /php/server/apache/bin/Apachectl start

    关闭防火墙/将端口8081/8082添加到防火墙例外

    service iptable stop #关闭防火墙
    vi  /etc/sysconfig/iptables  #添加防火墙例外
    

    运维架构设计方案

    架构设计(使用冗余策略,增加备用服务器监控活动服务器)

    高可用服务器搭建

    什么是HA

    HA是英文High Available的缩写,指高可用服务器

    当活动服务器出现故障,导致用户无法访问,则使用备用服务器

    如何使用高可用服务器(HA)
    冷备
    活动服务器出现故障,收到阿里云短信报警,需要运营人员手动备用服务器
    
    热备
    通过第三方软件( keepalived ),监控活动服务器,当出现故障自动切换到备用服务器
    
    介绍keepalived

    什么是keepalived : 就是一个高可用软件

    用来检测服务器状态,用来防止单点故障的发生,保证业务的正常运行

    原理:

                    ->主服务器
    用户->VIP(虚拟IP)
                   ->备用服务器
    

    安装keepalived

    安装: yum -y install keepalived
    管理: service keepalived start/stop/restart #启动/关闭/重启
    配置文件: /etc/keepalived
    日志文件: /var/log/messages
    
    配置部署keepalived

    至少准备两台服务器(查看ip信息)

    分别在两台服务器上安装nginx并访问测试 (安装具体见上一将)

    分别在两台服务器上安装keepalived

    yum -y install keepalived
    

    分别查看两台服务器网卡 ip a

    配置活动服务器

    vi /etc/keepalived/keepalived.conf

    留下配置文件第一行 并将其与代码替换以下代码
    #健康检查配置
    vrrp_script check_web {
        #监控本机80端口
        script "</dev/tcp/127.0.0.1/80"
        interval 2  #每隔2秒中检测一次
        fall 2      #检查2次异常则切换备用服务器
        rise 1      #检查正常次数
    }
    
    #虚拟路由
    vrrp_instance VI_1 {
        state MASTER            #活动服务器(MASTER) 备用服务(BACKUP)
        interface eth0          #绑定的网卡
        virtual_router_id 51    #虚拟路由器的ID,有效范围为0-255
        priority 100            #优先级
        advert_int 1            #健康检查时间
        authentication {        #身份认证
            auth_type PASS
            auth_pass 1111
        }
    
        track_script {          #健康检查脚本
            check_web
        }
    
        virtual_ipaddress {     #VIP(虚拟IP地址)
            192.168.159.200
        }
    }
    #注:修改VIP 和绑定网卡
    

    启用/重启活动服务器/备份服务器

    访问测试....

    负载均衡

    负载均衡架构图

    负载均衡.png

    负载均衡策略

    轮询: 将请求依次轮询发给每个服务器

    权重: 服务器的权重越高,处理请求的概率越大

    ip哈希: 通过哈希函数决定请求发送给哪个服务器

    最少连接: 将请求发给持有活动连接的服务器.

    语法(修改nginx配置文件)
    http {
        #设定负载均衡的服务器列表 phpServers 可以写网址或ip或其他英文
    upstream phpServers {
        #默认轮询
        #权重     server 服务器IP:端口 weight=3;
        #ip哈希  ip_hash;
    #最少连接 least_conn;
            server 服务器IP:端口;
            server 服务器IP:端口;
            server 服务器IP:端口;
        }
    
        server {
            listen 80;
    
            location / {
                # 当80端口有请求的时候交给上面定义的负载均衡器处理(phpServers)
                proxy_pass http://phpServers;
            }
        }
    }
    

    SESSION共享

    明确: session存储在服务端(打开php配置文件可以查看存储路径)

    发现: 由于实现了复制均衡的轮询策略导致session丢失

    解决

    使用ip哈希负载均衡策略

    session入库(将session保存的数据库中)

    实现

    准备主服务器(注: 实现轮询结果)

    server {
        Listen 80;
        server_name   localhost;
        #charset koi8-r;
        $access_log logs/host.access.log  main;
            location / {
                #现在: 所有请求交给负载均衡器处理
                #解释: 当80端口有请求的时候交给上面定义的负载均衡器处理(phpServer)
                proxy_pass  http://phpServers;
                #之前: 所有的请求访问html目录下的文件
                #root  html;
                #index  index.html  index.htm
            }
        #error_page  404  /404.html
        #redirect  server error pages to the static page /50x.html
    }
    

    打开从服务器的nginx配置文件

    在server{
    
        location ~ \.php$ {
            root            站点目录(比如 /php/wwwroot/web1);
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index    index.php
            fastcgi_param     SCRIPT_FILENAME   站点目录/$fastcgi_script_name;
            include           fastcgi_params;
            }
        .....
    }
    

    重启服务..

    /php/server/nginx/sbin/nginx -s reload

    在从A服务器站点目录中创建test.php文件并写入session代码打印

    <?php
       session_start();
    $_SESSION['TEST'] = 'xxsdxas';
       print_r($_SESSION)'
    

    在从B服务器创建..

    <?php
     session_start(); 
    print_r($_session);
    
    session负载均衡丢失.png

    修改配置文件

    vi /phpserver/nginx/conf/nginx/conf

    upstream phpServers {
        ip_hash;
        server 192.168.80.88;
        server 192.168.80.89;
    }
    

    重启服务...

    发现只能查看到一台服务器(hash原因) 每次就只能访问一个服务器读取session 并在B服务器上设置session即可;

    相关文章

      网友评论

          本文标题:Nginx+负载均衡-2

          本文链接:https://www.haomeiwen.com/subject/uyfupftx.html