Linuxのネットワーク構成の設定

サーバー・ソケット・バックログ
HAネットワーク・トラフィックの分離
受信パケット・ステアリング

続行する前に、各SNの初期設定時にネットワーク・インタフェース・カードが予定どおりに構成されているかどうか確認することをお薦めします。これは、そのような構成の問題がロード時に発生した場合、問題をデバッグするのが困難になるためです。

各ホスト上の特定のサブネットにアクセスするために使用されているネットワーク・インタフェースを判断するには、次のコマンドを使用します。このコマンドは、特に複数のNICを持つマシンに役立ちます。

$ ip addr ls to 192.168/16
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
    state UP qlen 1000
    inet 192.168.1.19/24 brd 192.168.1.255 scope global eth0 

NICの構成に関する情報を取得するには、次のコマンドを使用します。

$ ethtool -i eth2
driver: enic
version: 2.1.1.13
firmware-version: 2.0(2g)
bus-info: 0000:0b:00.0 

NICハードウェアに関する情報を取得するには、次のコマンドを使用します。

$ lspci -v | grep "Ethernet controller"
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit 
Ethernet Controller (rev 02) 

ネットワーク速度に関する情報を取得するには、次のコマンドを使用します。このコマンドはsudoを必要とすることに注意してください。

$ sudo ethtool eth0 | grep Speed
    Speed: 1000Mb/s 

大規模なクラスタのパフォーマンスを改善するために、10GBのイーサネットまたは他の高速なネットワーク実装の使用を検討することもできます。

サーバー・ソケット・バックログ

デフォルトの一般的な最大サーバー・ソケット・バックログ(通常は128に設定)は、サーバー・スタイルのロードには小さすぎます。サーバー・アプリケーションの場合は少なくとも1K、大規模なストアの場合は10Kでも不適切ではありません。

この値を変更するには、sysctl.confnet.core.somaxconnプロパティを設定します。

HAネットワーク・トラフィックの分離

マシンに複数のネットワーク・インタフェースがある場合、一方のインタフェースでHAレプリケーション・トラフィックを分離し、クライアント要求トラフィックは別のインタフェースを使用するようにOracle NoSQL Databaseを構成できます。次の例のように、HAで使用されるインタフェースを指定するには、makebootconfigコマンドに対して-hahostパラメータを使用します。

java -Xmx256m -Xms256m \
-jar kvstore.jar makebootconfig -root /disk1/kvroot \
-host sn10.example.com -port 5000 -harange 5010,5020 \
-storagedir /disk2/kv -hahost sn10-ha.example.com

この例では、すべてのクライアント要求がsn10.example.comに関連付けられたインタフェースを使用し、HAトラフィックはsn10-ha.example.comに関連付けられたインタフェースを使用します。

受信パケット・ステアリング

単一のキュー・ネットワーク・デバイスを持つマシンに複数のRNがある場合、受信パケット・ステアリング(RPS)では、複数のコア間のパケット処理(ソフト割込み処理)に関連付けられたCPU負荷を分散することでパフォーマンスを改善できます。複数キューのNICではこのようなサポートが直接用意されているため、RPSを有効にする必要はありません。

このチューニングに関する注意事項は、Oracle Big Data Applianceを使用するお客様に特に適しています。

次のコマンドを使用して、NICが複数キューかどうかを判断できます。

sudo ethtool -S eth0

複数キューのNICには次のようなエントリがあります。

 rx_queue_0_packets: 271623830
     rx_queue_0_bytes: 186279293607
     rx_queue_0_drops: 0
     rx_queue_0_csum_err: 0
     rx_queue_0_alloc_failed: 0
     rx_queue_1_packets: 273350226
     rx_queue_1_bytes: 188068352235
     rx_queue_1_drops: 0
     rx_queue_1_csum_err: 0
     rx_queue_1_alloc_failed: 0
     rx_queue_2_packets: 411500226
     rx_queue_2_bytes: 206830029846
     rx_queue_2_drops: 0
     rx_queue_2_csum_err: 0
     rx_queue_2_alloc_failed: 0
... 

Infinibandを使用する32コアBig Data Applianceの場合、次の構成を使用して、すべての32コア間で受信パケット処理を分散します。

echo ffffffff > /sys/class/net/eth0/queues/rx-0/rps_cpus

ffffffffは、すべての32コアを選択するビット・マスクです。

RPSの詳細は、次を参照してください。