利用 openresty balancer_by_lua 实现一个简单的 ip_hash upstream 调度

以下基于 OpenResty balancer_by_lua 配置指令, 利用 ngx.crc32_long 根据源地址与目的端口生成hash, 实现一个简单的 ip_hash upstream. 仅供参考 

upstream backend{
    server 0.0.0.0;
    balancer_by_lua_block {
        local balancer = require "ngx.balancer"
        local host = {"192.168.1.111", "192.168.1.112"}
        local backend = ""
        local port = ngx.var.server_port
        local remote_ip = ngx.var.remote_addr
        local key = remote_ip..port
        local hash = ngx.crc32_long(key);
        hash = (hash % 2) + 1
        backend = host[hash]
        ngx.log(ngx.DEBUG, "ip_hash=", ngx.var.remote_addr, " hash=", hash, " up=", backend, ":", port)
        local ok, err = balancer.set_current_peer(backend, port)
        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, ":", port)
    }
}

server {
	listen 80;
	listen 8080;
	listen 7777;
	server_name *.x.com
	location / {
		proxy_pass http://backend;
	}
}

参考:

https://github.com/openresty/lua-nginx-module

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`ngx_upstream_module` 是 OpenResty 中的一个模块,它提供了对 upstream 的支持。Upstream一个概念,用于表示一组后端服务器。在使用 upstream 时,客户端的请求会被反向代理到一个或多个后端服务器上进行处理。 `ngx_upstream_module` 提供了一些方法和指令,可以动态地管理 upstream 中的服务器,包括添加、删除、修改服务器等操作。常用的指令包括: - upstream:定义一个 upstream。 - server:定义一个服务器,包括地址和端口等信息。 - keepalive:设置连接池的大小。 - least_conn:使用最少连接数的负载均衡算法。 - ip_hash:使用 IP 地址进行哈希的负载均衡算法。 常用的方法包括: - ngx.upstream.get_servers(name):获取一个 upstream 中所有的服务器。 - ngx.upstream.add_server(name, server, weight):向一个 upstream 中添加服务器。 - ngx.upstream.remove_server(name, server):从一个 upstream 中删除服务器。 - ngx.upstream.set_peer_down(name, server):将一个服务器标记为不可用。 - ngx.upstream.set_peer_up(name, server):将一个服务器标记为可用。 在使用 `ngx_upstream_module` 时,需要在编译 OpenResty 时包含 `--with-http_upstream_module` 选项。可以通过以下命令检查当前 OpenResty 是否已经安装了 `ngx_upstream_module` 模块: ```shell $ /path/to/openresty/nginx/sbin/nginx -V 2>&1 | grep -o with-http_upstream_module ``` 需要将 `/path/to/openresty` 替换为实际的 OpenResty 安装路径。如果输出 `with-http_upstream_module`,则说明已经安装了 `ngx_upstream_module` 模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值