Day-42代理与负载均衡

1.代理

  • 概念:代为办理

  • 分类

    正向代理:上网,vpn

    反向代理:nginx

  • 区别

    正向代理是为客户端服务

    反向代理是为服务端服务

  • nginx代理(反向代理)

    代理模式:http,websocket,https,fastcgi,uwsgi,grpc

    代理模块:ngx_http_proxy_module,ngx_http_fastcgi_module,ngx_http_uwsgi_module,nginx_http_v2_module

  • nginx代理语法

    #代理设置头把信息给后端服务器读取
    proxy_redirect defult;
    proxy_set_header Host $http_host;
    proxy_set-header X-Real-IP $remote_addr;
    #连接超时
    proxy_set_connect_timeout 30;
    #请求后处理时间
    proxy_send_timeout 60;
    #接受后处理时间
    proxy_read_timeout 60;
    #读取头信息的大小
    proxy_huffer_size 32k;
    #缓冲
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    
  • nginx反向代理实例

    #代理配置
    [root@lb01 conf.d]# cvim proxy_web.conf
    server {
      listen 80;
      server_name web.com;
      location / {
          proxy_pass http://10.0.0.7:80;
          proxy_http_version 1.1;
          proxy_set_header Host $http_host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forword_for;
      }
    }
    #web1配置
    [root@web01 conf.d]# cvim web.conf
    server {
      listen 80;
      server_name web.com;
      root /web;
      client_max_body_size 100m;
      
      location / {
      index index.html
      }
    }
    #web2配置
    [root@web02conf.d]# cvim web.conf
    server {
      listen 80;
      server_name web.com;
      root /web;
      client_max_body_size 100m;
      
      location / {
      index index.html
      }
    }
    #host劫持
    #访问网站测试
    

