对于upstream负载均衡配置  

1.如果后端报错直接返回500 可以直接使用 upstream

upstream backend {
    server1,
    server2
}
location /api{
    proxy_pass https://backend/;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_next_upstream_timeout 3s;
    proxy_next_upstream_tries 2;

但如果是在返回的data 里的status 只能使用lua脚本 直接使用openresty更方便

前置知识:

access_by_lua_block 请求前置

proxy_pass转发请求

body_filter_by_lua_block 处理相应阶段逻辑 比如对响应头处理 添加自定义属性 将ip+port写入响应头 方便抓包排查

content_by_lua_block  content_by_lua_file lua脚本返回内容 替换 proxy_pass 或者 通过lua file处理多种情况的请求

init_by_lua_block 对某个字典的初始化 

共享内存字典 lua_shared_dict

核心思路 直接通过lua脚本替代 业务宕机切换节点逻辑

1. 使用共享内存 lua_shared_dict 通过 cache = ngx.shared.xx 获取到共享内存 key  通过cache.set(name,value,timeout) cache.get(name)  设置 获取内存 记录失败的节点 在下次转发之前 判断是否访问的是已经记录的失败节点 如果是 则切换到另一节点 

2. 对于后端服务节点也可以做成动态可配置化 如果直接写在配置文件中引入 则每次变动都需要reload 可以直接写一个update_node 代理 通过lua脚本直接将接口传入的参数 写入节点配置的共享字典中  具体代码如下 

content_by_lua 

新增模块/版本升级

解压安装包 通过./configure --with指定参数 通过nginx -V / openresty -V 查看当前安装的版本 和安装时携带的模块 在./configure -with时携带之前的模块 并加载指定路径下的新模块 make 生成新的二进制文件 注意不要 make install 

然后走热更新流程:

备份文件 cp 

kill -USR2 开启新的master

Kill - WINCH 关闭旧的 master

回退 kill HUP 旧进程 kill QUIT 新进程

未完

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