Node dan cookie

Konsep node, penghubungan VM, dan autentikasi cookie bersama.

Daftar isi

Topik ini mendefinisikan node sebagai VM Erlang yang berjalan dengan nama, menjelaskan cara dua node saling menghubung, dan bagaimana cookie bersama menjadi satu-satunya gerbang autentikasinya. Setelah membaca, dua VM pada satu mesin dapat dihubungkan dan hasilnya diperiksa dari shell.

VM dengan nama#

Erlang yang dijalankan tanpa argumen tambahan adalah satu node tanpa nama yang hidup sendiri, dan node/0 melaporkan nama yang sedang dipakainya. Dengan opsi -sname, VM memberi dirinya nama pendek yang cukup untuk jaringan lokal, dan node itu sejak itu dapat dihubungi:

bash
# mulai node bernama b dengan cookie tertentu
erl -sname b -noshell -setcookie kunci_rahasia -eval 'receive after 15000 -> ok end'

Opsi -noshell membuat VM hidup tanpa prompt interaktif, cocok untuk node latar belakang, sedangkan opsi -setcookie menetapkan cookie node itu sejak awal. Nama node lengkapnya tercetak saat VM mulai, berbentuk 'b@nama-host' yang menggabungkan nama pendek dengan nama mesin.

Menghubungkan dan memeriksa#

Dari node lain, fungsi net_adm:ping/1 mencoba menghubung, dan fungsi nodes/0 membaca daftar node yang sudah terhubung. Sesi berikut dijalankan pada node bernama a yang berhadapan dengan node b yang hidup dari perintah di atas:

erlang Menghubung dan memeriksa node
1> net_adm:ping('b@c-6ae9b560-14127d0f-ff7b7b884eca').
pong
2> nodes().
['b@c-6ae9b560-14127d0f-ff7b7b884eca']

Nilai kembalian pong menandai koneksi berhasil, dan nodes/0 menunjukkan node b di dalam daftar. Gagalnya koneksi mengembalikan pang tanpa pesan error di pemanggil:

erlang Ping ke node dengan cookie berbeda
1> net_adm:ping('c@c-6ae9b560-14127d0f-ff7b7b884eca').
pang
2> nodes().
[]

Sisi yang menolak biasanya mencatat alasannya ke log, sehingga pang yang diam pada pemanggil selalu punya penjelasan di sisi lainnya.

Cookie adalah atom yang dipakai VM sebagai kunci sederhana: dua node hanya saling terhubung bila cookie keduanya sama. Sifat ini menjadikan klaster Erlang aman dari node sembarangan di jaringan yang sama, tetapi kekuatannya sesederhana rahasia bersama, sehingga cookie bukan pengganti autentikasi yang benar pada jaringan terbuka. Dua cara menetapkannya adalah opsi -setcookie saat mulai dan fungsi erlang:set_cookie/2 saat berjalan, sedangkan berkas ~/.erlang.cookie menjadi sumber bawaan bila tidak ada keduanya. Kesalahan yang paling sering adalah dua node yang tanpa sengaja membawa cookie berbeda, dan gejalanya persis contoh di atas: pang di satu sisi, keluhan autentikasi di log sisi lain.

Di bawah penghubungan ini ada layanan epmd (Erlang Port Mapper Daemon) yang berjalan per mesin: node mendaftarkan nomor portnya ke epmd, dan pemanggil bertanya ke epmd sebelum menyambung. Inilah alasan dua node pada mesin yang sama dapat hidup berdampingan, sekaligus penjelasan mengapa epmd harus hidup di setiap mesin yang menjadi tuan rumah node.

Membaca identitas dan dua skema nama#

Node punya tiga cara membaca identitas dan tetangganya: node/0 melaporkan dirinya, nodes/0 melaporkan tetangga biasa, dan nodes(hidden) melaporkan tetangga tersembunyi yang tidak muncul di daftar nodes/0 milik node lain. Dua opsi penamaan membentuk dua skema yang berbeda, dan pilihannya menentukan siapa yang bisa bertemu siapa:

OpsiBentuk namaLingkup
-snamependek, b@hostjaringan lokal
-namepanjang, [email protected]lintas domain

Node yang dibuat dengan -sname tidak dapat berbicara dengan node -name tanpa penyesuaian, karena keduanya membangun identitasnya berbeda. Untuk belajar dan pengembangan di satu mesin, -sname sudah cukup, sebagaimana seluruh contoh topik ini. Sistem target produksi lazim memakai -name dengan nama yang sepenuhnya memenuhi syarat, yang dinyatakan pada berkas vm.args release.

Kesalahan umum#

  • Memakai -sname dan -name secara tercampur. Keduanya memakai skema penamaan berbeda, dan node yang ditulis dengan -name tidak terbaca oleh node -sname tanpa penyesuaian. Pilih satu skema untuk seluruh klaster.
  • Mengira ping gagal tanpa alasannya. pang tidak membawa pesan. Periksa log node tujuan, kesamaan cookie, dan hidupnya epmd sebelum menebak.
  • Menyalakan cookie yang sama pada jaringan terbuka dan menganggapnya aman. Cookie menahan node asing dari berbicara, tetapi siapa pun yang mengetahui atom itu dapat masuk. Jaringan produksi menuntut lapisan jaringan yang benar.

Ringkasan#

  • Node adalah VM Erlang dengan nama, dibuat dengan -sname untuk jaringan lokal dan dilaporkan node/0.
  • net_adm:ping/1 menghubung node dan mengembalikan pong atau pang, sedangkan nodes/0 membaca daftar node yang terhubung.
  • Cookie bersama adalah syarat bicara antar node, ditetapkan dengan -setcookie, set_cookie/2, atau berkas ~/.erlang.cookie.
  • epmd memetakan nama node ke port di setiap mesin dan menjadi syarat hidupnya penghubungan.

Referensi#