でのLinuxの実稼働環境での推奨設定

実稼働環境のための推奨事項。

実稼働環境のための推奨事項です。実装に合わせて調整してください。

SSDの最適化 

Linuxディストリビューションの大半は、デフォルトではSSDが最適に構成されていません。以下の手順でSSDのベスト・プラクティスな設定を確認します。

  1. 回転フラグがfalse(ゼロ)に設定されていることを確認します。

    この設定によって、オペレーティング・システムによるあらゆる検知がオーバーライドされてドライブがSSDと見なされます。

  2. SSDストレージから作成されたすべてのブロック・デバイス(mdarraysなど)で繰り返します。
  3. IOスケジューラーをdeadlineまたはnoopに設定します。
    • 対象となるブロック・デバイスがIOの最適化を実行する高度なIOコントローラーよりも下位のSSDアレイである場合は、noopスケジューラーが適切な選択肢です。
    • deadlineスケジューラーはIOレイテンシーを最小化する要求を最適化します。確信が得られない場合はdeadlineスケジューラーを使用します。
  4. ブロック・デバイスの先読み値を8KBに設定します。

    この設定によって余分なバイトを読み込まないようにオペレーティング・システムに通知が行われ、IO時間が増加して、ユーザーが要求しなかったバイトによってキャッシュが汚染される可能性があります。

たとえば、SSDが/etc/rc.local/dev/sdaである場合:

echo deadline > /sys/block/sda/queue/scheduler #OR...#echo noop > /sys/block/sda/queue/scheduler echo 0 > /sys/class/block/sda/queue/rotational echo 8 > /sys/class/block/sda/queue/read_ahead_kb

NUMAシステムでzone_reclaim_modeを無効にする 

Linuxカーネルは、zone_reclaim_modeの有効化/無効化が一貫していないことがあります。この結果、パフォーマンスに予期しない問題が生じることがあります。.
zone_reclaim_modeを確実に無効にするには以下のようにします。
echo 0 > /proc/sys/vm/zone_reclaim_mode

詳細については、「NUMAシステムにおけるLinuxカーネル独特のパフォーマンスの問題」を参照してください。

ユーザー・リソースの制限 

ulimit -aコマンドを使用すると、現在の制限値を表示できます。このコマンドを使用して一時的に制限値を設定することもできますが、以下のように変更を永続化することを推奨します。

パッケージ・インストール:/etc/security/limits.d/cassandra.confファイルに以下の設定が含まれていることを確認してください。
<cassandra_user> - memlock unlimited <cassandra_user> - nofile 100000 <cassandra_user> - nproc 32768 <cassandra_user> - as unlimited
tarボール・インストール:/etc/security/limits.confファイルに以下の設定が含まれていることを確認してください。
<cassandra_user> - memlock unlimited <cassandra_user> - nofile 100000 <cassandra_user> - nproc 32768 <cassandra_user> - as unlimited
rootとしてCassandraを実行する場合は、UbuntuなどのLinuxディストリビューションでは、次の設定を使用せずに、rootの制限を明示的に設定する必要があります。
<cassandra_user>:root - memlock unlimited root - nofile 100000 root - nproc 32768 root - as unlimited 
CentOS、RHEL、OELシステムの場合は、/etc/security/limits.d/90-nproc.confnproc制限も以下のように設定してください。
<cassandra_user> - nproc 32768
すべてのインストールで、以下の行を/etc/sysctl.confに追加してください。
vm.max_map_count = 131072
変更内容を有効にするには、サーバーを再起動するか、以下のコマンドを実行します。
sudo sysctl -p
Cassandraプロセスに制限が適用されたかどうかを確認するには、以下のコマンドを実行します。ここで、pidはCassandraを現在実行中のプロセスのIDです。
cat /proc/<pid>/limits

詳細は、「Insufficient user resource limits errors」を参照してください。

スワップの無効化 

スワップは完全に無効にしてください。そうしないと、パフォーマンスが大幅に低下する可能性があります。 Cassandraには、複数のレプリカと透過的なフェイルオーバー機能が備わっているため、メモリー不足になったときはレプリカをスワップするよりもすぐに強制終了した方が望ましいとされています。こうすると、スワップのためにレイテンシーが高くなっているレプリカを引き続き使用するのではなく、機能しているレプリカにすぐにトラフィックをリダイレクトすることができます。システムのDRAMが多くても、OSはディスクのキャッシングに使用可能なDRAMを増やすために実行可能なコードをスワップアウトするため、やはりスワップによってパフォーマンスが大幅に低下します。

それでもスワップを使用する場合は、vm.swappiness=1を設定します。こうすると、カーネルは、最も使われていない部分をスワップアウトします。

sudo swapoff --all

この変更を永続化するために、すべてのスワップ・ファイル・エントリーを/etc/fstabから削除します。

詳細は、「Nodes seem to freeze after some period of time」を参照してください。

クロックの同期化 

すべてのノードのクロックを同期させる必要があります。NTP(Network Time Protocol)または他の方法を使用できます。

カラムが上書きされるのは、既存のカラムよりも、新しいカラムのタイムスタンプの方が新しい場合だけであるため、クロックの同期は必須です。

RAID向けの最適なblockdev --setra設定 

通常、特にAmazon EC2 RAID0デバイスでは128の先読みを推奨しています。

setraが65536に設定されていないことを確認します。

sudo blockdev --report /dev/<device>

setraを設定するには:

sudo blockdev --setra 128 /dev/<device>

Java仮想マシン 

Oracle Java Platform, Standard Edition 8(JDK)またはOpenJDK 7の最新の64ビット・バージョン。