
t0mmy
学習履歴詳細
サーバ/インフラを支える技術
やったこと
サーバ/インフラを支える技術 3章 4章途中まで
学んだこと
MySQL スレーブの活用
スレーブを活用して、READ処理を負荷分散する。
- マスタ : Update Insert Delete
- スレーブ : Select
内部LBを構築して、Selectクエリを複数のスレーブで負荷分散する。
ストレージサーバ
アプリケーションで使用するファイルを保存したストレージ。
以下の手段がある。
nfs
でマウントする- ストレージをWebサーバとして構築し、httpでアクセスする
現在だと、自前でストレージサーバを構築するより、S3などのクラウドストレージが有力だと思う。
DNSサーバの冗長化
DNSサーバ障害の対策は、大きく二つ。
resolve.conf
に、二つ以上のDNSサーバを指定する- DNS問い合わせでタイムアウトが発生すると、二つ目以降のDNSサーバへ問い合わせる
- クライアント側はこれでOK
- サーバ側は、「タイムアウト」による性能低下が問題にある
- DNSサーバを冗長構成化する
DNSサーバの障害は、滅多に発生しない。
しかし、いざ発生すると、「DNSサーバが原因だった」と特定するのに、非常に時間と労力がかかる。
万が一に備え、DNSサーバの冗長化(冗長化に加えて、フェイルオーバー時に通知する)など、対策を取っていきたい。
DRBD (Distributed Replicated Block Device)
ストレージサーバの冗長化に使用されるsoftware。
ネットワーク越しのRAID1。
ネットワークの冗長化
Boundingドライバ
複数の物理NICを、一つの論理的なNICにまとめることができるソフトウェア。
サーバとスイッチ間の冗長化に加えて、スイッチの冗長化も実現できる。
物理NICの故障検出にて、以下の二つの方法が用意されている。
- MII (Media Independent Interface) 監視
- 物理NICのリンクダウンを確認する
- リンクダウンを伴わない障害は検出できない
- ARP監視
- ARPリプライが返ってくることを確認する
- ARPを送信する相手は選ぶこと
- 相手がARPリプライを返さないと、誤検知につながる
- 大体こっちを使用する
VLANの導入
サーバファームにおける「柔軟性の高い」とは
以下の条件を満たす状態を指す。
- 新規サーバを容易に追加できる
- サーバが故障した時、すぐに代替機へ移行できる
- あるサーバを別の役割のサーバとして切り替える
VLANを使用することで、上記を達成することができる。
VLAN導入のメリット
- 一台のスイッチで複数のセグメントを管理できる
- 一台のスイッチを、有効活用できる
- 設定により、ポートを流れるデータを制御できる
- サーバ追加/置き換え、故障時の代替機による復旧が、設定変更で完結する
タグVLANとポートVLANは併用可能。
うまく併用して、物理配線、および論理設定をシンプルに保ちたい。
4章 性能向上・チューニング
性能とは・負荷とは
「負荷」と呼ばれるものを具体的に知ること。
「負荷」を知るということは、OSの状態を知るということ。
OSの動きを理解し、各種パラメータを計測し、「負荷」を正しく理解する
- マルチタスクの動作原理を学び、プロセスの状態と負荷の関係を理解する
- I/OがOSによってどのように処理されるかを学び、「ディスクI/Oの分散と軽減作業(キャッシュとか)」を理解する
推測するな、計測せよ
性能を引き出すためには、サーバリソースの利用状況を正確に把握する必要がある。
負荷分散の正解でも、負荷を「推測するな、計測せよ」の精神で、負荷を計測し、適切なチューニングを行う。
Linuxカーネル(OS)から、負荷に関わる多くの情報を得ることができる。
まずはこちらから。
ボトルネックを見極める
1) ロードアベレージを見る
システム全体の負荷状況を示す指標
ここが高ければ、次へ進む
2)CPU、I/Oのいずれがボトルネックかを探る
sar
や vmstat
にて、CPU使用率やI/O待ち率の推移を確認する。
3-1)CPU負荷が高い場合
原因は、次のどちらか
- 他のリソースはボトルネックになっていない、理想的な状態
- プログラムの暴走によって、CPUへ必要以上の負荷がかかっている
3-2)I/O負荷が高い場合
原因の大部分は、次のどちらか。
- プログラムによる大量の入出力
- スワップによるディスクアクセスの発生
負荷とは
大きく次の二つ。
- CPU負荷
- I/O負荷
APサーバは、プログラムを実行するという、CPU負荷に依存する仕事がメイン。
DBサーバは、ディスクに保存しているデータをRead/Writeするという、ディスクのI/O速度に依存する仕事がメイン。
マルチタスクによる負荷分散
タスクが増えると、CPUが空くまで待たされるタスクが増えていく。
この待ち状態は、プログラムの実行遅延という形で現れる。
これらは、 top
の load average
の数字から読み取れる。
load average
は、「処理を実行したくても、実行できなくて待たされているプロセスが、どの程度存在するか」を表す。
具体的には、以下の二つ。
- CPU実行権限が与えられるのを待っているプロセス
- ディスクIOが完了するのを待っているプロセス
load average
の値が高い状況は、タスクの実行に待ち時間が大きいことを表している。
「タスクが待たされるのは、どのような場合か」を知る必要がある。
これを知るには、プロセス(OS)の状態遷移を理解する必要上がる。
プロセス(OS)
「プログラムの命令」と「実行時に必要な情報」を一つにまとめたオブジェクト。
2022年05月05日(木)
3.0時間