2019-05-10笔记

Day50

课堂笔记

2019年5月10日

编译安装负载均衡深入

 

两个模块:

upstream服务器池,里面放服务器

upstream backend{

    server  10.0.0.7:80 weight=1;

    server  10.0.0.7:80 weight=1;

server  10.0.0.9:80 weight=1;

}

 

这种分配方式叫做负载均衡算法

第一类为静态调度算法:

和节点无关的调度算法

l rr轮询(默认调度算法,静态调度算法)

l wrr(权重轮询,静态调度算法)

l ip_hash(静态调度算法)  hash(ip)===oldboy 调度给某一台机器

负载不均衡

解决会话保持https://blog.51cto.com/oldboy/1331316

 

第一类为动态调度算法:

l fair(动态调度算法)

l least_conn最小连接调度算法

l url_hash算法 同一个URL地址,调度给同一台节点。

hash(url)===oldgril调度给某一台机器

http://nginx.org/en/docs/http/ngx_http_upstream_module.html调度给A服务器

web缓存服务器的负载均衡

一致性HASH算法

proxy

1)将匹配URI为name的请求抛给http://127.0.0.1/remote/。

 

 server {

        listen       80;

        server_name  blog.etiantian.org;

        location / {

            proxy_pass http://backend;

            proxy_set_header Host  $host;

        }

   }

 

   

       server {

        listen       80;

        server_name  www.etiantian.org;

        location / {

            proxy_pass http://backend;

            proxy_set_header Host  $host;

            proxy_set_header X-Forwarded-For $remote_addr;

        }

   }

 

根据路径转发:

location /name/ {

    proxy_pass http://127.0.0.1/remote/;

}

 

 

 

 

根据url中的目录地址实现代理转发说明

 

location /name/ {

    proxy_pass http://127.0.0.1/remote/;

}

 

案例背景:通过Nginx实现动静分离,即通过Nginx反向代理配置规则实现让动态资源和静态资源及其他业务分别由不同的服务器解析,以解决网站性能、安全、用户体验等重要问题。

 

 

upstream static_pools {

     server 10.0.0.7:80  weight=1;

    }

 

upstream upload_pools {

         server 10.0.0.8:80  weight=1;

    }

 

upstream default_pools {

         server 10.0.0.9:80  weight=1;

   }

 

#www.etiantian.org/static/xxxxx路径调度到static_pools

location /static/ {

proxy_pass http://static_pools;

}

location /upload/ {

proxy_pass http://upload_pools;

}

location / {

proxy_pass http://default_pools;

}

 

 

 

域名不变,基于路径实现动静分离:

http://www.etiantian.org/static/

http://www.etiantian.org/upload/

 

http://www.etiantian.org/

http://www.etiantian.org/new/

 

http://www.etiantian.org/static/

 

 

基于扩展名实现刚才的案例

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {

proxy_pass http://static_pools;

}

location / {

proxy_pass http://default_pools;

}

 

location /upload/ {

proxy_pass http://upload_pools;

}

 

 

[root@lb01 conf]# cat nginx.conf.base_uri

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

 

upstream static_pools {

     server 10.0.0.7:80  weight=1;

    }

 

upstream upload_pools {

         server 10.0.0.8:80  weight=1;

    }

 

upstream default_pools {

         server 10.0.0.9:80  weight=1;

   }

 

    server {

        listen       80;

        server_name  www.etiantian.org;

 

location /static/ {

proxy_pass http://static_pools;

        proxy_set_header Host  $host;

        proxy_set_header X-Forwarded-For $remote_addr;

}

location /upload/ {

proxy_pass http://upload_pools;

            proxy_set_header Host  $host;

            proxy_set_header X-Forwarded-For $remote_addr;

}

location / {

proxy_pass http://default_pools;

        proxy_set_header Host  $host;

        proxy_set_header X-Forwarded-For $remote_addr;

}

}

}

 

 

 

直接通过不同的域名实现动静分离:

www.etiantian.org动态

img.etiantian.org静态

 

 

 

基于不同类型的设备实现转发:

HTTP报文的请求头里,会提供http_user_agent信息。

http_user_agent用户的设备:

 

 

