以下メモ
1. サーバ/インフラ構築入門 - 冗長化/負荷分散の基本
IPVSで負荷分散
ipvsadm
- IPVSのコマンドラインツール
keepalived
- C言語で記述されたデーモン
keepalivedでのロードバランス
- 分散先のサーバのデフォルトゲートウェイの設定値をkeepalivedが動作しているローカルIPにする
NAT構成とDSR構成
AppサーバがグローバルIPを叩ける状態にないとDSR構成は使用できない
AppのループバックアドレスをLBに設定すると楽にDSR方式使える(LB通ってClientに戻る?)
(ループバックアドレスにLBを指定する)
- 同じサブネット内で負荷分散する場合にはNAT方式が使えない
- AppからのパケットをLBが受け取ることができず直接送信元に行ってしまう
NAT Client -> LB -> App Client <- LB <- App DSR Client -> LB -> App Client <------- App
VRRPでロードバランサーの冗長化
マスタがダウンした場合にはプライオリティが高いものがマスタに昇格
プリエンプティブモード
- マスタよりもプライオリティが高いバックアップがある場合
- マスタがダウンしていなくてもプライオリティが高い方がマスタに昇格するモード
2. ワンランク上のサーバ/インフラの構築 - 冗長化、負荷分散、高性能の追求
MySQLはシングルマスタ、マルチスレーブ
3. 止まらないインフラを目指すさらなる工夫 - DNSサーバ,ストレージサーバ,ネットワーク
レゾルバライブラリ
/etc/resolv.conf
- ネームサーバを3つまで設定できる
- タイムアウトした場合には次のネームサーバへの通信を試みる
- タイムアウトはデフォルトだと5秒
DRDB
マスタに問題が発生してもフェイルオーバーはしないためkeepalivedをかませる
- マスタ側
- nfs-kernel-server stop
- アンマウント
- セカンダリに変更
- セカンダリ
- プライマリに変更
- マウント
- nfs-kernel-server start
4. 性能向上、チューニング - Linux単一ホスト,Apache,MySQL
top,sar,vmstatコマンドでボトルネックを確認する(CPU,I/O)
psコマンドのSTAT列を見る
man ps
プロセスの状態コード
s, stat, state 出力指定子 (ヘッダ "STAT" または "S") がプロセス状態の説明のために表示する値を以下に示す。
D 割り込み不可能なスリープ状態 (通常 IO 中)
R 実行中または実行可能状態 (実行キューにある)
S 割り込み可能なスリープ状態 (イベントの完了を待っている)
T ジョブ制御シグナルまたはトレースされているために停止中の状態
W ページング状態 (2.6.xx カーネルからは無効)
X 死んだ状態 (見えるべきではない)
Z 終了したが、親プロセスによって回収されなかった、消滅した (ゾンビ) プロセスBSD 形式で stat キーワードが用いられたときは、以下の添付文字が表示されることがある。
< 優先度の高いプロセス (他のユーザーに対して良くない)
N 優先度の低いプロセス (他のユーザーに対して良い)
L 実メモリのページをロックして利用している (リアルタイム処理やカスタム IO 向け)
s セッションリーダ
l マルチスレッド化されている (NPTL pthreads が行うように、CLONE_THREAD が使われている)
+ フォアグラウンドのプロセスグループに含まれている
sarコマンド
- %user
- アプリケーション等
- %system
- カーネル動作
- %iowait
- I/O待率
複数コアのCPUの場合はsar -P ALLで全部のコアの負荷を見てみる
Apacheチューニング
MPM(Multi Processing Module)
- コンパイル時に決定される。変更には再コンパイルが必要
- サードパーティ製モジュールはprefork前提で作られているものがある
prefork(大体デフォルトはこっち)
- マルチプロセス
- 1クライアントに対し1プロセスを割り当て
worker
- マルチプロセス+マルチスレッド
- 1クライアントに対し1スレッドを割り当て
5. 省力運用 - 安定したサービスへ向けて
ログを集約syslog,syslog-ng