反向代理调度算法,轮询算法--——领导如何挑选小弟。迎宾小姐如何挑选服务员。

调度一般分为两类,第一类为静态调度算法,即负载均衡器根据自身设定的规划进行分配,不需要考虑节点的情况,例如,rr、wrr、ip_hash等都属于静态调度算法。

第二类动态算法,即负载均衡会根据后端节点的当前状态来决定是否分发请求,例如:连接数少的优秀获得请求,响应时间短的优先获得请求。例如:least_conn、fair等都属于动态调度算法。

1.rr轮询(round robin默认调度算法,静态调度算法)

按客户请求顺序吧客户端强求足已分配到不同的后端节点服务器,这相当于LVS中的rr算法,如果后端服务器宕机(默认情况下Nginx只检测80端口),宕机的服务器会被自动从节点服务池中国剔除,以使用客户端的用户访问不受影响。新的请求会分配给正常的服务器。

2.wrr(weight加权轮询,静态调度算法)

在rr轮询算法的基础加上权重,即为权重轮询算法,当使用该算法时,权重和用户访问成正比,权重值越大,被转发的请求也就越多。可以根据服务器的配置和性能指定加权值的大小,有效解决新旧服务器性能不均衡的请求分配问题。

举个例子帮助大家加深理解。

3.ip_hash(静态调度算法)

每个请求按客户端的hash结果分配,当新的请求到达时,先将客户端IP通过哈希算法出一个值,在随后的客户端请求中,客户IP的哈希值只要相同,就会分配至同一个值,在随后的客户端请求中,客户IP的哈希孩子只要相同,就会被分配至同一台服务器,该调度算法可以解决动态网页的session共享问题,但有时会导致请求请求分配不均,既无法保证1:1的负载均衡,因为在国内大多数公司都是NAT上网模式,多个客户端会对应一个外部IP,所以,这些客户端都会被分配到同一个服务器,从而导致请求分配不均。LVS负载均衡的-p参数、keepalived_timeout50参数都类似这个Nginx里的ip_hash参数,其功能均为解决动态网页的session共享问题

cookie客户端浏览器

变量名字和变量的内容

开发人员制定

相同网站,访问相同的cookie

钥匙(字符串 文本)

请求头和响应头里面的

session服务器

用户密码 登录信息(登录) ……打包 加密……锁头

eash_conn

lesh_conn算法会根据后端节点连接数来决定分配情况,哪个集群连接数少就分发。

5.url_hash算法

和ip_hash算法类似,这里是根据访问的hash结果请求的,让每个URL定向到同一个后端服务器,后端服务器为缓冲服务器效果显著。

在upstream中加入hash语句,server语句中不能写入weight等其他参数,hash_method使用的是hash算法

  1. cd /application/nginx/conf/
  2. pwd
  3. #/application/nginx/conf
  4. hostname
  5. lb01
  6. cp nginx.conf{,.bak.before.upsteam}
  7. cat nginx.conf

准备

#测试weight次数  权重

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10.  
  11. upstream server_pools {
  12. server 10.0.0.7:80 weight=2;
  13. server 10.0.0.8:80 weight=1;
  14. server 10.0.0.9:80 weight=1;
  15. }
  16.  
  17. server {
  18. listen 80;
  19. server_name www.etiantian.org;
  20. location / {
  21. proxy_pass http://server_pools;
  22. }
  23. }
  24. }
  25.  
  26. /application/nginx/sbin/nginx -t
  27.  
  28. lsof -i:80
  29. /application/nginx/sbin/nginx
  30.  
  31. curl 10.0.0.5/bingbing.html
  32.  
  33. #测试weight=4 max_fails=3 fail_timeout=30s;
  34.  
  35. #测试命令
  36. for n in {1..1000};do curl -s 10.0.0.5/bingbing.html|grep "[78]$";sleep 1;date +%T;done
  37.  
  38. worker_processes 1;
  39. events {
  40. worker_connections 1024;
  41. }
  42. http {
  43. include mime.types;
  44. default_type application/octet-stream;
  45. sendfile on;
  46. keepalive_timeout 65;
  47.  
  48. upstream server_pools {
  49. server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
  50. server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
  51. # server 10.0.0.9:80 weight=1;
  52. }
  53.  
  54. server {
  55. listen 80;
  56. server_name www.etiantian.org;
  57. location / {
  58. proxy_pass http://server_pools;
  59. }
  60. }
  61. }