location / {

        if ($http_user_agent ~* "android")

          {

proxy_pass http://android_pools; #<==这是android服务器池,需要提前定义upstream。

          }

        if ($http_user_agent ~* "iphone")

          {

proxy_pass http://iphone_pools; #<==这是iphone服务器池,需要提前定义upstream。

            }

        proxy_pass http://pc_pools;

       }

 

   

location / {

         if ($http_user_agent ~* "MSIE")

          {

            proxy_pass http://static_pools;

          }

          if ($http_user_agent ~* "Chrome")

          #if ($http_user_agent ~* "Firefox")

          {

            proxy_pass http://upload_pools;

          }

        proxy_pass http://default_pools;

        include proxy.conf;

       }

 

 

 

      location / {

        if ($http_user_agent ~* "android")

          {

            proxy_pass http://static_pools;

          }

        if ($http_user_agent ~* "iphone")

          {

            proxy_pass http://upload_pools;

            }

        proxy_pass http://default_pools;

       }

 

[root@lb01 conf]# curl -A "android" http://www.etiantian.org/upload/

upload server

[root@lb01 conf]# curl -A "iphone" http://www.etiantian.org/static/            

static server

 

 

 

[root@lb01 conf]# curl -A "android" http://www.etiantian.org

www7

[root@lb01 conf]# curl -A "iphone" http://www.etiantian.org/

www8

[root@lb01 conf]# curl  http://www.etiantian.org/

www9

 

 

 

安卓:

http://192.168.12.201:8000/upload/

upload

 

iphone

http://192.168.12.201:8000/static/

static

 

其他:

http://192.168.12.201:8000/

http://192.168.12.201:8000/new/

 

 

[root@lb01 conf]# curl -A "android" http://www.etiantian.org/upload/

upload

[root@lb01 conf]# curl -A "iphone" http://www.etiantian.org/static/            

static

 

[root@lb01 conf]# curl -A "android" http://www.etiantian.org

www7

[root@lb01 conf]# curl -A "iphone" http://www.etiantian.org/

www8

[root@lb01 conf]# curl  http://www.etiantian.org/

www9

 

 

实践:

1、基于路径转发          实现动静分离

2、基于扩展名转发        实现动静分离

3、基于user_agent转发    实现PC 手机 不同手机分离

 

 

 

 

 

直接通过不同的域名实现动静分离:

 

www.etiantian.org动态

 

img.etiantian.org静态

 

负载均衡器已经配好了动态和静态的负载均衡:

 server {

        listen       80;

        server_name  blog.etiantian.org;

        location / {

            proxy_pass http://backend;

            proxy_set_header Host  $host;

        }   

   }    

 server {

        listen       80;

        server_name  img.etiantian.org img1.etiantian.org;

        location / {

            proxy_pass http://backend;

            proxy_set_header Host  $host;

        }   

   }  

 

   

Web01上创建静态服务:

 [root@web01 /etc/nginx/conf.d]# cat img.conf

server {

        listen       80;

        server_name  img.etiantian.org;

        location / {

    root   /usr/share/nginx/html/img;

            index  index.html;

        }

    }

 

  

Web02上创建静态服务:

   

[root@web02 /application/nginx/conf/extra]# cat 05_img.conf

server {

        listen       80;

        server_name  img.etiantian.org;

        location / {

    root   html/img;

            index  index.html;

        }

    }

 

 

 

 

 

 

 

 

 

 

 

 

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 情人节时雪纷纷, 路上情侣欲冻昏。 借问酒店何处有, 孑然遥指城中村。
    橘猫暖暖阅读 305评论 0 2
  • 一个梦的思考 梦见妈妈要来,我想给妈妈做几个菜,印象最深的是想做一个刀鱼炖豆腐,还想到了怎么做,要把豆腐先煎一下,...
    文静大公主阅读 457评论 0 0
  • 永远要相信爱,并去付出,不是为了回报的爱。因为,所有的所有,都是你自己愿意栽种在世界上的花,它们或浓郁娇嫩,或英气...
    且听风吟_102e阅读 365评论 0 0
  • 还没有吻过你的脸 路灯就暗了 不是来不及 只是你不愿意 你路过我时 正当花季 发间是桂花的香 你不像是孤独的人 春...
    清水Lee阅读 313评论 0 1

友情链接更多精彩内容