描述
ray在內網完美執行,但是work節點和head節點在不同wifi下丟失心跳,8265皮膚檢測最初可以連線並alive 但是很快就變為dead
環境
windows
python3.10.14
ray-3.0.0.dev0-cp310-cp310-win_amd64
客戶端(work節點) 啟動項
ray start --address=12.34.567.89:6379 --node-ip-address=98.765.43.21
伺服器端(head節點)啟動項
ray start--head --port=6379 --dashboard-host=0.0.0.0 --dashboard-port=8265 --node-ip-address=12.34.567.89
node-ip-address可以強行指定本機ip
分析
丟失心跳的原因是因為
客戶端應答心跳時,目的地址錯誤,應為伺服器端的公網地址而非伺服器端所在的內網地址
使用wireshark抓包抓黑色的錯誤包,發現客戶端企圖用伺服器端所在的內網回應心跳,這必然是回覆不到的。
但是--address對應的ip必須填內網而不是公網(head節點指定nodeip)不然無法啟動,因為填公網ip無法迴環去找自己,但是如果填內網ip客戶端又找不到心跳
或者直接把裸機暴露給公網,不走所謂NAT
或者使用代理伺服器,讓他以為自己是在內網
參考
from ray.scripts.scripts import start, stop
ctx = start.make_context('start',
[
'--address', f'33.44.55.66:6379',
'--resources', f'{json.dumps(custom_resources)}',
'--node-name', name,
# '--node-ip-address', "11.22.33.44",
],
)
result = start.invoke(ctx)
ray github issue 45179