
第11回 qmailのパフォーマンス・チューニング
鶴長 鎮一
2002/8/20
MySQLによるユーザー認証
次に、ユーザー認証にRDBMSを組み込んでみます。qmailのユーザー認証がそれほどボトルネックを発生しているわけではありません。ただし、大規模なサイトになるとユーザー管理の煩雑さが、メールサーバ運用の足かせになってしまうことは否めません。そこで、/etc/passwdファイルの代わりにデータベースサーバを利用すれば、メールサービスだけでなくほかのさまざまなサービスともユーザー情報を共有できるようになり、ユーザーの登録や利用の一時停止といった作業を簡略化できます。
以前にvpopmailというツールを紹介しました(第6回 バーチャルドメインにおけるqmailの運用)。さらに、vpopmailはRDBMSであるMySQLサーバをユーザー認証のバックエンドに利用できることも紹介しました(第7回 GUI管理ツールの導入とユーザー情報のSQL化)。vpopmailを紹介した際はバーチャルドメインを実現させることが前提でしたが、実はMySQLを組み込むことでスケーラビリティを兼ね備えさせることも可能となっていたのです。今回は、アドインツールのような大げさな実装をするまでもなく、qmailにパッチを当てるだけで実現する方法を紹介します。
ここで紹介するのは、MySQLのサポートや関連ツールの開発で定評のあるソフトエージェンシー(http://www.softagency.co.jp/)の拡張パッチです。qmailに対するパッチとcheckpasswordに対するパッチが提供されています。checkpasswordは、qmail-pop3d自体に認証を行う機能がないため、それを補うものです(第2回 POP/IMAPサーバの構築と不正中継対策)。これらのパッチを当てることで、次のことが実現します。
- ユーザー認証をMySQLで行える(MySQLを先にするか/etc/passwdを先にするか選択可能)
- ユーザーの有効期限を設定でき、一時的なサービス停止もセット可能
- Maildir/に保存される全メールの合計サイズをduコマンドで確認し、制限する
- APOP対応
- 仮想ドメインを実装
- locals、rcpthostsに仮想ドメインを自動的に追加可能
では、パッチファイルに含まれるREADME.mysql.enを参考にインストール手順を見ていきましょう。
■qmailの再インストール
http://www.softagency.co.jp/mysql/qmail.htmlから最新版パッチをダウンロードし、作業ディレクトリで展開します。その後qmailにパッチを当て、すでにインストールされているqmailに上書きインストールします。
# gzip -d qmail-1.03-mysql-0.7.4.patch.gz |
■checkpasswordの再インストール
qmailの再インストールと同じように、http://www.softagency.co.jp/mysql/qmail.htmlから最新版パッチをダウンロードし、作業ディレクトリで展開します。その後 パッチを当てて上書きインストールを実行します。
# gzip -d checkpassword-0.90-mysql-0.7.3.patch.gz |
前回checkpasswordを/usr/local/binにインストールした場合は、今回も同じようにインストールする必要があります。conf-homeファイルを次のように書き換えます。
/usr/local |
変更後、上書きインストールを続けます。
# make |
■設定ファイルの準備
qmailの設定やcheckpasswordの使用方法は第1回 qmailによるSMTPサーバの構築および第2回 POP/IMAPサーバの構築と不正中継対策と変わりませんが、今回のパッチの適用で次の2つのファイルを準備する必要があります。なお、以下に挙げるファイルの内容は、各自の環境に合わせて変更してください。
mysql_use yes |
| /var/qmail/control/sqlserverファイル |
mysql_use yes |
| /etc/checkpassword/sqlserverファイル |
| mysql_use | MySQLの機能を使うかどうか。デフォルトは「yes」 |
| server | MySQLサーバ。デフォルトは「localhost」 |
| port | MySQLサーバのポート番号。デフォルトはmake時のlibmysqlclientのデフォルト |
| login | MySQLサーバに接続するときのユーザー名 |
| password | MySQLサーバに接続するときのパスワード |
| db | 使用するデータベース名。デフォルトは「dbname」 |
| table | 使用するテーブル名。デフォルトは「usertable」 |
| ignore_validity | ユーザーの有効期限指定の有無。「yes」で機能無効。デフォルトは有効期限を確認 |
| quota | Maildir/の容量制限の有無。制限する場合は「yes」を指定。デフォルトは「no」 |
| swap_check_order | /etc/passwdファイルとMySQLのどちらを優先するか。「yes」でMySQL優先。デフォルトは「no」 |
| passfield | ユーザーのパスワードを保存するフィールドの名前。デフォルトは「crypt」 |
| userfield | ユーザーのアカウント名を保存するフィールドの名前。デフォルトは「id」 |
| uidfield | ユーザーのUIDを保存するフィールドの名前。デフォルトは「uid」 |
| gidfield | ユーザーのGIDを保存するフィールドの名前。デフォルトは「gid」 |
| homefield | ユーザーのホームディレクトリを保存するフィールドの名前。デフォルトは「home」 |
| shellfield | ユーザーのシェルを保存するフィールドの名前。デフォルトは「shell」 |
| apop_passfield | APOP専用。APOPの認証に使用するパスワードを保存したフィールドの名前を指定。デフォルトは「plain」 |
| enc_type | ユーザーのパスワードの保存形式。以下から選択可能(ただしAPOP使用時は「plaintext」のみ)。省略時は「des」 des:DES形式。MySQL SQL文ではENCRYPT()関数で変換できる plaintext:平文 md5:MD5形式 mysql:MySQLのPASSWORD()関数で変換したもの |
| 両ファイルの設定項目内容 | |
デフォルト値を利用する場合は、特に項目を付け加える必要はなく省略可能です。
■MySQLの準備
MySQLのインストール方法は、「快速MySQLでデータベースアプリ!」第1回 MySQLインストール完全ガイドを参考にしてください。また、最近のディストリビューションではすでにインストールされている場合もあるので、あらかじめ確認してからインストールを行います。
次にデータベース/テーブルを用意します。ここでは、データベース:qmail_db、テーブル:usertableとして利用することにします。まず、viなどのエディタで次の内容のファイル(ここではusertable.sql)を作成します。
CREATE TABLE usertable ( |
| usertable.sqlファイル 注:今回のテーブル構成ではAPOPには対応していません |
続いてデータベース:qmail_dbを作成し、このデータベースにusertable.sqlを使ってテーブル:usertableを作成します。
# mysqladmin create
qmail_db |
データベースおよびテーブルが作成されているか確認しておきます。
![]() |
| 画像をクリックすると、テキストで拡大表示します |
次に参照権を設定します。ユーザー:user、パスワード:passを使用する場合は以下のようにします。
# mysql |
ただし、qmailとMySQLを同一のホスト上で動かす場合は次のようにします。
mysql> grant select
on qmail_db.* to user@localhost identified by 'pass'; |
以上でインストール作業は終了です。qmailの起動や使用法は従来どおりですが、いくつか注意が必要になります。うまく機能しない場合は、次の点を確認します。
- uidとgidに100以上の値が設定されているか
- 各ユーザーのMaildirディレクトリを、MySQLに登録したhome、uid、gidに合わせてあらかじめ作成しているか
- qmailが高速に処理できても、MySQLがボトルネックになる可能性があるため、MySQLの最大接続数をqmailの配信プロセス数より多くしているか
MySQLの最大接続数を上げるには、mysqldにオプション「--set variable=コネクション数」を指定するか、設定ファイルmy.cnfに次の行を追加します。
set-variable = max_connections=コネクション数 |
ここではユーザー認証でMySQLを使用するところまでを紹介しましたが、本パッチにはバーチャルドメインを実現する機能も備わっています。興味のある方はパッチ付属のREADME.mysql.enファイルを参考にしてください。
そのほかチューニングと運用の見直し
ここまでの作業で、相当の配信能力を備えたqmailサーバができあがっていることと思います。しかし、このほかにも見直す点はいくつかあります。
tcpserverの起動オプション「-c」はすでに紹介しましたが、これ以外にもパフォーマンスに影響を及ぼすオプションの指定があります。まず、IPアドレスの逆引きを行ってホスト名を確認する作業が必要がないのであれば、「-H」オプションを指定します。同時に、ident情報(Identification Protocol)を必要としないのであれば「-R」を指定します。こうすることで、DNSやほかのプロトコルによるボトルネックの発生を抑えられます。
運用面においては、ディスクの圧迫を防ぐためにユーザーに既読メールをサーバに残さないよう呼び掛けたり、数十Mbytesに及ぶ巨大メールを送信しない(必要な場合は分割して送る)ように啓もうするなどの活動も効果的です。啓もう活動も功を奏さないのであれば、Maildirに対してquota(用量制限)を行うことも最後の手段として検討しましょう。その際は、前述のパッチを使用するか、単純にquota機能だけを追加したいのであればLevent Serinol氏の「quota patch for qmail-local」(http://www.mrjesus.org/patches/qmail-local-quota.patch)を導入します。
ここまでの方法でも成果が出ないのであれば、最後の手段として「メールサーバの分割」を検討する必要があるでしょう。サブドメインを用意し、サブドメイン分だけのメールサーバを新規に用意します。
まとめと次回予告
今回は、パフォーマンスチューニングの手法をいくつか紹介しました。数あるMTAの中でもqmailは最速といわれる部類に属していますが、登録ユーザーや送配信メッセージが増加すれば、当然それに比例してサーバの負荷も高くなり、いつかは見直し作業を迫られることになります。
マシンのスペックやバックボーンの速度がムーアの法則的に増加しても、そうそうシステムの置き換えができるものではありません。いまはノーマルのqmailで正常に動作している場合でも、ここで紹介した方法でパフォーマンスを上げられることを覚えておけば、いつかは役に立てるはずです。
1年近くにわたりqmailについて紹介してきた本連載も、あと2回を残すのみとなりました。次回は、これまでに紹介し切れなかったケース・バイ・ケースの対応事例をTipsとして取り上げます。もし皆さんのところで困難または特殊な状況に直面した経験がありましたら、ぜひLinux Square会議室にご投稿ください。次回の参考にさせていただきたいと思います。
|
2/2
|
|
|
||||
|
||||
| 連載 実用qmailサーバ運用・管理術 |
| Linux Squareフォーラム サーバ構築・運用関連記事 |
| 連載:Heartbeatでかんたんクラスタリング(連載中) オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します |
|
| 特集:Apache 2.2でWebサイトをパフォーマンスアップ! 最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する |
|
| 連載:実用 Apache 2.0運用・管理術(全8回) 本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える |
|
| 連載:実用
BIND 9で作るDNSサーバ(全15回) 本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく |
|
| 連載:実用qmailサーバ運用・管理術(全14回) 本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで |
|
| 特集:Samba
3.0の全貌 改訂版 Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する |
|
|
TechTargetジャパン
- 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします - エラーメッセージをどう扱うか? (2012/2/2)
今回は、スクリプト実行時にエラーが発生したことを知らせるメッセージの扱い方を説明します - ファイルのアップロードを制限する (2012/1/30)
HTTPクライアントがアップロードしてくるファイルの扱いについて解説します。そもそも受け入れる必要があるのか? ということのほかにも、いろいろ設定が必要です - OSに付属するシェルスクリプトを読んで技術を盗む (2012/1/27)
シェルスクリプトマスターに近づくには、他人から技術を盗まなければならない。OS付属のスクリプトから技術を盗もう
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

