でのLinuxの実稼働環境での推奨設定
実稼働環境のための推奨事項。
実稼働環境のための推奨事項です。実装に合わせて調整してください。
SSDの最適化
Linuxディストリビューションの大半は、デフォルトではSSDが最適に構成されていません。以下の手順でSSDのベスト・プラクティスな設定を確認します。
- 回転フラグがfalse(ゼロ)に設定されていることを確認します。
この設定によって、オペレーティング・システムによるあらゆる検知がオーバーライドされてドライブがSSDと見なされます。
- SSDストレージから作成されたすべてのブロック・デバイス(mdarraysなど)で繰り返します。
- IOスケジューラーをdeadlineまたはnoopに設定します。
- 対象となるブロック・デバイスがIOの最適化を実行する高度なIOコントローラーよりも下位のSSDアレイである場合は、noopスケジューラーが適切な選択肢です。
- deadlineスケジューラーはIOレイテンシーを最小化する要求を最適化します。確信が得られない場合はdeadlineスケジューラーを使用します。
- ブロック・デバイスの先読み値を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の有効化/無効化が一貫していないことがあります。この結果、パフォーマンスに予期しない問題が生じることがあります。.echo 0 > /proc/sys/vm/zone_reclaim_mode
詳細については、「NUMAシステムにおけるLinuxカーネル独特のパフォーマンスの問題」を参照してください。
ユーザー・リソースの制限
ulimit -aコマンドを使用すると、現在の制限値を表示できます。このコマンドを使用して一時的に制限値を設定することもできますが、以下のように変更を永続化することを推奨します。
<cassandra_user> - memlock unlimited <cassandra_user> - nofile 100000 <cassandra_user> - nproc 32768 <cassandra_user> - as unlimited
<cassandra_user> - memlock unlimited <cassandra_user> - nofile 100000 <cassandra_user> - nproc 32768 <cassandra_user> - as unlimited
<cassandra_user>:root - memlock unlimited root - nofile 100000 root - nproc 32768 root - as unlimited
<cassandra_user> - nproc 32768
vm.max_map_count = 131072
sudo sysctl -p
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ビット・バージョン。