3章 冗長メールサーバの設計


3-1 冗長メールサーバ

冗長メールサーバとは、システム内のコンピュータ機能を停止しても、他のコンピュータで処理を 続行でき、全体としては一台のメールサーバとして動作するクラスタリングシステムである。 そのため、外部からは一台のメールサーバに見えても、 内部的には複数台のコンピュータから構成される必要がある。 これを実現させるため本システムでは、次のような構成をとった。 (1)一台が停止してもメールボックスにアクセスできる 複数台の同一のメールボックスを用意する必要がある。すると、外部から来たメールを複数の メールボックスに収める必要が生じる。そこで、(2)メールを振り分けるメールハブを用意し、 他のメールサーバへ 同一内容のメールを振り分ける。一方、ローカルユーザが POPサーバにアクセスすることを考えると、(3)POPサーバも複数台用意し、 どれが故障しても常に接続が 可能なようにする必要がある。一台のPOPサーバとのやりとりで生じるメールの処理は、 同一に持つべき 全てのメールボックスで同時に行われなければならない。したがって、POPの処理に合わせてメールボックスを 同期する必要がある。

図4 冗長メールサーバモデル


3-2 メールの振り分け

メールの振り分けを実現するには、メールを受信した後、そのままメールボックスにしまわず、複数のメールボックスを 持つメールサーバにメールを振り分けるメールハブを使用する。モデルを図2に示す。中央の メールサーバは、内部、外部からローカルユーザあてのメールを受け取るとそのメールの コピーを作り、メールサーバAとメールサーバBにメールを転送する。


図5 メールの振り分けモデル



3-3 複数のメールハブを一台に見せかけるDNSサーバの設定

メールハブサーバが一台だけでは、これが故障するだけでシステムダウンになってしまうので、 メールハブサーバは二台以上必要である。ただし、振り分けに関して仕事は同じなので、 同じ設定になる。
この複数のメールハブサーバを外部から一台のMTAに見せるには、これらを同一ドメインのMXに記述する。 すると、一台故障しても、他のメールハブに自動的にメールが送られる。

図6 DNSによるメールハブの設定モデル


・図6のDNSの設定

@  IN MX 10 MH1
@  IN MX 10 MH2
@  IN MX 10 MH3


一方、POPの振り分けサーバを一台に見せるには、DNSのラウンドロビン機能を使用する。ラウンドロビンとは あるホストに対して複数のIPアドレスを割り当て、問い合わせが来るたびに異なったIPアドレスで応える機能で、DNSサーバの CNAMEレコードを利用する。DNSサーバの負荷分散のために用いられる。 つまり、一つのPOPサーバ名に対して、複数の振り分けサーバのIPアドレスを記憶しておいて、ラウンドロビンで一つの アドレスを割り当てれば良いことになる。

3-4 メールボックスの同期

メールサーバAとメールサーバBのメールボックスには、中央メールサーバ(メールハブ)によって転送された 同一のメールが格納されている。ローカルユーザは、メールサーバA,Bのメールボックスの 両方を利用できる。しかし、ローカルユーザが、メールボックスでメールを処理した場合、 他のメールサーバのメールボックスも同様のメール処理をしなくてはならない。その理由は、 利用するメールサーバのメールボックスによって、処理した内容と違うものが出てきてしまう ためである。そのために、メールボックス間で同期をとり、どのメールサーバのメールボックスに 接続しても、同じ内容が得られる必要がある。同期をとるやり方には次の二通りの方法が考えられる。

1、メールボックス自身に他のメールボックスと同期をとる仕組みを作り込む。

2、MUAのPOPのコマンドを受信し、それぞれのメールボックスのPOPサーバにコマンドを振り分ける。

本研究では、実装の容易さから2のPOPコマンドの振り分けを実装することにする。

この振り分けは、具体的には次のようにする。

振り分けシステム自身は、MUAからPOPコマンドを受け取るため、POPサーバの役割をする。一方、振り分けシステムは、 各メールボックスのメールサーバにコマンドを送るため、POPクライアントの役割をする。つまり、この振り分けシステムは、 ある種の代理サーバ(Proxyサーバ)となる。

図7 代理サーバの役割モデル



今回は、実装の簡略化のため、振り分けシステムのPOPサーバをtcpの1100を使用することとし、この振り分けシステムを全ての メールボックスのあるマシンに搭載する。


図8 振り分けシステムモデル