読者です 読者をやめる 読者になる 読者になる

サーバ/インフラを支える技術読了

Book

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

以下メモ

1. サーバ/インフラ構築入門 - 冗長化/負荷分散の基本

IPVSで負荷分散

ipvsadm

keepalived

  • C言語で記述されたデーモン

keepalivedでのロードバランス

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