t0mmy

2020年12月30日に参加

学習履歴詳細

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

やったこと

サーバ/インフラを支える技術 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のいずれがボトルネックかを探る

sarvmstat にて、CPU使用率やI/O待ち率の推移を確認する。

3-1)CPU負荷が高い場合

原因は、次のどちらか

  • 他のリソースはボトルネックになっていない、理想的な状態
  • プログラムの暴走によって、CPUへ必要以上の負荷がかかっている

3-2)I/O負荷が高い場合

原因の大部分は、次のどちらか。

  • プログラムによる大量の入出力
  • スワップによるディスクアクセスの発生

負荷とは

大きく次の二つ。

  • CPU負荷
  • I/O負荷

APサーバは、プログラムを実行するという、CPU負荷に依存する仕事がメイン。
DBサーバは、ディスクに保存しているデータをRead/Writeするという、ディスクのI/O速度に依存する仕事がメイン。

マルチタスクによる負荷分散

タスクが増えると、CPUが空くまで待たされるタスクが増えていく。
この待ち状態は、プログラムの実行遅延という形で現れる。
これらは、 topload average の数字から読み取れる。

load average は、「処理を実行したくても、実行できなくて待たされているプロセスが、どの程度存在するか」を表す。
具体的には、以下の二つ。

  • CPU実行権限が与えられるのを待っているプロセス
  • ディスクIOが完了するのを待っているプロセス

load average の値が高い状況は、タスクの実行に待ち時間が大きいことを表している。

「タスクが待たされるのは、どのような場合か」を知る必要がある。
これを知るには、プロセス(OS)の状態遷移を理解する必要上がる。

プロセス(OS)

「プログラムの命令」と「実行時に必要な情報」を一つにまとめたオブジェクト。

Infrastructure

2022年05月05日(木)

3.0時間