abtestingGateway錯誤集錦

管理接口訪問報錯

系統版本 內核版本
Ubuntu 14.04.2 3.13.0-32-generic

咱們在這裏經過curl來插入命令的時候直接報錯:
curl命令寫入規則html

curl 'http://127.0.0.1:8080/ab_admin?token=zuesx&action=policy_set' -d '{"divtype":"30102","divdata":[{"30102_set":["hsy51234567qc","hsyf1a2c3d4b5"],"upstream":"newhsy"}]}'
2018/10/23 17:44:28 [error] 8738#0: *1090 lua entry thread aborted: runtime error: /opt/nginx/lua_gray/admin/ab_action.lua:5: loop or previous error loading module 'abtesting.utils.utils'  
stack traceback:
coroutine 0:
    [C]: in function 'require'
    /opt/nginx/lua_gray/admin/ab_action.lua:5: in function </opt/nginx/lua_gray/admin/ab_action.lua:1>, client: 127.0.0.1, server: localhost, request: "POST /ab_admin?token=zuesx&action=policy_set HTTP/1.1", host: "127.0.0.1:8080"

上面的報錯很明顯,又提示進入調用死循環關係或者前期錯誤當加載'abtesting.utils.utils' 模塊的時候,怎麼辦呢?nginx

  1. 先執行ldconfig,從新加載全部的動態連接庫。
  2. 而後重啓nginx便可。
    以下所示:
# ldconfig
# supervisorctl
nginx                            RUNNING   pid 8737, uptime 0:10:03
supervisor> restart nginx
nginx: stopped
nginx: started

yield報錯

管理接口經過curl(同上)寫入規則的時候,報這個錯誤redis

attempt to yield across metamethod/C-call boundary

這個的話,我是從新安裝了這幾步
原版本服務器

  1. lua 5.1
  2. LuaJIT 2.0.2
  3. tengine是2.2.0,

安裝後的版本是curl

  1. lua5.1
  2. LuaJIT 2.0.5
  3. tengine是2.2.0

其實升級的就是LuaJIT而已,主要是安裝完LuaJIT後,須要從新編譯下tengine,而且我這裏使用lua-nginx-module版本是lua-nginx-module-0.10.13oop

redis鏈接提示Operation refused

我把ab部署到阿里雲後,在阿里雲開了一個redis,redis使用的域名鏈接,而後我在server段的redis配置,把$redis_host的地址設置爲了 xxx.aliyun.com,這個域名就是redis鏈接域名。因而啓動nginx+ab,發如今業務流量分流的時候,nginx日誌裏面老是提示 鏈接redis失敗,因此灰度名單分流也失敗,可是發現規則增刪改查的接口都沒有問題,也就是沒有提示任何鏈接redis失敗的緣由,我剖析ab的源碼,發現都是共用一個redis模塊,或者說共用一個redis方法來實現鏈接的,爲何管理接口的卻沒有事呢,關鍵這個Operation refused並無提示更多有用的信息,因而我把鏈接redis的那段代碼,把err信息所有經過ngx.say這樣的方式打印出來,發現完整的報錯信息是xxx.aliyuncs.com could not be resolved (5: Operation refused),得,這很明顯了,是redis域名沒法解析出來。ui

根因找到了,那麼就分析爲啥會這樣的,我仔細查看nginx的配置文件,發現有問題的那個業務配置文件,有一行這樣的配置:resolver xxx.xxx.xxx.xxx valid=300s ,而後我又仔細上nginx官網查詢了下這個resolver的配置,官網解釋請戳這裏 , 意思是說這個resolver的配置是代表這個server的全部域名解析都是用這個dns服務器來解析,而redis的域名是阿里雲內部的域名,使用剛纔配置單的那個dns,根本沒法解析,因此纔會提示redis鏈接不上了。阿里雲

找到爲何會致使沒法鏈接redis的緣由後,咱們就開始整改了,把resolver去掉或者添加一個阿里雲的dns便可。添加完成後重啓nginx就能夠正常使用ab分流功能了。lua

相關文章
相關標籤/搜索