web-dev-qa-db-ja.com

2つの異なるデータセンターの2つのサーバーを使用した単純な冗長性のセットアップ?

質問の範囲

この質問は、ドメインを要求しているクライアントを取得することだけを目的としています:example.com2つの利用可能なサーバーの1つに。それ以降の処理方法は、解決すべきもう1つの問題であるため、回答にnotと記載する必要があります。

利用可能なツール

私が利用できるツールは、別の物理的な場所にある2つの異なるデータセンター(server Aserver B)に分散された2つの専用サーバー(data center Adata center B)です。 純粋に架空のserver AのIPアドレスはa.a.a.aとして表され、server BのIPアドレスはb.b.b.bとして表されます。どちらのサーバーにも、実際には問題ではないLinuxディストリビューションが付属しています。

自分で管理したいので、サードパーティのサービス(マネージドDNS、CDNなど)は使いたくありません。したがって、これらは私の唯一のツールです。

目標

私が期待している災害は、両方のサーバーで正しくセットアップしてから1週間後に使用された2つのデータセンターの1つを全滅させる水素爆弾です。ドメインexample.comを常に利用できるようにしたいのですが、サーバーの信頼性が非常に高いため、年に1回以上クラッシュすることはないため、数秒または数分のダウンタイムは発生しません。 。また、「問題の解決に忙しい」と表示する単純なページでは、この許容可能なダウンタイムを1時間程度に延長できます。

私の修正された解決策

この質問をしてからしばらく経ちましたが、今では合理的な冗長設定ができています。閉まっているので、回答として投稿することはできません:(

両方のサーバーは、example.comドメインに対して等しいDNSレコードを持っていることがわかりました。

# DNS records for both server A and server B
example.com. NS ns1a.example.com.
example.com. NS ns1b.example.com.
example.com. NS ns2a.example.com.
example.com. NS ns2b.example.com.
ns1a.example.com. A a.a.a.a
ns2a.example.com. A a.a.a.a
ns1b.example.com. A b.b.b.b
ns2b.example.com. A b.b.b.b
www.example.com. CNAME example.com.
example.com. A a.a.a.a
example.com. A b.b.b.b

両方のサーバーでスクリプトが実行され、1分ごとに可用性を相互にチェックしています。どちらのサーバーもexample.comドメインのネームサーバーであるため、どちらもDNSレコードを変更できます。問題が発生した場合、まだオンラインになっているサーバーがこれを検出し、DNSレコードから他のサーバーを削除します。次に、他のサーバーがまだDNSレコードにある間、ブラウザーは2秒以内に他のサーバーに自動的にフォールバックします(Mozilla Firefoxでテスト済み)。これは本当に便利な機能です。

server Aexample.comに対して '権限'を持っていたため、DNSを制御できるものとしてserver Bを追加する方法がわかりませんでした。任意のドメインのレコードを追加するだけでよいことがわかりましたが、最初にドメインをDNSレコードに登録した人が、このサーバーをDNSレコードに「NS」を含むネームサーバーとして追加した場合にのみ尊重されます。

これが同様の問題を抱えている人の役に立つことを願っています。

2
Yeti

無理だよ。単にそのように。 DNSはそのために作られていません。

次の場合に偽造できます。

  • DNS TTLを途方もなく少ない量に保ち、基本的にRFCに従ってすべてのキャッシュを無効にします-最小TTLを「必要とする」ほとんどのドメインでは「合法」ではありません
  • バックアップサーバーのスクリプトを使用して、プライマリがオフになっているかどうか(pingが停止するなど)を確認してから、ドメイン内のDNSエントリを自動的に変更します。

DNS自体にはHAメカニズムがありません。ラウンドロビンで回答を配布し、キャッシュされるため、通常、フォールオーバーするのに時間がかかります。

HAは、両方のサーバーが同じIPを使用することによって処理されます。LOTには複数のIPアドレスが必要です(技術的な制限があります)。次に、ルーティングプロトコルを使用して、このIPを他のデータセンターにフォールオーバーさせます。

1:いいえ

2:教えてください。論理的には、データセンターBからのIPアドレス空間に到達できなくなります。 THatがすべてです-DNSには他に何も起こりません、人々はまだサーバーに接続するためにそこに行きます。

3:教えてください。論理的には、データセンターAからのIPアドレス空間に到達できなくなります。 THatがすべてです-DNSには他に何も起こりません、人々はまだサーバーに接続するためにそこに行きます。

4:どうやって?半分の人をAに、半分の人をBに送ることによって-AとBがオンラインであるかどうかに関係なく(!)? DNSには、高可用性のためのゼロの規定があります。

5:いいえ、レジストラは何もしません。レジストラに移動し、名前でIPアドレスを指定します。データベースに正しくエントリを作成するのに十分賢いかどうかを確認することで、正しいエントリがあることを「知っている」人がいます。レジストラはおそらく気にしません。さて、所有権-それは法的な問題です。レジストラがドメインを販売し、ドメインのルートレジストリにそのことを通知しました。彼らはあなたにユーザー名とパスワードを与えます。このサイトへのパスワードを「所有」しているのは誰ですか?

DNSがどのように機能するかについての本を読むことをお勧めします。 AnddはDNSの可用性の問題を解決することを忘れています-DNSは高可用性のために設計されていません。ああ、閉じるために投票してください-FAQによると、初心者の質問はここでは歓迎されません。この場合、良い決定ではありませんが、ルールは有効です。

1
TomTom