#测试weight次数 权重

#测试backup热备功能

  1. #把7/8/服务器Nginx功能关掉看看是否9出来
  2. #当7或8启动,9就关闭
  3.  
  4. #7/8执行
  5. killall nginx
  6. /application/nginx/sbin/nginx
  7.  
  8. #了解
  9. #sed -i 'N;s#\n10.0.0.255# #g' /application/nginx/html/{www,bbs}/bingbing.html
  10.  
  11. #在lb01测试
  12. for n in {1..1000};do curl -s 10.0.0.5/bingbing.html;sleep 1;date +%T;done
  13.  
  14. worker_processes 1;
  15. events {
  16. worker_connections 1024;
  17. }
  18. http {
  19. include mime.types;
  20. default_type application/octet-stream;
  21. sendfile on;
  22. keepalive_timeout 65;
  23.  
  24. upstream server_pools {
  25. server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
  26. server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
  27. server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s backup;
  28. }
  29.  
  30. server {
  31. listen 80;
  32. server_name www.etiantian.org;
  33. location / {
  34. proxy_pass http://server_pools;
  35. }
  36. }
  37. }

#测试backup热备功能

#ip_hash测试

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10.  
  11. upstream server_pools {
  12. ip_hash;
  13. server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
  14. server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
  15. server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s;
  16. }
  17.  
  18. server {
  19. listen 80;
  20. server_name www.etiantian.org;
  21. location / {
  22. proxy_pass http://server_pools;
  23. }
  24. }
  25. }
  26. ######nginx.conf multi vhosts
  27.  
  28. #解决方法
  29. #proxy_set_header
  30.  
  31. #看抓包工具
  32. worker_processes 1;
  33. events {
  34. worker_connections 1024;
  35. }
  36. http {
  37. include mime.types;
  38. default_type application/octet-stream;
  39. sendfile on;
  40. keepalive_timeout 65;
  41.  
  42. upstream server_pools {
  43. server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
  44. server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
  45. server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s;
  46. }
  47.  
  48. server {
  49. listen 80;
  50. server_name www.etiantian.org;
  51. location / {
  52. proxy_pass http://server_pools;
  53. proxy_set_header Host $host;
  54. }
  55. }
  56. server {
  57. listen 80;
  58. server_name bbs.etiantian.org;
  59. location / {
  60. proxy_pass http://server_pools;
  61. proxy_set_header Host $host;
  62. }
  63. }
  64. }

#ip_hash测试

