• 阿恺
    2019-02-20
    老师是不是说反了,执行顺序是从下到上,先是分配共享内存,最后才是round-robin的处理

    作者回复: 你是说upstream模块顺序吗?顺序是对的,模块顺序其实针对的是初始化顺序,而初始化什么呢?就是upstream模块构成的单链表(参见http filter模块),由于是从链表头插入并初始化新模块,往往执行顺序与初始化顺序是相反的。

     1
     1
  • 高枕
    2018-12-27
    老师您好,可否为某一个特定的ip或者参数提前指定一台上游服务器?比如get里面username若为“test”,那么就统一分发到上游的8011端口的这台服务器

    作者回复: 可以,比如用if加rewrite指令,或者用map来为proxy_pass提供域名

    
     1
  • 杜叶飞
    2020-01-05
    upstream server的RR负载均衡策略,使用zone共享内存解决不用work状态,那高并发请求时每个请求都访问和更新共享内存,是否有性能开销问题?与单work内存方式性能差多少?

    作者回复: 有,但非常低,它使用自旋锁对共享内存做同步,每次操作红黑树不过十来条指令,可以忽略。

    
    
  • 看,有只猪
    2019-11-05
    老师,针对upstream模块的调用顺序有些疑问?
    前面您讲过Nginx初始化时会根据ngx_modules定义的顺序,采用头插法建立一个调用链,因此ngx_module s中最后一个元素是在链表头部。处理请求时是按该调用链顺序执行,因此在ngx_modules来看,是从下往上执行的。请问这一点我有理解错吗?
    根据上一点的理解,可以推出upstream模块的执行顺序也是从下往上的,为什么您在该课程中讲解的是从上往下呢?是口误还是upstream模块处理不一样呢?

    作者回复: 你说的调用链,是指处理模块和过滤模块吧?这两类模块与upstream模块不同,upstream模块间其实差异性很大,比如zone模块功能完全不同,而keepalive模块应在负载均衡算法模块之前,而其他负载均衡算法模块(如hash或者least conn)互相之间有排他性。所以upstream模块的处理方式不是简单的链表关系。我建议你参考一下这两个方法:ngx_http_upstream_keepalive和ngx_http_upstream_zone

    
    
  • start
    2019-10-10
    老师您好,如果设置了 ip_hash 并且开启了 zone。原来ip_hash可以使一个客户端连接到一个固定的上游server,现在配置了zone ,也可以实现客服端访问到同一个上游server,zone就是相当于把他们的算法放在共享内存里面,并且可以跨worker生效!可以这样理解吗?

    作者回复: 是的

    
    
  • hisir
    2019-07-11
    master选择worker也是轮询么? master在内存里记录调用次数?

    作者回复: master不选择worker,由linux kernal选择worker,参见122课

    
    
  • 初音未来
    2019-05-20
    老师 upstream_zone 模块能过解决session的问题吧
    作者回复: session问题是指?


    保持会话

    作者回复: 只能我来猜了。保持会话,你这里是指,同一客户端2次请求2个连接,都落在一台服务器上?如果是这个问题,答案是不行。

    
    
  • 初音未来
    2019-05-20
    老师 upstream_zone 模块能过解决session的问题吧

    作者回复: session问题是指?

    
    
  • Panda
    2019-01-14
    least-con 负载均衡算法是不是可能出现 负载不均衡的情况

    作者回复: 是。实际上所有负载均衡算法都会在某些条件下出现负载不均衡情况

    
    
  • 风行传说
    2019-01-04
    老师,能否提供一个配置共享内存的实际案例; 共享内存的配置只是在upstream模块配置 zone name [size]就可以了? 比如无需提前在http模块先配置好zone 共享内存,然后在upstream模块进行共享内存的调用?

    作者回复: 不需要提前,在upstream{}里的zone里配置时,就会直接创建共享内存,并把相关的负载均衡参数以及服务器状态数据都放在共享内存中,进而对所有worker进程生效。

    
    
  • 高枕
    2018-12-28
    老师您好昨天这个问题我没有表述清楚:
    之前的upstream并未使用zone模块,为什么也能正常运行呢?比如权重为2的话,会记录下已经访问了1次或者2次?
    我想问您的是,您是不是在您的nginx中只开启了一个work进程?不然的话,您若不使用zone模块,访问次数无法记录在共享内存,多个work无法判断上次访的客户端访问是分配到了哪个上游服务。

    作者回复: 1、我的示例中,只开启了1个worker进程。
    2、没使用zone,则会在内存中会记录访问了1次或者2次,所以功能是正常的。
    3、如果开启了多个worker进程,但没有开启zone,那么多个worker是独立的在各自内存中记录,不能分享其他worker进程的访问记录。

    
    
  • 高枕
    2018-12-27
    老师,之前的upstream并未使用zone模块,为什么也能正常运行呢?比如权重为2的话,会记录下已经访问了1次或者2次?

    作者回复: 不使用zone模块,就会在进程的内容存放内容,用了zone模块,只是把内存改为共享 内存而已。

    
    
我们在线,来聊聊吧