woshidan's blog

そんなことよりコードにダイブ。

夏休みにサーバーに関する本を読んでいました

夏休みは下記の本を読んだり、渋谷とシェルドラドに行ってTASを見ていました。

夏休みにサーバ関係の本を読んでいて、全部忘れる前に感想書きたいな、と思いつつ、 感想さらっと書けるほど理解できている自信も無かったのでいまさら、あわてて書き出している始末です。

もう仕方ないから、遺書みたいに残っていたメモに沿ってまとめてお茶を濁そうとしていたのですが、 全く分かっていない状態から1理解したら、目的地は20とか30だよね、みたいな事態になって慌てて読み直す計画立ててます...。

Postfix入門

入門Postfix (My UNIX series (02))

入門Postfix (My UNIX series (02))

少し古い本だし細かい設定は自分で調べてね感がありましたが、メールの設定の少し奥の仕組みみたいなところまで書いてあったのがむしろありがたかったです。

それでも内容把握しきれているわけではないのですが、メールサーバの設定なんて別の世界!から長崎県*1くらいに距離感が縮まった気がします。

はじめに、メール配送の概要の話から始まるのですが、ウェブサーバがおおむねHTTPで動くソフトウェア*2が動いているサーバをさすように、メールサーバってSMTPで動くソフトウェアが動いているサーバのことでいいんですよね?

というところから、質問するレベルでして、

  • メールサーバといってもどうやってメールアドレスから個人に送っているか分かっていなかった
  • 個人に届いた、というのをどう判定しているのかも分からなかった
  • メール用のドメインの部分ってサーバで登録しているのと別な場合どうしてるの?というのも分からなかった

ど素人だったため、1章からありがたかったです。メールの送られ方について下記のように把握しました。

  • まず、自分がインターネットへ接続しているプロバイダ等のメールサーバ*3に「メールを送りたいんです」とエンベロープ*4等がついたメールをおくる
  • そうしたら、自分側のメールサーバがDNSに問い合わせて宛先のメールサーバのIPアドレスを得る
  • 宛先のメールサーバにメールを送る
  • 宛先のメールサーバはメールを受け取ったらユーザ用のメールスプー*5にそのメールファイルを挿入する

ここまでの時点でいい加減にしろ、という曖昧さですが、曖昧でもそれなりにこのへんの事はこのへんのことを言っているのだ、というのが調べられそうになった、というのがありがたかったです*6

記憶が薄れないうちに、あと、後で突っ込んで笑う用に、書いておくんですけど、

  • MTA(Mail Transfer Agent, メールをサーバー間で転送する)がPostfixの仲間
  • MDA(Mail Delivery Agent)はPostfixが転送してきたメールを受け取って、ユーザのメールスプールに入れる
  • MUA(Mail User Agent)がメールをMTAに渡したりMDAから受け取ったメールをサーバから引っ張ってくるためのメーラー

というのもとても感動しながら読んでました。

telnetPostfixに転送するメールの情報を打ち込んでいるとき、本文の所以外で入力しているのがエンベローブで、TOを明示的に指定する時は本文に書くんだよ、というところではやたら興奮して2回やりました(無駄)。

この時点で、この本を読む段階ではないのではないか、感がぷんぷんしてきたのですが、もう少しWeb全体の概論的な本*7を読んでも概論過ぎて使える気がしなかったので、とりあえず最後まで読む事にしました。

他の本もそうなのですが、ある程度用語は頭に入ったぞ感があるうちにもう一回読んだ方がよさそうです。

メールアドレスの書き換え周りの話で、具体的にどうとか分かってないんですが、Postfixのログ読んでて「どこからどこまでがどのメールのログかな??」というところから先輩に質問していたクチなので、この周辺のログが感覚をつかむのにありがたかったです。

あと、IMAP(メールのファイル管理をサーバ側で行うプロトコル)/POP3(メールのファイル管理をクライアント側で行うプロトコル)の区別がついたのと、メールの本文の暗号化って通信路を暗号化するしかないんだ...というのがよく覚えてるところです。

うん、もう一回読んだほうがいいですね()。

24時間365日 サーバ/インフラを支える技術

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

こちらも初版が7年前と割と古い本になります。

まあ、担当しているサービスがちょうどその頃に開始されたもので、利用されているソフトウェアがこの本で紹介されているものに近く、むしろラッキー!感あったのですが。

負荷とは何なのか、サーバを管理するために各種数値を監視するソフトウェアがそれぞれどの目的でどの数値を持っているか、

といった、新人アプリケーションエンジニアからするとよく分からない部分が丁寧に説明してあって、少し安心できた、という感じです。

Postfixで力つきたので、遺言みたいなメモから。

  • 冗長化させるときはVRRPで会話させて落ちたのを検知できるようにしてからだ、というイメージ
    • VRRP = 定期的に監視対象のノードからパケットを受け取って、ネットワーク機器の安否を確認するプロトコル(雑)。ルータやロードバランサで動いてる
  • nagiosやMunin(Ganglia), puppetの説明やサンプルコードが載っていて簡単に雰囲気が眺められてよかった
    • nagios
      • サービスの稼動状態を調べる
      • サービスに使っているサーバが落ちていないか、正常なリクエストを返しているか
      • 稼働率, プロセス数の監視
    • Munin
      • そのときのCPU使用率 / メモリ使用率 / ロードアベレージ / ネットワークトラフィック
      • 要するに ps や top で見られるようなものを、グラフ等にまとめて見れるようにしてくれる
        • 10分に1回など一定間隔でサーバから送信させている値なので瞬時値が見たいといった場合はサーバに入って確認する必要がある
      • Cactiが同じ層のソフト > 子鹿本
    • puppet
      • サーバの設定を管理
  • 静的コンテンツを返すだけなら軽いプロセスでできるので、リバースプロキシでもうやっちゃったり、別のサーバへ分けたり
  • ログのローテートと圧縮の話印象に残った
  • DSR = ダイレクトサーバーリターン
  • ISP = インターネット

子鹿本も読んだのだけれど、「24時間365日 サーバ/インフラを支える技術」の後に読んだらよかったなぁ、という感じでした。

*1:あんまり行ったことは無いからよくわかってないのだけど言葉は通じそうな気がする。別の言葉で言うと、ゆっくりググりながらなら調べられそう

*2:Apache, unicorn, nginx etc.

*3:メーラーとかで自分のアドレスのメールボックスがあるサーバとして設定されている奴

*4:メールの宛先や転送設定、返信先設定等が入っている。はがきを配送先事に袋にまとめた時、その袋みたいな感じだと理解。本文に宛先などを書いた場合と設定が一緒になるものも多い

*5:郵便受けのような何か

*6:あの、この前段階として何をどうしたら良いか分からない途方に暮れる、という段階がありまして...

*7:Webを支える技術

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)