upstream模块调度算法的更多相关文章

  1. 基于LNMP(fastcgi协议)环境部署、原理介绍以及fastcgi_cache配置以及upstream模块负载均衡讲解

    ngx_http_proxy_module只能反向代理后端使用HTTP协议的主机.而ngx_http_fastcgi_module只能反向代理后端使用FPM或者使用FastCGI协议的客户端. 一.部 ...

  2. nginx upstream模块--负载均衡

    Module ngx_http_upstream_module英文文档 upstream模块相关说明1.upstream模块应放于nginx.conf配置的http{}标签内2.upstream模块默 ...

  3. [转帖]nginx upstream模块--负载均衡

    nginx upstream模块--负载均衡 https://www.cnblogs.com/linjiqin/p/5494783.html Module ngx_http_upstream_modu ...

  4. Nginx - upstream 模块及参数测试

    目录 - 1. 前言- 2. 配置示例及指令说明    - 2.1 配置示例    - 2.2 指令    - 2.3 upstream相关变量- 3. 参数配置及测试    - 3.1 max_fa ...

  5. nginx之proxy、cache、upstream模块学习

    nginx之proxy反向代理模块: location ^~ /proxy_path/ { root "/www/html"; 这里没必要配置 index index.html; ...

  6. nginx的stream模块和upstream模块

    nginx7层调度方式 使用upstream模块定义集群名称和节点地址 定义在server字段之外httpd字段之内 upstream staticweb { server 172.17.0.2; # ...

  7. nginx upstream模块

    upstream模块 upstream模块 (100%) nginx模块一般被分成三大类:handler.filter和upstream.前面的章节中,读者已经了解了handler.filter. 利 ...

  8. Nginx Upstream模块源码分析(上)

    Upstream模块是一个很重要的模块,很多其他模块都会使用它来完成对后端服务器的访问, 达到反向代理和负载均衡的效果.例如Fastcgi.Memcached.SessionSticky等. 如果自己 ...

  9. nginx系列10:通过upstream模块选择上游服务器和负载均衡策略round-robin

    upstream模块的使用方法 1,使用upstream和server指令来选择上游服务器 这两个指令的语法如下图: 示例: 2,对上游服务使用keepalive长连接 负载均衡策略round-rob ...

随机推荐

  1. 开源GIS浅谈 【转】

    http://blog.csdn.net/happyduoduo1/article/details/51773850 谈到GIS软件,首先让我们想到的是GIS界的龙头大哥ESRI公司旗下的ArcGIS ...

  2. Object 标签遮挡 Div 显示

    最近在使用 Object 时,就是播放视频的 Object 标签遮挡住其他 div 标签,不能正常显示. 出现这种现象的原因: object 标签不在 dom 文档流里面,浏览器在解析的时候先把 ob ...

  3. Netty实现的一个异步Socket代码

    本人写的一个使用Netty实现的一个异步Socket代码 package test.core.nio; import com.google.common.util.concurrent.ThreadF ...

  4. 优麒麟 16.04 LTS(长期支持)版本

    Ubuntu Kylin (中文又被称为优麒麟)是基于Ubuntu的一款官方衍生版. 它是一款专门为中国市场打造的免费操作系统.它包括Ubuntu用户期待的各种功能,并配有必备的中文软件及程序. ht ...

  5. 【RS】Collaborative Memory Network for Recommendation Systems - 基于协同记忆网络的推荐系统

    [论文标题]Collaborative Memory Network for Recommendation Systems    (SIGIR'18) [论文作者]—Travis Ebesu (San ...

  6. Rabbit五种消息队列学习(一) – 总述

    RabbitMQ支持五种消息传递类型,分别如下图所示: 上图中显示6中消息队列分别为: 1.简单队列 一个生产者将消息放到队列中,一个消费者监听队列 2.工作队列(Work queues) 一个生产者 ...

  7. android4.2 telephone应用层分析

    InCallScreen.java 复制通话界面的显示和提供人机交互的接口.进入该界面第一个调用ONCreate.否则进入OnNewIntent,该配置文件是incall_screen.xml,当中i ...

  8. 卷积转换为矩阵运算中填充数的计算-GEMM

    背景:最近在写一个基于opencl的正向神经网络框架,项目地址 https://github.com/aktiger/YoloOCLInference ,我从这里https://github.com/ ...

  9. 在 WPF 中如何在控件上屏蔽系统默认的触摸长按事件

    来源:https://stackoverflow.com/questions/5962108/disable-a-right-click-press-and-hold-in-wpf-applicati ...

  10. 解决Protobuf生成的C#代码命名不规范问题

    起因 通常使用Protobuf的步骤为 定义 .proto 文件 使用 protoc 生成对应语言的代码 以生成C#代码为例,使用如下命令: protoc -I ../protos --csharp_ ...