- PR -

メールサーバの冗長構成について

1
投稿者投稿内容
たかぎ
会議室デビュー日: 2003/09/11
投稿数: 3
投稿日時: 2003-09-11 18:21
現在、メールサーバを2台の冗長構成に出来ないかと模索しているところです。
メールサーバは、qmail+vpopmailで考えています。

そこで、AとBの2台のメールサーバを立てようと思っています。
Aが障害のときはBで引き継ぎたいと思っているのですが、メールのスプールをどうしようか悩んでいます。

私の思う案は、
1:rsync等で、AとBの同期を取る。
2:Cサーバを立てて、NFSマウントする。
かなと思っています。

1の方法だと、バックアップもかねることが出来るので、ディスクがクラッシュしたときでも、ある程度救えるメリットがありますが、同期のタイムラグがある、障害時メールソフトのpopサーバをBに設定してもらう必要がある、障害から復旧したときにメールスプールをマージする手間がややこしそう、などのデメリットが考えられます。

2の方法だと、Cにvpopmailを動かせば1の方法のデメリットを解決できるが、Cがディスククラッシュしたとき用に別のバックアップ手段を考えなくてはならない、NFSマウントによる運用は果たして安全かという疑問があります。

みなさんのご意見、その他方法をお聞かせ願えないでしょうか。
よろしくお願いします。
rosso
常連さん
会議室デビュー日: 2003/08/09
投稿数: 25
投稿日時: 2003-09-12 11:40

AとBのサーバーにミラーリングユニットを装着してみてはいかがでしょうか?

●私の案
@ミラーリングユニットを装着することでディスクの冗長化を図る。

ABサーバーはスタンバイ状態にしておき、Aサーバーでサービスが提供できないようなトラブルが発生した場合には、Aサーバーのミラーリングユニットからディスクを引き抜いて、スタンバイのBサーバーのミラーリングユニットに差し込んでサービスを再開させる。

この方法ならばAとBの同期の問題及びディスク障害にも対応できると思うのですがいかがでしょうか?
最近では安価なミラーリングユニットも市場に出回ってきているので、比較的容易に導入できるシステムだと思うのですが・・・
ただ、AからBへの切り替えは管理者が手動で行う必要があります^_^;
voyager
常連さん
会議室デビュー日: 2002/10/07
投稿数: 29
投稿日時: 2003-09-12 17:41
たかぎさん,rosso さん,はじめまして.Voyager と申します.

今は,水道・ガスと同じようにメールも止められないですから
冗長化が要りますよねぇ.また,やればやるほど金がかかる.(ToT)

さて,rosso さんは,

> ABサーバーはスタンバイ状態にしておき、Aサーバーでサービスが
> 提供できないようなトラブルが発生した場合には、Aサーバーのミラー
> リングユニットからディスクを引き抜いて、スタンバイのBサーバーの
> ミラーリングユニットに差し込んでサービスを再開させる。

この方法では,Aのディスク情報がBにミラーリングされるまでの
タイムラグが気にかかります.(モノに依存するんでしょうかね?)

私は,むしろCサーバを RAID 構成にしておけば良いのでは…と思います.

1本が死んでも,残る HDD でなんとか頑張る.
死んだ1本は 後から交換で,また元どおり.

予算との兼ね合いでしょうが,“メールを止めない”という観点から
ホットスワップ対応の RAID が理想かな.

NFSの運用が安全かどうか...難しい問題ですね.
⇒ わかる方,私も知りたいです.教えて〜.




[ メッセージ編集済み 編集者: voyager 編集日時 2003-09-12 17:45 ]
たかぎ
会議室デビュー日: 2003/09/11
投稿数: 3
投稿日時: 2003-09-12 21:38
rossoさん、voyagerさん、返信ありがとうございます。

まず、rossoさんのミラーリングユニット(RAID-1のことですよね)は、安価になったと言えどちょっと手が出せないかな。Cサーバ買うより安いじゃんと思われるかもしれませんが、実はCサーバは古くなったマシンを当てようと思っているので、元手不要なのです。
仮に1の方法で、rossoさんの提案する方法だと、ミラーリングユニットを2台買わなきゃいけないので、予算がきびしい。
ちなみに、IBMのXシリーズのRAIDは、一度抜いたディスクを同じマシンに挿しても認識しないらしいです。ディスクの製造番号か何かを覚えているらしいです。民生用?のものは多分そんなことはないとは思いますが。

