サーバ/インフラを支える技術を読んだ
最近技術書からのインプットが不足している気がするので、毎週本を呼んで少しでも覚えたことをまとめておこうという試みです。全部読み切れなくても、一旦アウトプットします。
[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
- 作者: 安井真伸,横川和哉,ひろせまさあき,伊藤直也,田中慎司,勝見祐己
- 出版社/メーカー: 技術評論社
- 発売日: 2008/08/07
- メディア: 単行本(ソフトカバー)
- 購入: 133人 クリック: 2,270回
- この商品を含むブログ (289件) を見る
どんな本?
インフラの設計を全体的に学べる本です。最近の本ではないですが、基本的な考え方を押さえる意味でも読む価値はあると思います。実際の設定なども出てくるので、環境作って試しながらやるとより理解が進むかもしれません。
目次
1章 サーバ/インフラ構築入門 ……冗長化/負荷分散の基本 1.1 冗長化の基本 1.2 Webサーバを冗長化する ……DNSラウンドロビン 1.3 Webサーバを冗長化する ……IPVSでロードバランサ 1.4 ルータやロードバランサの冗長化 2章 ワンランク上のサーバ/インフラの構築 ……冗長化、負荷分散、高性能の追求 2.1 リバースプロキシの導入 ……Apacheモジュール 2.2 キャッシュサーバの導入 ……Squid、memcached 2.3 MySQLのレプリケーション ……障害から短時間で復旧する 2.4 MySQLのスレーブ+内部ロードバランサの活用例 2.5 高速で軽量なストレージサーバの選択 3章 止まらないインフラを目指すさらなる工夫 ……DNSサーバ、ストレージサーバ、ネットワーク 3.1 DNSサーバの冗長化 3.2 ストレージサーバの冗長化 ……DRBDでミラーリング 3.3 ネットワークの冗長化 ……Bondingドライバ、RSTP 3.4 VLANの導入 ……ネットワークを柔軟にする 4章 性能向上、チューニング ……Linux単一ホスト、Apache、MySQL 4.1 Linux単一ホストの負荷を見極める 4.2 Apacheのチューニング 4.3 MySQLのチューニングのツボ 5章 省力運用 ……安定したサービスへ向けて 5.1 サービスの稼働監視 ……Nagios 5.2 サーバリソースのモニタリング ……Ganglia 5.3 サーバ管理の効率化 ……Puppet 5.4 デーモンの稼働管理 ……daemontools 5.5 ネットワークブートの活用 ……PXE、initramfs 5.6 リモートメンテナンス ……メンテナンス回線、シリアルコンソール、IPMI 5.7 Webサーバのログの扱い ……syslog、syslog-ng、cron、rotatelogs 6章 あのサービスの舞台裏 ……自律的なインフラへ、ダイナミックなシステムへ 6.1 はてなのなかみ 6.2 DSASのなかみ Appendix mymemcheck(4.3節) apache-status(5.2節) ganglia.patch(5.2節)
学んだこと
keepalivedで負荷分散出来たり、DSRという技術もあったなといろいろ学びが多い本でした。あとはkeep-aliveについて。keep-aliveを使うとセッションを維持してしまって、Webサーバにコストがかかる。そこで、リバースプロキシをかませて、クライアントーリバースプロキシ間でkeep-aliveをオンにしてその後ろではオフにすることで、全体のスループットが向上できるという話など。サーバの構成を考える際に有用な本だなと思いました。一番興味深かったLinux性能の話についてまとめておきます。
Linuxの性能について
この本の中でもサーバの負荷の話が面白かったので、まとめておきます。
負荷とは?
- CPU負荷とI/O負荷に区分される。WebサーバならCPU、DBサーバならI/Oに依存することが多い。
LAとは
- ロードアベレージとは、左から順に1分、5分、15分の間に単位時間辺りに待ったタスクの数
load averages: 2.60 2.29 2.62
状態 | 説明 | LAの集計対象 |
---|---|---|
TASK_RUNNING | 実行待ち状態 | ◯ |
TASK_INTERRUPTIBLE | 割り込み可能な待ち状態 | ✕ |
TASK_UNINTERRUPTIBLE | 割り込み不可な待ち状態 | ◯ |
TASK_STOPPED | 実行中断になった状態 | ✕ |
TASK_ZOMBIE | ゾンビ状態 | ✕ |
上記の中でLAの対象になるのは表の通り。CPUを使いたいけど使えない状態とディスクの入出力待ちなどの短時間で終了するような中断状態であるとき。(CPU待ちとディスクI/O待ちと言ってしまってよい)
ハードウェアには一定周期でCPUに割り込み信号を送っており、この割り込み毎にLAの計算をしている。その結果が
uptime
コマンドなどにより表示される。
CPU使用率とI/O待ち率
- CPUにはユーザモードとシステムモードがあり、ユーザモードは、ユーザプログラムが動作するモード、システムモードは、カーネルが動作する際のCPUモードである。CPU使用率が高いといった場合は主にユーザモードの値が高くなる。
sar -P
でコア毎にCPU利用率がわかる。
スレッドとプロセス
- スレッドはプロセスよりも細かな実行単位。プロセスの中で複数のスレッドを動作させることができる。
- プロセスを複数生成して実行コンテキストを複数確保(マルチプロセス)
- スレッドを複数生成して実行コンテキストを複数確保(マルチスレッド)
- 2つの違いは、マルチプロセスはメモリ空間をそれぞれ個別に持ち、一方マルチスレッドはメモリ空間を共有する。メモリ使用の効率やメモリ空間の切り替えをしない分、大量の実行コンテキストを必要とする場合は後者がよい。
性能を判断するための指標
ps プロセスが持つ情報を出力
ps -u CPU使用率を見る
- user:ユーザモードでCPUが消費した割合
- nice:スケジューリングの優先度を変更していたプロセスがユーザモードでCPUを消費した割合
- system:システムモードでCPUが消費された割合
- iowait:ディスクI/O待のためにアイドル状態で消費した割合
- steal:OSの仮想化などで他のVMにCPUを使われ待たされた割合
- idle :アイドル状態で消費した割合(I/O待ちでない)
sar q LAを見る
sar -r メモリの利用状況を見る
- kbmemfree:物理メモリの空き容量
- kbmemuserd:使用中の物理メモリ量
- memused:物理メモリ使用率
- kbbuffers:カーネル内のバッファとして使用されている物理メモリ
- kbcached:カーネル内でキャッシュメモリとして使用されている
- kbswpfree:スワップ領域の空き容量
- kbswpued:使用中のスワップ量
- kbcahcedはページキャッシュされると増えていく。ページキャッシュの有無によって、io性能は大きく変わるので注意
sar -w スワップ発生状況を見る
- スワップが発生すると大幅に性能が劣化する
vmstat 仮想メモリの関連情報を見る
- bi:ブロックデバイスから受け取ったブロック(ディスクのREAD)
- bo:ブロックデバイスから送られたブロック(ディスクへのWRITE)
- どの程度I/Oが発生したかみたいときに使う。
参考
Linux - システムの負荷の原因を切り分ける方法 - Qiita server - アプリエンジニア向け:「サーバがなんか重い」時にすること - Qiita
オライリーのセールで買ってしまいました。2年くらいで読めるかな…
- 作者: Daniel P. Bovet,Marco Cesati,高橋浩和,杉田由美子,清水正明,高杉昌督,平松雅巳,安井隆宏
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/02/26
- メディア: 大型本
- 購入: 9人 クリック: 269回
- この商品を含むブログ (70件) を見る
安西先生…もっと…パフォーマンスチューニングしたいです…