美文网首页设计方案
使用OpenResty简单开发Nginx分发策略脚本

使用OpenResty简单开发Nginx分发策略脚本

作者: NealLemon | 来源:发表于2020-02-08 07:53 被阅读0次

    在上一章 基于OpenResty部署Nginx以及LUA脚本开发 中我们简单的使用OpenResty开发了一个输出 hello world的LUA脚本。这次我们进阶,使用OpenResty 开发一个Nginx 分发脚本。

    我们知道Nginx 原生自带 负载均衡策略,但是我们开发业务的时候,很多需要根据业务去做负载分发,比如某些高并发高频的数据,我们可以暂时缓存在Nginx本地,当服务请求过来时,直接在Nginx服务器上拿到缓存数据返回,这样大大的减轻了后端压力。这里我只介绍分发脚本代码,缓存代码兴趣的同学可以自己写写试试。

    场景模拟

    我们有3台服务器,当客户端发送http请求时,我们可以根据请求附带的某些参数来进行分发。这里我们就简单的使用 http://ip/lua?id= 这个URL来进行分发。

    具体分发流程如下图所示

    流程图.jpg

    前期准备

    首先我们需要三台虚拟机或者云服务器,然后分别安装OpenResty,这里可以参照我前一篇文章,因为下面的所有修改都是基于前一篇文章来的。

    • SERVER-1:分发服务器
    • SERVER-2:待分发服务器
    • SERVER-3:待分发服务器

    类库添加

    下载 下载http.lua和http_headers.lua库

    并且上传到 SERVER-1 服务器的 /usr/local/openresty/lualib/resty 目录下,如图所示

    lua-http.jpg

    SERVER-1 : 分发层

    编写lua脚本

    这里我使用了之前的hello.lua脚本,这样少去了很多配置

    我们打开hello.lua脚本进行编辑

    vi /usr/local/openresty/nginx/lua/hello.lua
    

    将之前的内容去除,填入以下代码

    local uri_args = ngx.req.get_uri_args()
    local args_id = uri_args["id"]
    local host = {"122.51.192.50", "120.92.35.122"}
    local hash = ngx.crc32_long(args_id)
    hash = (hash % 2) + 1
    backend = "http://"..host[hash].."/lua"
    local http = require("resty.http")
    local httpc = http.new()
    
    local resp, err = httpc:request_uri(backend, {
        method = "GET"
    })
    
    if not resp then
        ngx.say("request error :", err)
        return
    end
    
    ngx.say(resp.body)
    
    httpc:close()
    
    

    如图所示

    分发层.jpg

    保存退出

    执行以下命令:

    检查命令

    /usr/local/openresty/nginx/sbin/nginx -t
    

    更新命令

    /usr/local/openresty/nginx/sbin/nginx -s reload
    

    SERVER-2 待分发服务器

    待分发的服务器很简单,我们只要按照 基于OpenResty部署Nginx以及LUA脚本开发 安装好即可。安装好后,修改 hello.lua文件

    vi /usr/local/openresty/nginx/lua/hello.lua
    

    改为

    ngx.say("hello world, I am Iron Man");
    

    保存退出

    执行以下命令:

    检查命令

    /usr/local/openresty/nginx/sbin/nginx -t
    

    更新命令

    /usr/local/openresty/nginx/sbin/nginx -s reload
    

    SERVER-3 待分发服务器

    如上操作即可,只是将 ngx.say("hello world, I am Iron Man"); 改为 ngx.say("hello world, I am Hulk");

    运行测试

    我们按照之前的逻辑,将请求 发到 服务层,根据参数id的值不同,看是否可以分发到不同的Nginx服务器上。

    SERVER-2.jpg SERVER-3.jpg

    分发成功!

    小结

    其实按照这个思路,我想基于OpenResty 第三方组件,可以做很多事情,只是时间去研究和调试的问题了。

    相关文章

      网友评论

        本文标题:使用OpenResty简单开发Nginx分发策略脚本

        本文链接:https://www.haomeiwen.com/subject/oonvxhtx.html