加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用balancer_by_lua_block做应用层负载均衡

发布时间:2020-12-14 21:55:01 所属栏目:大数据 来源:网络整理
导读:首先感谢章义春大神的openresty,解决了web开发的一些痛点并简化了web开发的复杂度。 需求: 根据url的一个参数,做负载均衡,使得某一个用户总是被分配到固定的业务服务器上处理,方便后续的业务处理,做缓存或单元化架构部署 假设这个参数为dvid ,一共有

首先感谢章义春大神的openresty,解决了web开发的一些痛点并简化了web开发的复杂度。

需求:

根据url的一个参数,做负载均衡,使得某一个用户总是被分配到固定的业务服务器上处理,方便后续的业务处理,做缓存或单元化架构部署

假设这个参数为dvid,一共有两个业务服务器,8088端口和8089端口,分别返回hello和world

    server{
    listen 8088;
            location /hello {
                content_by_lua '
                ngx.say("hello")
                ';
        }  
    }
    server{
    listen 8089;
            location /hello {
                content_by_lua '
                ngx.say("world")
                ';
        }  
    }  

upstream ?balancer_by_lua_block的配置:

? ? upstream backend{ ?
? ? ? ? server 0.0.0.0; ?
? ? ? ? balancer_by_lua_block { ??
? ? ? ? ? ? local balancer = require "ngx.balancer" ? ?
? ? ? ? ? ? local port = {8088,8089} ? ?
? ? ? ? ? ? local backend = "" ?
? ? ? ? ? ? local dvid = ngx.req.get_uri_args()["dvid"] or 0
? ? ? ? ? ? ngx.log(ngx.ERR,"dvid=",dvid)
? ? ? ? ? ? local hash = (dvid % 2) + 1 ??
? ? ? ? ? ? ngx.log(ngx.ERR,"hash=",hash)
? ? ? ? ? ? backend = port[hash] ?
? ? ? ? ? ? ngx.log(ngx.ERR,"backend=",backend)
? ? ? ? ? ? ngx.log(ngx.ERR,dvid," hash=",hash," up=",backend) ?
? ? ? ? ? ? local ok,err = balancer.set_current_peer("127.0.0.1",backend) ?
? ? ? ? ? ? if not ok then ?
? ? ? ? ? ? ? ? ngx.log(ngx.ERR,"failed to set the current peer: ",err) ?
? ? ? ? ? ? ? ? return ngx.exit(500) ?
? ? ? ? ? ? end ?
? ? ? ? ? ? ngx.log(ngx.DEBUG,"current peer ",backend) ?
? ? ? ? } ??
? ? }?

接收业务请求的server:

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /hello {
            proxy_pass http://backend;
        }   
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
测试:

http://localhost/hello?dvid=1? ?返回world

http://localhost/hello?dvid=2? ?返回hello

测试结果OK


openresty安装:

https://openresty.org/en/download.html

wget?https://openresty.org/download/openresty-1.11.2.2.tar.gz

tar zxf openresty-1.11.2.2.tar.gz

cd openresty-1.11.2.2/

./configure --with-luajit&& make && make install


参考:

http://weibo.com/1834459124/DaEmgBhlD?from=singleweibo&mod=recommand_weibo&type=comment#_rnd1479734607640

http://blog.csdn.net/force_eagle/article/details/52224660

http://www.wtoutiao.com/p/177SJDc.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读