
t0mmy
学習履歴詳細
サーバ/インフラを支える技術
やったこと
サーバ/インフラを支える技術 ~85p
学んだこと
##冗長化のステップ
- 障害を想定する
- 障害に備えて予備の機材を準備する
- 障害発生時、予備の機材に切り替える運用体制を整備する
予備系への切り替え
■前提
主系と予備系は、常に同じ設定であること。
■ホットスタンバイ
データを蓄積する、設定変更(特にソフトウェアアップデート)を頻繁に行う機器は、ホットスタンバイが良い。
■コールドスタンバイ
データを蓄積せず、設定変更がほぼない機器は、コールドスタンバイも選択肢に入る。
ルーターやスイッチなど
VIP
仮想的なIPアドレス。
引継ぎ可能であり、実IPアドレスに左右されないため、I/Fのように機能する。
ヘルスチェックの考え方
「何を確認したいか」を明確化することが重要。
Webサーバのヘルスチェック
確認したいこと : サーバの応答が正常であること
確認方法 : サービス監視(L7)
ルーターのヘルスチェック
確認したいこと : ルーターがパケットを正常に転送すること
確認方法 : 公開Webサーバあての ping(ルーター宛てだと、パケットを転送しない)
DNS ラウンドロビンについて
負荷分散の仕組みであって、冗長化の仕組みではない。
負荷分散の仕組みと冗長化の仕組みは、分けて考えること。
いまやLBは、専用アプライアンスではなく、Linux上で動作するOSSとして利用できる。
リバースプロキシ
CDN的な役割
リバースプロキシに、静的コンテンツを配布するCDNのような役割を持たせる。
静的コンテンツの配布はリバースプロキシ、動的コンテンツの配布はAPサーバ、と役割を分けることで、APサーバのリソース効率を向上させることができる。
Apacheの場合、 RewriteRule
にて設定する(正規表現使用可能)。
Keep Alive 対応リソースの節約
前提として、プロセス/スレッドのメモリ消費量は次の通りと仮定する。
- リバースプロキシ < APサーバ
クライアントとリバースプロキシ間は Keep AliveをONにする。
リバースプロキシとAPサーバ間は Keep Alive を OFFにする。
これにより、Keep Alive によるリソース消費を顕現できる。
総じて、リバースプロキシの導入により、システムの柔軟性が向上する。
Apacheの設定
- ServerLimit : 生成できるプロセスの最大値
- ThreadLimit : 生成できるスレッドの最大値
- MaxClient : ServerLimit * ThreadLimit
- ThreadPerChild : 1子プロセスあたりのスレッド数。だいたいThreadLimit。
- ServerLimitとThreadLimitは、Apacheが確保するメモリ量に影響を与える。
- MaxClientとThreadPerChildは、Apacheが確保したメモリ量内で、生成可能な最大値
プロセス/スレッド数設定のヒント
プロセス/スレッド数が上限に達した時、スワップが発生しない程度の値が良い。
リバースプロキシ設定例
- 特定ホストからのリクエストをブロック
- ロボットからのリクエストは、キャッシュサーバへ
- 静的コンテンツは /hoge/foo/bar/へ
- 動的コンテンツは http:APサーバ へ
など
キャッシュサーバ
Squid
プロキシとしても、キャッシュサーバとしても利用可能なOSS。
静的なコンテンツのキャッシュを得意とする一方、「動的コンテンツをT秒キャッシュする」といった柔軟な設定も可能。
ユーザごとに内容が変化するページでは、キャッシュは困難(機微な情報の流出につながる)
memcached
キャッシュソリューション。
プログラムからアクセスする。
memcachedを別サーバに立てて、ネットワーク越しにアクセスする、といった使い方が可能。
MySQL
バイナリログとリレーログ
マスタにはバイナリログ、スレーブにはリレーログ(任意でバイナリログも出力可能)が記録される。
バイナリログは、更新系のクエリを、バイナリ形式で記録する。
リレーログは、マスタから送られてきた更新系クエリを一時的に記録する。
(更新系クエリをスレーブへ反映し終えた後で、該当クエリを削除すると思われる)
ポジション情報
スレーブが保持する、以下の情報の総称
- マスタのホスト名
- ログファイル名
- ログファイル中の処理したポイント
show slave status
文で確認できる。
以下がそろっていれば、最新のマスタに追従するスレーブを作成できる。
- ある時点におけるマスタのフルダンプ
- ポジション情報
- マスタのバイナリログ
2022年05月04日(水)
3.0時間