LoginSignup
2
2

More than 5 years have passed since last update.

libknet(kronosnet)について

Last updated at Posted at 2019-01-16

準備中

確認したバージョン

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を指定しない場合には、複数インターフェースは利用出来ません。
corosync_libknet.png

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処理を行ないます。

6. sctp_listen_threadスレッド

7. sctp_connect_threadスレッド

詳細

その他

関連リンク

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2