MailDepot バックエンド運用マニュアル
- 目次
- この文書について
- MailDepot の構成
- 設定ファイル
- システムの起動
- コマンドラインオプション
- ログの出力
- プロセス監視デーモン
- アラート監視デーモン
- ジョブ管理デーモン
- メール取り込みデーモン
- 日次処理スクリプト
- 月次処理スクリプト
- バックアップ処理スクリプト
- Apache、PostgreSQL のログ
- ログの削除
この文書について
この文書では MailDepot のバックエンドの運用管理について説明します。
その他の MailDepot 管理用のコマンドラインツールについてはコマンドラインツールマニュアルを参照してください。
MailDepot の構成
MailDepot のバックエンドのプロセスの構成は以下のようになります。
md_watch --+-- md_alert | +-- md_job | +-- md_import | +-- md_daily.php | +-- md_monthly.php
md_watch: プロセス監視デーモン
各種常駐プロセスの状態を監視し、起動していない場合はそれらを起動します。また、1日に1回日次処理を起動します。
ドメイン毎に1プロセス起動します。
md_alert: アラート監視デーモン
システムの状態を監視し、異常があればアラートを発行します。
ドメイン毎に1プロセス起動します。
md_job: ジョブ管理デーモン
メール取り込みのジョブを管理します。
ドメイン毎に1プロセス起動します。
md_import: メール取り込みデーモン
POPサーバからメールを取り込んでデータベースに登録します。
md_daily.php: 日次処理スクリプト
1日に1回、日付が変わったときに起動し、前日の統計の処理やメールパーティションの検索対象外切り替え処理などを行います。
md_monthly.php: 月次処理スクリプト
1ヵ月に1回、月が変わったときに起動し、ログの切り詰め処理などを行います。
設定ファイル
maildepot.conf
インストール時に全体の設定または、各ドメインの雛形として /opt/maildepot3/etc に作成されます。
ドメイン作成時には、/opt/maildepot3/domain/ドメイン名/etc にコピーされます。
- superuser
- db_datadir
- db_hostname
- db_port
- db_username
- db_password
- db_dbname
- alert_mail_address
- locale
- header_envelope_from
- header_envelope_to
- max_mail_import_retries
- max_mail_import_num
- max_part_length
- part_truncation_rate
- fastdisk
- fastdisk_table_max_partitions
- fastdisk_index_max_partitions
- partition_offline_disk_usage_rate
- snapshot_dest
- next_table_space
MailDepot が使用する superuser 名を設定します。(default:"maildepot")
MailDepot が使用するデータベースクラスタが設定します。(default:"/opt/maildepot3/data")
MailDepot が使用するデータベースのホスト名を指定します。(default:"")
MailDepot 用データベースが使用するポート番号を指定します。(default:5432)
MailDepot がデータベース接続時に使用するユーザ名を指定します。(default:"maildepot")
MailDepot がデータベース接続時に使用するパスワードを指定します。(default:"")
データベース接続時に使用するデータベース名を指定します。(default:"postgres")
この設定はドメイン追加時に、ドメインごとに異なるデータベースが指定されます。
MailDepot が管理ユーザ等にアラートをメールで送信する際の送信元のアドレスを指定します。(default:"maildepot@サーバ名")
この設定はドメイン追加時に、ドメイン毎に指定できます。
MailDepot が管理ツールで使用するロケールを指定します。(default:"ja_JP")
個人メール検索機能を利用する場合に「送信者のメールアドレス」として識別させるメールヘッダIDを指定します。(default:"X-Envelope-From:")
個別メール検索機能を利用しない場合には、デフォルトのままで構いません。
個人メール検索機能を利用する場合に「受信者のメールアドレス」として識別させるメールヘッダIDを指定します。(default:"X-Envelope-To:")
個別メール検索機能を利用しない場合には、デフォルトのままで構いません。
個人メール検索機能の詳細は、個人メール検索オプションのページ をご覧ください。
メール取り込み処理で、メールサーバへの接続に失敗した際にリトライする回数を指定します。(default:3)
メール取り込み処理で、1回のメールサーバへの接続でダウンロードするメールの数を指定します。(default:"*")
"*" が指定された場合、メールサーバにある全てのメールを取り込みます。
通常は、マルチドメイン機能を利用し複数ドメインの取り込みを行っている際、取り込み処理が1部のドメインに偏ってしまうのを防止する目的で設定します。
マルチドメイン機能の詳細は、マルチドメインオプションのページ をご覧ください。
メール取り込み時に全文検索のために抽出された検索用のテキストの長さが 896kB を超えた場合に、 メールの各パートから抽出したテキストを切り詰める際の最大長をバイト単位で指定します。(default:262144)
メール取り込み時に各パートから抽出されたテキストを max_part_length まで切り詰めますが、 全文検索の構文解析処理に失敗した場合に検索用のテキストをさらに切り詰める割合を指定します。(default:0.8)
高速ディスクの名前を指定します。(default:"")
指定するディスクは md_diskadd コマンド であらかじめ追加しておく必要があります。 md_diskadd コマンドの -f オプションを指定してディスクを追加した場合には fastdisk パラメータが自動的に設定されます。 また、インストール時に高速ディスクの設定を行った場合にも自動的に値が設定されます。
メール取り込みデーモン は fastdisk パラメータに指定されたディスク上に 当月のメールを保存するための領域を作成します。 半導体ストレージなど高速なディスクを追加し、fastdisk パラメータに指定することにより、メール取り込みや検索の高速化を期待できます。
テーブル領域を高速ディスク上に何パーティションまで配置するかを指定します。 (default:0) デフォルトでは 0 になっており、テーブル領域は高速ディスク上に配置しないように設定されています。 fastdisk_table_max_partitions パラメータに指定されたパーティション数を超えたテーブル領域は、 月次処理スクリプト により通常のディスクに移動されます。
インデックス領域を高速ディスク上に何パーティションまで配置するかを指定します。 (default:0) デフォルトでは 0 になっており、インデックス領域は高速ディスク上に配置しないように設定されています。 fastdisk_index_max_partitions パラメータに指定されたパーティション数を超えたインデックス領域は、 月次処理スクリプト で通常のディスクに移動されます。
ライセンスによる容量制限に対してメールのアーカイブ容量が指定した割合を超える場合、 日次処理スクリプト による古いパーティションを自動的に 検索対象外に切り替えます。(default:0.9)
md_snapshot コマンド でのスナップショットの保存先を指定します。(default:"/opt/maildepot3/snapshots")
md_import_disk.conf 設定ファイルを自動更新するかを auto、manual で指定します。デフォルトは auto です。
md_license.conf
ライセンスの管理は md_license コマンドにて行いますので、ファイルは直接変更しないでください。詳細は ライセンスのページ をご覧ください。
md_authenticity.conf
この設定ファイルには、メールの改竄検知に必要な情報が含まれており、インストール時に自動的に作成され、 サーバ毎に異なる内容が保存されています。 バックアップを取得したサーバとは別の MailDepot サーバにバック アップデータをリストアする場合には、メールの取り込みを開始する前にこのファイルをリストアする必要があり ます。このファイルをリストアしない場合、リストアされたメールに対する改竄検査に失敗します。
md_import.conf
メールの取り込み処理において、取り込み先のメールサーバ毎に下記の設定ファイルを参照します。
/etc/maildpepot3/domain/<ドメイン名>/etc/md_import_ユーザ名@ホスト名:ポート番号.conf
このファイルでは、下記のオプションが指定可能です。 このファイルは、必要に応じて管理者が手動で作成して下さい。
- registered_date
MailDepot では、メールの取り込み日時には、メールを取り込んだ時の日時が設定されますが、 このオプションを指定すると、メールの取り込み日時を指定した日時に設定します。 このオプションは、MailDepot に POP 経由で過去のメールを取り込む場合に利用します。
registered_date = "2015-02-01 00:00:00"
md_import_disk.conf
次に月単位パーティションを作るときに使うディスク名(テーブルスペース名)を指定します。
next_table_space = "pg_default"
システムの起動
管理ツールからメール取り込み処理を起動すると、最初に md_watch が起動され、 md_alert 、 md_job 、 md_import が md_watch によって順に起動されます。
各プログラムは、起動されると、そのプロセスのプロセスIDを /opt/maildepot3/domain/ドメイン名/var/run/md_watch.pid などのファイルに保存します。 このファイルはプロセスが終了すると自動的に削除されます。
各プログラムは maildepot ユーザのみによって起動することができます(root を含む他のユーザで起動するとエラーになります)。
コマンドラインオプション
md_watch 、 md_alert 、 md_job 、 md_import は以下のオプションを引数にとります。
- start DOMAIN
- stop DOMAIN
- status DOMAIN
- 1 Running. 起動中の場合
- 0 Not running. 起動していない場合
プロセスを起動します。既に起動している場合は何もせず終了します。
DOMAIN にはドメイン名を指定します。
プロセスを終了します。起動していない場合は何もせず終了します。
プロセスの状態を表示し、終了します。
ログの出力
MailDepot のバックエンドのプロセスは、各種ログを syslog に出力します。 また、ログレベルが NOTICE 以上のログは(可能な場合)データベースの操作ログにも出力します。 操作ログは管理ツールから確認することができます。
MailDepot の syslog 出力はファシリティとして LOCAL1 を使用しています。
デフォルトでは /etc/syslog.conf の設定を変更し、 MailDepot のログを独立したログファイルに出力しています。
local1.* /var/log/maildepot
出力される情報は以下のようになります(括弧内はログレベル)。
通常の情報(INFO)
- プロセスの起動
- プロセスの初期化完了(設定の読み込み、デーモン化など)
- プロセスの終了
- メール取り込み開始
- メール取り込み完了
重要な情報(NOTICE)
- メールパーティションの作成、変更、削除
- 操作ログ、レポートの切り詰め処理
警告(WARNING)
- 致命的ではないエラーなど
エラー(ERROR)
- 設定ファイルが正しくない
- 起動時の引数が正しくない
- プロセスの起動に失敗した
- データベースがエラーを返した
- メール取り込み処理が途中で失敗した
- その他正常に処理を続行できない場合など
アラート(ALERT)
- ライセンスによるディスク容量制限または物理的なディスク使用量が上限に近付いている
- データベースに接続できない
- 試用版の期限が切れた
- 送受信数などの統計値に異常に大きいものがある
- その他システムに問題があり、緊急の対処が必要な場合
プロセス監視デーモン
プロセス監視デーモン(md_watch)は、10秒ごとにアラート監視デーモン(md_alert)、メール取り込みデーモン(md_import)のプロセスが起動しているかどうかを確認します。起動していない場合は自動的にそれらを起動します。プロセスの起動を3回再試行し、失敗した場合はエラーログを出力します。
引数に stop をつけて起動した場合、または終了シグナル(SIGHUP、SIGINT、SIGTERM、SIGQUIT)を受け取った場合は、 md_alert 、 md_job 、 md_import に終了シグナルを送った後、終了します。
アラート監視デーモン
アラート監視デーモン(md_alert)は、システムの状態を1分おきに監視し、システムに何らかの異常があった場合は syslog にアラートを出力します。管理ツールで設定したメールアドレスにもアラートメールが送信されます(データベースにアクセスできない場合を除く)。
監視する対象は以下になります。
システムの異常
- データベースが動作しているか
- ディスク使用量がライセンスのディスク容量制限に近付いているか
- ディスク使用量が物理的なディスク容量の上限に近付いているか
- POP サーバのキューにたまっているメールの数
統計値異常
- 全体の送受信数、送受信容量
- ユーザごとの送受信数、送受信容量
同じアラートが連続した場合は、システムの異常の場合、前回そのアラートを発行してから1時間以上経過した場合のみアラートを発行します。統計値異常の場合、前回そのアラートを発行してから1日以上経過した場合のみアラートを発行します。
アラートを発行するかどうか、また発行するしきい値はそれぞれ管理ツールから変更することができます。
ジョブ管理デーモン
ジョブ管理デーモン(md_job)は、20秒ごとに POP アカウント情報をチェックし、メール取り込みのジョブをデータベースに登録します。
メール取り込みデーモン
メール取り込みデーモン(md_import)は、定期的にメール取り込みジョブをチェックし、指定された間隔で POP サーバからメールを取り込み、データベースに格納します。
月の最初にメールを取り込む際に、その月のメールパーティションを新たに作成します。ディスクを追加している場合、メールパーティションを作成するディスクは、使用量が最も少ないものが自動的に選択されます。
メールサーバを複数指定した場合は、取り込み時刻が重複した場合でも、1度に1つのサーバから順番にメールを取り込みます。その場合は前回取り込み時刻が古いほうが優先されます。受信の開始が一定時間以上遅れる場合、そのジョブはスキップされます。
メール取り込み時に日本語の自動判別などを有効にするためには、システム起動時のロケールを LANG=ja_JP.UTF-8 などの日本語ロケールにする必要がありますので注意してください。
MIME タイプと拡張子のリストを記述した /etc/mime.types ファイルがある場合、添付ファイルのファイルタイプを拡張子からも判断します(Content-Type: application/octet-stream の場合)。 mime.types ファイルは mailcap パッケージに含まれます。
メール取り込みデーモン(md_import) は、下記のファイルにメールの取り込み処理の状態を記録します。
メールの取り込み処理が正常に終了した場合には、このファイルは削除されます。/opt/maildepot3/var/tmp/md_session-XXXX.log
メールの取り込み処理の過程において何らかの異常が発生した場合、プロセス監視デーモン(md_watch)が メール取り込みデーモン(md_import)を再起動します。 この際、上記のメールの取り込み処理の状態を記録した ファイルを参照し、リカバリ処理を実施します。
リカバリ処理において、添付ファイルの解析処理で異常が発生したと判断した場合には、解析不可能な添付 ファイルとしてメールをアーカイブ保存します。 また、登録不可能と判断されたメールは下記のディレクトリ に EML 形式のファイルとして保存します。
/opt/maildepot3/var/mail
日次処理スクリプト
日次処理スクリプト(md_daily.php)は、1日に1回、AM0時(日付が変わったとき)に md_watch から起動され、以下の処理を行います。
- 前日の統計情報から日別のユーザ、ドメインランキング情報を生成
- 前日の統計情報から日別の統計情報を生成
- ライセンスの容量制限に対するディスク使用量の割合が partition_offline_disk_usage_rate パラメータ の値を超えた場合、古いパーティションを検索対象外に移動
- 自動データ削除が有効になっている場合、古いメールパーティションを削除
- 日付が1日の場合、月次処理(md_monthly.php)を起動
MailDepot のシステムが一時的に停止していたなどの理由で、日次処理が実行されなかった場合は、次の日にまとめて処理が実行されるため、特に作業を行う必要はありません。 この場合は統計処理などが1日分遅れることになりますが、すぐに情報を反映させたい場合は、手動で md_daily.php スクリプトを実行することができます。この場合は md_daily.php を実行した時点までの統計情報が反映されます。 md_daily.php は su または sudo コマンドで maildepot ユーザとして実行してください。
# sudo -u maildepot -i /opt/maildepot3/bin/md_daily.php DOMAIN
また、 md_daily.php は以下のオプションを引数にとります。手動実行時に特定の処理だけ実行させたい場合などに便利です。
- -delete-only パーティションの自動削除処理のみ行います。
- -no-monthly 1日に起動された場合でも月次処理を起動しません。
月次処理スクリプト
月次処理スクリプト(md_monthly.php)は、毎月1日(月が変わったとき)に md_daily.php から起動され、以下の処理を行います。
- 保存期間(5年とメールの保存期間のうち長いほう)を過ぎた操作ログ、レポート情報を削除
MailDepot のシステムが一時的に停止していたなどの理由で、月次処理が実行されなかった場合は、次の月にまとめて処理が実行されることになります。 次の月まで待たずに処理を行いたい場合は、手動で md_monthly.php スクリプトを実行することができます。 md_monthly.php は su または sudo コマンドで maildepot ユーザとして実行してください。
# sudo -u maildepot /opt/maildepot3/bin/md_monthly.php DOMAIN
バックアップ処理スクリプト
管理ツールからバックアップ処理が要求されると、バックアップ処理スクリプト (md_backup) が起動され、バックアップ対象のメールパーティションのバックアップを作成します。 バックアップ処理スクリプトが起動中の場合は、メールパーティションのバックアップ状態がバックアップ中に設定されます。
Apache、PostgreSQL のログ
Apache や PostgreSQL のログは標準では以下のファイルに出力されます。 ファイル名に「YYYY-MM-DD (年-月-日)」が含まれるログは 1 日ごとにローテートされます。 なお、以下のログファイルは自動的に削除されません。 ディスク容量を圧迫しないように定期的に過去のログファイルを削除するようにしてください。
- Apache のアクセスログ
-
/opt/maildepot3/var/log/httpd/access-YYYY-MM-DD.log
- Apache のエラーログ
-
/opt/maildepot3/var/log/httpd/error-YYYY-MM-DD.log
PHP のエラーメッセージなどもこのファイルに出力されます。 管理ツールの画面に何も表示されない場合などにはこのファイルを確認してください。
- PostgreSQL のログ
-
$PGDATA/pg_log/postgresql-YYYY-MM-DD.log
$PGDATA にはデータベースクラスタディレクトリを指定します。 データベースクラスタディレクトリは標準では /opt/maildepot3/data ディレクトリとなります。 データベースクラスタディレクトリが不明な場合には設定ファイル /opt/maildepot3/etc/maildepot.conf の db_datadir パラメータの値を確認してください。
- PostgreSQL の起動ログ
-
/opt/maildepot3/var/log/postgresql-startup.log
PostgreSQL の起動に失敗した場合のみエラーメッセージがこのファイルに出力されます。
ログの削除
MailDepot の syslog 出力ファイル (/var/log/maildepot) ならびに Apache や PostgreSQL のログファイルは、 自動的には削除されません。
syslog 出力ファイルの削除
MailDepot の syslog 出力ファイルの自動削除を行うには、次の設定ファイルを作成します。
/etc/logrotate.d/maildepotこの設定ファイルは、ログ・ファイルの保存期間を指定します。
/var/log/maildepot { # rotate log files monthly monthly # keep 12 month worth of backlogs rotate 12 # use date as a suffix of the rotated file dateext # compress rotated log file compress # send signal to syslog service sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
Apache、PostgreSQL のログファイルの削除
MailDepot の Apache、PostgreSQL のログファイルの自動削除を行うには、tmpwatch コマンドを利用します。
yum コマンドを実行し、tmpwatch をインストールします。
# yum install tmpwatch次に、tmpwatch の実行スクリプトを作成します。
#!/bin/sh tmpwatch -d -m 356d /opt/maildepot3/var/log/httpd/ tmpwatch -d -m 365d /opt/maildepot3/data/pg_log/上記のスクリプトを日次で自動実行するために、/etc/cron.daily/maildepot にスクリプトを保存し、スクリプトに実行権限を設定します。
# chmod 755 /etc/cron.daily/maildepotcrond サービスにより、スクリプトが定期的に実行されます。