準備中
確認したバージョン
kronosnet v1.6(libknetのみ)で、デフォルトのUDP通信のみを確認。
構成
libknetは、7つのスレッドで構成され、corosync層(totempg/totemsrp/totemnet/totemknet)の下位で動作します。
libknetに対応しているcorosyncではrrp層(リングプロトコル)が廃止された為、rrp_modeの指定が無くなりました。
詳細は別途記載しますが、corosync.confのlink_modeにpassive/rr/activeを設定することによって、rrp_modeに変わる指定が可能です。(デフォルトは、passive)
libknetを利用する場合には、corosync.confのtransportにknetを指定する必要があります。(libknetを利用しない以前のcorosyncに似たudpu/udp指定も可能。)
複数インターフェースに関しては、libknet側で管理・制御する為、corosync層からの送受信は、libknetとの送受信fdを利用して行います。
よって、transportにknetを指定しない場合には、複数インターフェースは利用出来ません。
1. heartbeatスレッド
coroync.confのnode_listに設定された自ノード以外のクラスタメンバーのringx_addrのアドレスに対して、libknet独自のPINGパケットを送受信して接続を確認します。
PING応答がないクラスタメンバーの状態(connectedが変化)を、dst_link_handlerスレッドへ通知します。
2. send_to_links_threadスレッド
クラスタメンバーへのデータの送信処理を行います。
自ノードへの送信に関しては、インターフェースへ書き込む事なく、corosyncへ受信fdを介して書き込みし、通知します。
他ノード宛ての送信に関しては、link_modeに従がってデータをインターフェースへ書き込みます。
3. recv_from_links_threadスレッド
クラスタメンバーからのデータの受信処理を行います。
heartbeatスレッドからのPINGパケットの受信と応答、pmtudスレッドからのPMTUデータの受信と応答も行います。
send_to_links_threadスレッドの説明にも書いていますが、自ノード宛ての送信は受信スレッドが処理することはありません。
4. dst_link_handlerスレッド
自ノード以外のクラスタメンバーのリンク状態の管理・更新を行います。
5. pmtud_linkスレッド
PMTU処理を行ないます。