次に、voyagerさんですが、まず、
> この方法では,Aのディスク情報がBにミラーリングされるまでの
> タイムラグが気にかかります.(モノに依存するんでしょうかね?)
は、勘違いされているかもしれませんね。RAID-1のミラーリングは同時に行われているはずなので。
で、やっぱりRAIDですか。
ちょっと思っていたのは、Cサーバを立てるのではなく、変わりにネットワーク接続できるHDってありますよね。それをつないで見ようかとも。(NFSマウントできるものがあるのかは、ちゃんと調べてませんが。)
結局、NFSってところが気になっています。
NFSが安全かは、セキュリティ的にではなく、信頼できるかというところが気になっています。
Webで検索すると、ファイルロックがあやしいとかの記事を目にします。
MailDir形式でやろうと思っているので、とりあえずは大丈夫なのかも知れませんが、実際やってて問題ないという事例を見つけられないので、ちょっと不安視しています。
誰もやっていないから記事がないのか。やっていているけど問題がないからそういう記事が見つけられないのか。判断がつきません。
どなたかやっている人がいたら教えてください。

現時点での結論
NFSによる運用に問題が無ければ2の方法(Cサーバを立てる)で行きたいと考えています。
NFSはやはり怪しいということであれば1の方法(rsync等による同期)しかないかなと。
あとは、どうやってタイムラグをなくすかですね。
いっそのこと、短時間止まるのを覚悟して、AのメールスプールをBにコピーしてからBのメールサーバを起動させるという方法しかないかもしれませんね。
ただ、ディスク障害の場合を考えると、rossoさんが提案されたRAIDが必要になってきますね。
お金をかけずに構築したいという夢はやはり無理なのか!?
とりあえず、NFSが鍵を握っているような感じですね。

長々と書いてしまいましたが、その他意見等がありましたら、よろしくお願いします。

<付録>
実は、こういうことを考えるきっかけになったのは、ちょっと前に原因不明でメールが送受信できなくなった障害がありました。(ちなみにRedHat7.3)
fsckをやってもエラーが出ないので、ディスク障害ではないと思っていますが、sendmailおよびpop3dの動きが異常に遅く、メールの滞留またはタイムアウトが頻発しました。
特に設定を変えたわけでもなく、突然でした。いろいろ調査してみましたが原因がわからず、運用をあまりとめることも出来ず、別のHDに環境をインストールしなおして今はそれで動いています。同じマシンで動いているので、ハードウェア障害でもなさそうです。
怪しいと思っているのは、RHNで自動アップデートしていたので、それが引き金になったのかなと思っています。でも、他のマシンも同じようにしていて問題は起きてないんですけどね。
よって、ディスク障害も考慮しなければなりませんが、OSやデーモンなどのシステムそのものの障害も考慮せねばと思っていまして、2台構成は外せないと思っています。
voyager
常連さん
会議室デビュー日: 2002/10/07
投稿数: 29
投稿日時: 2003-09-16 10:13
voyager です.

> 次に、voyagerさんですが、まず、
> > この方法では,Aのディスク情報がBにミラーリングされるまでの
> > タイムラグが気にかかります.(モノに依存するんでしょうかね?)
> は、勘違いされているかもしれませんね。RAID-1のミラーリングは同時に行われているはずなので。

おっしゃる通り RAID-1(ミラーリング)は即時ですね.
上記文章を作成中に,私が(勝手に)想定したものは RAID-5 でした.
RAID-5 の場合に,ディスクA ⇒ B へのデータコピー (このデータコピーを
ミラーリングという言葉で表現してしまいました) にかなり時間がかかった
経験があります.(10G 程度で 5時間くらい)
この間,メールが停止することを懸念した次第です.


> で、やっぱりRAIDですか。
> ちょっと思っていたのは、Cサーバを立てるのではなく、変わりにネットワーク接続できるHDってありますよね。それをつないで見ようかとも。(NFSマウントできるものがあるのかは、ちゃんと調べてませんが。)

安価な NAS … 例えば Logitec のものは Linux に対応しており NFS が
使えるようですが...
ご心配されているファイルロックに関しては,私も???です.m(_ _)m

-----------
1案を変化させて こんなシステムはどうでしょう?
(出費を極力抑えるという点から)

サーバαが通常のメールサーバで,サーバβがサブのサーバとします.
αに届いたメールは,α内の各メールボックス(Maildir)に格納し,
さらにβへも SMTP で転送を行います.
αがダウンした場合は,βのIPをαに変更します.
 → ひとまず復旧 ⇒ ユーザは設定変更なし

α,βとも,定刻に管理者宛にメール発信を行い,それを受信すること
により,サーバが動作していることを確認します.

ここで問題は,ユーザがαからPOPしたメールを βに反映することが
難しい点です.ここは1案の rsync で同期をとります.
αに届いたメールはβにも届くため,1案での“同期と同期”の間に
届いたメールを復旧させる手間が減る思います.
フェイルセーフの面から,あるはずのメールが消えてしまうよりは,
既にない(ユーザがPOPした)メールが,再度現れる方が許せます.

