冗長化の基本のメモ

Qiita初投稿です｡
自らのインプットのために"サーバ/インフラを支える技術"を読み､ある程度まとめてみました。

今回は第一章の"冗長化の基本"をメモしました｡
なかなかざっくりなのでわかりにくかったらすみません｡

## 用語
#####冗長化(Redundancy)
障害が発生しても予備機材でシステムの機能を継続させるようにすること｡

#####コールドスタンバイ(Cold Standby)
予備機は普段可動せず現用機が故障したら予備機を接続する運用体制｡

#####ホットスタンバイ(Hot Standby)
両方のサーバを常に可動させておき､常に同じ状態に保っておく運用体制｡

#####フェイルオーバ(Failover)
現用機に障害が発生した際に､自動的に処理を予備機に引き継ぐこと｡

#####VIP(Virtual IP Address)
仮想IPアドレス

#####ヘルスチェック(Health Check)
正常にフェイルオーバするために現用機で障害が発生していることを検出する仕組み｡

#####ICMP(Internet Control Message Protocol)
異常発生時に､エラーとエラー情報を通知｡

##冗長化の本質

####1.障害を想定する
冗長化の第一歩は障害を想定すること、まずは以下の図のようなシンプルな構成で考えてみます｡
以下の図にて想定される障害は

- ルータが故障してサービスが停止
- サーバが故障してサービスが停止

どちらが故障してもサービスが停止してしまいます｡
<img width="287" alt="名称未設定_pages.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416433/c118b76c-ae32-1442-48ca-04dbc35ad84b.jpeg">

####2.障害に備えて予備の機材を準備する
次に､故障に備えて予備機を準備してみます｡
ここでは予備機たちはネットワーク接続していません｡

<img width="299" alt="名称未設定_pages-2.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416433/77321737-a591-c652-d57e-8eccce477f56.jpeg">

####3.障害が発生した際に呼びの機材に切り替えられる運用体制を整備する
ここでは様々な構成や対応を考えていきます｡

#####ルータが故障した場合の対応
- コールドスタンバイ

ここで注意しなければならないのは､現用機と予備機の設定を同じにするという点｡

<img width="296" alt="インフラを支える技術_pagesのコピー.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416433/616d96e4-be99-1158-8e65-e2ddc8fe67f1.jpeg">


#####Webサーバが故障した場合の対応

- ホットスタンバイ

コールドスタンバイと比較して､Webサーバの予備機が常に電源がはいっているため､即座に切り替えが可能｡

<img width="282" alt="インフラを支える技術_pages.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416433/f32bb260-38b0-b432-418b-74ea4a62bde6.jpeg">

現用機の更新の際は予備機も同じ更新がかかります｡

<img width="311" alt="インフラを支える技術_pages-2.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416433/ec6dff76-fe66-3b10-c7b1-b33ed8832b86.jpeg">


#####IPアドレスの引き継ぎ
サーバをフェイルオーバするには"VIP"と"IPアドレスの引き継ぎ"を行います｡

現用機に障害が発生した際には予備機がVIPを引き継ぎます｡
これにより利用者は予備機であるWeb2へアクセスするようになります｡
<img width="371" alt="インフラを支える技術_pages-3.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416433/4598fd12-c6d9-fb98-5976-4bb4a0716c68.jpeg">

<img width="379" alt="インフラを支える技術_pages-4.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416433/b3725e40-8705-57f6-b48a-cbb8dde4e83d.jpeg">

##障害を検出する
正常にフェイルオーバするためには現用機で障害が発生していることを検出する仕組みが必要で､ヘルスチェックといいます｡
ヘルスチェックには様々な種類があります｡

#####ICMP監視(レイヤ3)
ネットワーク上の場所を特定するネットワークまたは IP アドレスを使用します。ネットワークアドレスは場所を特定し、物理アドレスはデバイスを特定します。場所は、LAN ワークステーション、コンピュータのメモリ内、またはネットワークを通じて移動するデータのパケットのこともあります。
#####ポート監視(レイヤ4)
どのアプリケーションプロトコル （HTTP、SNTP、FTPなど）が各パケットに含まれているかを識別し、適切な上位層のソフトウェアにパケットを引き渡すために、その情報を使用します。レイヤ4スイッチは、MAC アドレスおよび IP アドレスだけではなく、パケットが属するアプリケーションに基づいてパケットの送信決定を行います。
#####サービス監視(レイヤ7)
実際にHTTPリクエストなどを発行し､正常な応答が帰ってくるかをチェックする｡
ほとんどの異常を検知可能だが､場合によってはサーバに負荷を掛けてしまうこともある



<h2>要点</h2>
- システムは、障害がいつ起こってもいいように設計しなければならない
- そのためには、ルータ、ロードバランサ、サーバ、全てを冗長化する必要がある
- 冗長化した際に大切なことは、
 - 障害の検出（ヘルスチェック）
 - スムーズな切り替え（IPアドレスの引き継ぎ）


<h2>参考</h2>
- [[24時間365日] サーバ/インフラを支える技術 ‾スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)](https://www.amazon.co.jp/dp/4774135666/ref=cm_sw_em_r_mt_dp_U_NjL2Cb4RXQV1R)
- [レイヤ２・レイヤ３・レイヤ４ スイッチ](https://www.blackbox.co.jp/ja-jp/page/26204/Information/Technical-Resources/Black-Box/LAN/layer-2-3-and-4-switching)

以上になります｡結構ざっくりとしたまとめですみません笑