2.负载均衡

  • 概念:高可用网络基础架构的的一个关键组成部分,有了负载均衡,可以将我们的应用服务器部署多台,然后通过负载均衡将用户的请求分发到不同的服务器用来提高网站、应用、数据库或其他服务的性能以及可靠性

  • 作用

    解决单点故障问题

    解决多个用户在同一时间内访问服务器响应慢

  • 场景:四层负载均衡与七层负载均衡

    四层:转发·改写数据包·源IP·端口·真实ip,目标端口

    七层:代理 代为办理

  • 四层与七层的区别

    效率:四层远高于七层

    功能:七层可以url匹配,设置头部信息

  • 配置七层负载均衡

    [root@lb01 conf.d]# vim fz.conf
    upstream fz {
      server 10.0.0.7:80;
      server 10.0.0.8:80;
    }
    server {
      listen 80;
      server_name fz.com
      
      location / {
          proxy_pass http://fz;
          include proxy_params;
      }
    }
    [root@lb01 ~]# vim /etc/nginx/proxy_params
    proxy_http_version 1.1;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for
    
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    
    proxy_buffering on;
    proxy_buffer_size 32k;
    proxy_buffers 4 128k;
    调度算法
    
  • 七层负载均衡调度算法

    轮询
    #按时间顺序逐一分配到不同的后端服务器(默认)机器的配置一致(web集群 硬件环境 一致)
    weight
    #加权轮询,weight值越大,分配到的访问几率越高机器硬件不一致的情况下使用  (硬件  pc机)
    ip_hash
    #每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
    解决问题:能解决会话保持的问题   
    带来新的问题:会造成后端负载不均衡
    url_hash
    #按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
    least_conn
    #最少链接数,个机器链接数少就分发
    
  • 七层负载均衡后端状态

       状态             概述
      down                当前的server暂时不参与负载均衡
      backup              预留的备份服务器
      max_fails           允许请求失败的次数
      fail_timeout        经过max_fails失败后, 服务暂停时间
      max_conns           限制最大的接收连接数
    
    
  • 七层负载均衡实现Redis会话共享

    1、粘性session
    粘性session是指Ngnix每次都将同一用户的所有请求转发至同一台服务器上,及Nginx的 IP_hash。
    
    2、session复制
    即每次session发生变化时,创建或者修改,就广播给集群中的服务器,使所有的服务器上的session相同。
    
    3、session持久化 ( 慢 )
    将session存储至数据库中,像操作数据一样操作session。
    
    4、session共享
    缓存session至内存数据库中,使用redis ( 内存-->刷到磁盘  ),memcached (内存数据库)。
    
  • #在172.16.1.8和172.16.1.7安装phpmyadmin     
    #1.安装phpmyadmin(web01和web02上都装)
    [root@web01 conf.d]# cd /code
    [root@web01 code]# wget https://files.phpmyadmin.net/phpMyAdmin/4.8.4/phpMyAdmin-4.8.4-all-languages.zip
    [root@web01 code]# unzip phpMyAdmin-4.8.4-all-languages.zip
    #2.配置phpmyadmin连接远程的数据库
    [root@web01 code]# cd phpMyAdmin-4.8.4-all-languages/
    [root@web01 phpMyAdmin-4.8.4-all-languages]# cp config.sample.inc.php config.inc.php
    [root@web01 phpMyAdmin-4.8.4-all-languages]# vim config.inc.php
    /* Server parameters *
    /$cfg['Servers'][$i]['host'] = '172.16.1.51';
    #接入负载均衡
    [root@lb01 conf.d]# cat proxy_php.oldxu.com.conf 
    upstream  php {
      server 172.16.1.7;
      server 172.16.1.8;
    }
    
    server {
      listen 80;
      server_name php.oldxu.com;
      location / {
          proxy_pass http://php;
          proxy_set_header Host $http_host;
      }
    }
    #发现无法正常登陆
    #1.解决方法:  
    在负载均衡上配置ip_hash会话保持*(ip_hash的缺点)
    [root@lb01 conf.d]# cat proxy_php.oldxu.com.conf 
    upstream  php {
      ip_hash;
      server 172.16.1.7;
      server 172.16.1.8;
    }
    
    server {
      listen 80;
      server_name php.oldxu.com;
      location / {
          proxy_pass http://php;
          proxy_set_header Host $http_host;
      }
    }
    #既希望能够实现流量的均摊,又希望会话的问题得以保持, 所以引入了redis
    
    #1)安装redis
      [root@db01 ~]# yum install redis -y
    #2)配置redis
      [root@db01 ~]# sed -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf
    #3)启动redis
      [root@db01 ~]# systemctl enable redis
      [root@db01 ~]# systemctl start redis
    #4) 改造php, session写本地修改为写入redis中  (所有的web上都需要配置)
    PS:已经安装过了redis的模块---> php71w-pecl-redis
    #修改php存储session至redis中
    [root@db01 ~]# vim /etc/php.ini
    session.save_handler = redis
    session.save_path = "tcp://172.16.1.51:6379?weight=1"
    #修改php-fpm 注释默认存储session的位置
    [root@web01 ~]# vim /etc/php-fpm.d/www.conf
    ;php_value[session.save_handler] = files
    ;php_value[session.save_path]    = /var/lib/php/session
    #将修改后的配置文件,推送至172.16.1.8
    [root@web01 ~]# scp /etc/php.ini root@172.16.1.8:/etc/  
    [root@web01 ~]# scp /etc/php-fpm.d/www.conf  root@172.16.1.8:/etc/php-fpm.d/www.conf
    #重启172.16.1.7 172.16.1.8两台服务器的php-fpm
    [root@web02 conf.d]# systemctl restart php-fpm
    #测试效果
    #浏览器登录测试  (ok)
    #查看redis的sessionID和    浏览器cookie中提交的sessionID是否一致
    [root@db01 ~]# redis-cli 
    127.0.0.1:6379> keys *
    "PHPREDIS_SESSION:38ecc8696c70a7252d943e7cb9b20f70"
      
    
  • 案例

    企业案例:使用nginx负载均衡时,如何将后端请求超时的服务器流量平滑的切换到另一台上。如果后台服务连接超时,Nginx是本身是有机制的,如果出现一个节点down掉的时候,Nginx会更据你具体负载均衡的设置,将请求转移到其他的节点上,但是,如果后台服务连接没有down掉,但是返回错误异常码了如:504、502、500,应该如何处理。
    可以在负载均衡添加如下配置proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;意思是,当其中一台返回错误码404,500...等错误时,可以分配到下一台服务器程序继续处理,提高平台访问成功率。

    server {
        listen 80;
        server_name xuliangwei.com;
    
        location / {
            proxy_pass http://node;
            proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
        }
    }
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,825评论 6 546
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,814评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,980评论 0 384
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 64,064评论 1 319
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,779评论 6 414
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,109评论 1 330
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,099评论 3 450
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,287评论 0 291
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,799评论 1 338
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,515评论 3 361
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,750评论 1 375
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,221评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,933评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,327评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,667评论 1 296
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,492评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,703评论 2 380