メールボックス作成時は,両方に作成する必要がありますし,これを
怠るとループメールが発生する可能性もありますので,設定は注意が
必要ですね.

san12
常連さん
会議室デビュー日: 2003/06/19
投稿数: 26
投稿日時: 2003-09-16 15:02
引用:

たかぎさんの書き込み (2003-09-11 18:21) より:
現在、メールサーバを2台の冗長構成に出来ないかと模索しているところです。
メールサーバは、qmail+vpopmailで考えています。

そこで、AとBの2台のメールサーバを立てようと思っています。
Aが障害のときはBで引き継ぎたいと思っているのですが、メールのスプールをどうしようか悩んでいます。

私の思う案は、
1:rsync等で、AとBの同期を取る。
2:Cサーバを立てて、NFSマウントする。
かなと思っています。



可用性を考慮してシステムを組みたい&安価にと云うことなら、
Voyagerさんの構成で、CサーバをSW-RAIDで構成すれば安価に
なると思います。
LinuxならSW-RAIDは簡単で無償。非常に安く構築できますよね。

下手にrsync的な事をやろうとすると、異常時の処理でおかしな
不整合を出しやすいので、できるだけ単純な構成を取ることを
お奨めします。
たかぎ
会議室デビュー日: 2003/09/11
投稿数: 3
投稿日時: 2003-09-18 12:02
たかぎです。

voyagerさん、san12さん、ありがとうございます。
いろいろ調べていて返信が遅れました。

現在、基本的な構成として、voyagerさんが書かれた
> サーバαが通常のメールサーバで,サーバβがサブのサーバとします.
> αに届いたメールは,α内の各メールボックス(Maildir)に格納し,
> さらにβへも SMTP で転送を行います.
の方法で検討しています。ありがとうございます。

san12さんが書かれた
> 可用性を考慮してシステムを組みたい&安価にと云うことなら、
> Voyagerさんの構成で、CサーバをSW-RAIDで構成すれば安価に
> なると思います。
は、NFSマウントする方法ということですよね。
また、
> LinuxならSW-RAIDは簡単で無償。非常に安く構築できますよね。
は参考にしたいと思います。
ただちょっと気になるのは、SW-RAIDは安全かが少し疑問です。
比べるものが違うけど、NFSとSW-RAIDのどちらが安全かなと少し悩んでいましたが、悩んでも結論が出ないので、とりあえずやってみることにしようと思っています。

先の私の返信の<付録>にも書きましたが、ハード障害だけでなくソフト障害も考慮したいので、案2のCサーバは考慮から外すことにしました。理由は、Cサーバで最低限のデーモンしか動かすつもりはありませんが、ソフト障害を起こしたときに運用が完全に止まってしまうためです。また、3台も管理するのは面倒かも。
そこで、voyagerさんが書かれた構成+san12さんが書かれたSW-RAIDで試してみたいと思っています。

<まとめ>
その前に、このスレッドではメールサーバのみに言及してきましたが、実際にはDNSサーバ、HTTPサーバがあるので、それも考慮した形でまとめます。
−環境−
AサーバにてSW-RAIDを組み、DNSサーバ(マスター)・HTTPサーバ・メールサーバ(セカンダリ)とする。
Bサーバも同様にSW-RAIDを組み、DNSサーバ(マスター)・HTTPサーバ・メールサーバ(プライマリ)とする。
DNSのNSレコードおよびwwwはAサーバを、MXレコードおよびpopはBサーバを記述しておく。
こうすることによって、wwwとメールのトラフィックを分散させる。
DNSのゾーンデータおよびHTMLコンテンツは、頻繁に更新されないので、手動で同期を取る。
メールは、Bサーバで受信し、ローカル配信すると共に、Aサーバにも転送する。
Aサーバで受信したメールは、ローカル配信のみとする。
−障害時−
仮にAサーバが障害を起こしたとき、BサーバにてAサーバのIPアドレスをセカンダリIPアドレスとしてifupする。
すなわち、1台のマシンでAとBの両方のサーバの機能を一手に引き受ける。
Aサーバが障害から復旧したら、BサーバのセカンダリIPアドレス(AサーバのIPアドレス)をifdownし、Aサーバをネットワーク接続する。
Bサーバが障害を起こしたときも同様で、AとBを読み替えるだけ。(メールスプールの同期の方法は別途検討。)

以上が、私が現在思っている構成です。
もし、お気づきの点、問題点等があるようでしたら、ご教授ください。

以上、よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)