質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

DNSラウンドロビン。サーバーが502を返すときは冗長化にならない?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 9,021

score 1106

DNSラウンドロビンが正常に設定できているとします。
1台のサーバーに障害発生して無反応ではなく502 BadGateway を返す場合はどうなりますか?

無反応ならクライアント側は次のIPアドレスを探しに行くのでしょうけど、
502であろうと反応がある場合はそのIPアドレスを使い続けるという事ですよね?
こういったケースの場合は冗長化にならないと理解していいでしょうか?
この場合、502を返すサーバーを停止させれば無反応になりますので手動で停止させるという
手段もありうるという事でしょうか?

また、TTLを短めにするという説明が多くありますが具体的には何分ぐらいにするのか、一定の法則はありますでしょうか?
よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

502であろうと反応がある場合はそのIPアドレスを使い続けるという事ですよね? 
こういったケースの場合は冗長化にならないと理解していいでしょうか? 
そうです。

この場合、502を返すサーバーを停止させれば無反応になりますので手動で停止させるという 
手段もありうるという事でしょうか? 
まずは障害のあったサーバをAレコードからいったん消すのが良いと思います。復旧させたときにいきなり本番のクエリを受け取ってしまうからです。そのうえで、停止するなり障害原因を探るなりしましょう。復旧を確認したら、再度Aレコードに追加するのを忘れずに。
(もちろん、DNSのレンスポンスから消えるまでTTLの時間はかかってしまいます)

また、TTLを短めにするという説明が多くありますが具体的には何分ぐらいにするのか、一定の法則はありますでしょうか?

負荷分散を重視しているところは300秒が多いようです(youtubeやyahooなど)。twitter.comなんかは30秒です。これら大手は死活監視(ヘルスチェック)をちゃんとやっているから短くできるので、普通はそこまで短くする必要はないでしょう。例えばteratail.comは3600秒です。主観ですけども30分~120分程度が普通かなぁと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/11 08:57

    ありがとうございます。知りたい内容をズバリご回答いただきました。

    キャンセル

+2

すでに解決済みとなっておりますが、
冗長と負荷分散が混ざっておられるようでしたので、

単純にDNSサーバのラウンドロビンだけを使用する前提で、
回答をさせて頂きます。

無反応ならクライアント側は次のIPアドレスを探しに行くのでしょうけど、 
一般的なOSとブラウザを使用した場合、探しに行きません。
接続できないで終了します。

接続できるように見えるのは、
TTLが短くしてあり、もう一度ユーザーが接続をしようとしたときに
DNSサーバから別のIPアドレスが返ってくるからです。

その際に同じIP(繋がらない)がDNSサーバから返ってきた場合は、
当然のことながら、接続できません。

また、クライアントOS側もDNSキャッシュをもつので、
毎回DNSサーバに問い合わせるわけではありません。

どれぐらいキャッシュを持つのかは調べたことはありませんが、
数分ぐらいは持っているのではないでしょうか。


502であろうと反応がある場合はそのIPアドレスを使い続けるという事ですよね? 
こういったケースの場合は冗長化にならないと理解していいでしょうか? 
この場合、502を返すサーバーを停止させれば無反応になりますので手動で停止させるという 
手段もありうるという事でしょうか? 

上記のように、単純なDNSサーバのラウンドロビンだけでは、
負荷分散はできても冗長化はできません。

接続先のサーバの状態にかかわらず、
文字通り順番にIPアドレスを回答するだけです。

また、TTLを短めにするという説明が多くありますが具体的には何分ぐらいにするのか、一定の法則はありますでしょうか? 

ラウンドロビンを使うときの法則などは特になく、
管理者の人が適当に決めてるのが実情で、
特に要件がなければ、1分や5分にしたりします。

大手の会社さんでDNSサーバのラウンドロビンを使っているのは、
回線を冗長したり、複数のデータセンターを使用する場合などではないでしょうか

その場合は、ちゃんと冗長化できるように、
サーバの生死確認とDNSサーバを連動させる機能の付いた機器を導入したりします。

私は、単純にサーバの負荷分散と冗長化を行う際は、
DNSのラウンドロビンを使わず、リバースプロキシ型ロードバランサーを使います。
そうすれば貴重なグローバルIPアドレスが一つで済むので。

「Linux Virtual Server」と「Keepalived」で作る冗長化ロードバランサ
Nginxのロードバランサー構築




投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/16 18:29

    ありがとうございます。
    リバースプロキシ型ロードバランサ、Nginxロードバランサなどおぼろげに言葉は見たりしておりましたが、まだ質問できる程の知識も無く、もう少し勉強してから質問させていただければと思います。今回の目的は負荷分散ではなく冗長化です。負荷分散の必要性は現在のところ全くありません。
    Nginxが入っているサーバーを数台用意できるならば容易に冗長化可能なのか、もう少し調べてみますがもしこんな質問でお答えいただけるなら大変うれしいです。

    キャンセル

  • 2015/07/16 22:17 編集

    Nginxは勉強中なので、私のコメントは
    かなり正確性はありませんが、

    ロードバランサー ーーー WEBサーバ ーーー DB
    という構成で

    NginxをWEBサーバとして使うのであれば
    セッション管理やデータの整合性は、
    動かすプログラム側でしていくので、
    単純なものであれば何も問題なく冗長化できるはずです。

    ロードバランサーとして使うのであれば、
    前回の投稿でリンクさせて頂いた
    【Nginxのロードバランサー構築 】だけだと
    複数のサーバ(Nginx)を使えません。

    クライアントが接続する際のグローバルIPアドレスが複数になってしまい
    ご質問の主題であるDNSのラウンドロビンを使うこととなり、
    元の木阿弥です。

    そのため通常は、KeepalivedかPacemakerを使って、
    一つグローバルIPアドレスを複数台のサーバで使うようしていきます。

    Keepalivedは、前回の投稿でリンクさせて頂いた
    【「Linux Virtual Server」と「Keepalived」で作る冗長化ロードバランサ 】に
    そのあたりの概要や設定内容が詳しく掲載されておりますので、
    参考になるかと思います。

    高いレベルでの冗長をする場合は、DBの冗長まで考えないと
    DBがこけると全てが無駄ってこともあります。

    DBの冗長は、PacemakerとDRBDなどを組み合わせてました。
    Apacheの冗長化の内容ですが、下記サイトが参考になるかと思います。

    DRBD+Pacemaker+Corosyncを利用したWEBサーバの冗長化
    http://www.oss-d.net/drbd-pacemaker-corosync

    Linux-HA Japan プロジェクトをご覧になると
    冗長化についての情報は結構手に入ると思います。
    http://linux-ha.osdn.jp/wp/

    キャンセル

  • 2015/07/16 23:29

    ありがとうございます。大変詳しいご説明を頂き感謝いたします。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る