なんちゃってアイ○ンポート2
Postfixネタが多い今日このごろ…
っというわけで、現在仕事でPostfix使ってメルマガ配信周りのチューニングを(まだ)やっているわけですが、ボトルネックとなりうる箇所をすっこりして極力速く送信できるようにいろいろいじってみました。
以前やった設定をふまえつつ、
1.メールログ出力とキューイングをRAMディスク上で処理させる
これはtmpfsという特殊なファイルシステムを使って実現。
mountコマンド使わずに/etc/fstabに下記設定を追加しました。
/dev/shm /ram tmpfs defaults 0 0
/ram/をtmpfsでマウントしてます。
RAM(メモリ)領域にディレクトリをマウントして普通のファイルのごとく操作できるようになります。速度はメモリなので速い速い。
気をつけないといけないのはメモリ領域には限りがあるということ。
今動かしてるサーバーは3GB積んでるので1.5GBくらい確保してみた(っというか確保されてた)。
あと、サーバー落ちたりして再起動するとRAM領域は当然のことながら、すっからかんになりますので、定期的なHDDへのバックアップが必要になりますね。
2.syslogをやめてsyslog-ngを導入してみる
syslogはどうも遅い(っと言われていたり)、安全面でもいろいろ言われているところもあったりで、syslog-ngを入れてみようと思った次第。
http:/d.hatena.ne.jp/ragtarou/20080505
を参考にしつつRPMでさくっとインストールしまして、
# vi /etc/syslog-ng/syslog-ng.conf destination d_mail { file("/ram/postfix_log.$YEAR$MONTH$DAY$HOUR\0000" sync(0) perm(0644)); };
こんな感じで設定変更し、
syslog止めて、syslog-ngを起動。
3.ちょこっとPostfixチューニング
master.cfとtransportファイルに宛て先ドメインごとの配信制御設定を追加。
# vi /etc/postfix/transport
〜 docomo.ne.jp docomo-smtp:n .docomo.ne.jp docomo-smtp:n yahoo.co.jp yahoo-smtp:n ybb.ne.jp yahoo-smtp:n 〜 # postmap /etc/postfix/transport # vi /etc/postfix/master.cf 〜 docomo-smtp unix - - n - 1 smtp -o smtp_destination_concurrency_limit=1 -o smtp_destination_recipient_limit=1 yahoo-smtp unix - - n - 10 smtp -o smtp_destination_concurrency_limit=1 -o smtp_destination_recipient_limit=4 〜 # postfix reload
…以上のような感じで設定してみて、いざ配信。
結果は…、2000通/分でした。
まーだ速くなる可能性も残しつつって感じですがひとまず30分で6万通送れりゃ、今のサービスなら十分かなーっと思った次第。
あ、あと、最後に言い忘れてたこと、
4.エラーメールのクリーニング処理
実は、これが一番重要だったりして。
エラーメールが多発するとキャリアのメールサーバブロッキングしちゃいます。
なので、一定時間送れなくなるわけですね。
定期的なクリーニング処理(3回失敗したら削除的な)を施してあげて極力バウンスメールは失くす努力が必要です(できればエラー率5%前後)。
そうすれば、ある程度の規模ならたっかいアプライアンス製品買わなくても何とかOSSでまかなえるはず、っと思った次第。
いや、アプライアンス製品の方がやっぱり素晴らしいんですけどね。