iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0

每次啟動一個 BEAM vm 時,他會產生一個隨機的密碼存在家目錄的 .erlang.cookie 檔案 (~/.erlang.cookie)

我們可以使用 Node.get_cookie/0 在程式中取得 cookie

iex(node2@localhost)2> Node.get_cookie()
:SUQNVNWGTKYLKOAQEELH

如果另一個 node 在同一台機器啟動時,則會沿用這個 cookie,但是不同機器的 node 產生的 cookie 會不同

在我們使用 Node.connect 時會檢查 cookie , cookie 不同就不能建立連線。

讓兩台機器都用同一個 cookie 其中一個方法是使用 Node.set_cookie/2 來設定這個 BEAM 執行的 cookie

更改 cookie

目前在同台機器可以用 Node.set_cookie 來改變目前 node 的 cookie

# node 2
iex(node2@localhost)3> Node.set_cookie(:new_cookie)
true
iex(node2@localhost)4> Node.connect(:node1@localhost)
false

會發現不能連線了

# node 1
iex(node1@localhost)5> Node.get_cookie()
:SUQNVNWGTKYLKOAQEELH

12:17:52.158 [error] ** Connection attempt from node :node2@localhost rejected. Invalid challenge reply. **

在 node 1 這邊則是會得到嘗試連線的警告

# node 1
iex(node1@localhost)7> Node.set_cookie(:new_cookie)
true
# node 2
iex(node2@localhost)5> Node.connect(:node1@localhost)
true
iex(node2@localhost)6> Node.list
[:node1@localhost]

當我們把 node 1 的 cookie 也改成跟 node 2 一樣後,就可以正常連線成功了

啟動時指定 cookie

也可以在 iex 啟動時使用 --cookie 選項指定 cookie

iex --sname node1@localhost --cookie another_cookie

上一篇
27 Node 監控
下一篇
29 Process.info
系列文
Elixir 多工 : Processes 與 OTP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言