Ruby
KVS
dns
nosql
roma
ROMADay 24

エラー時の備えその3(DNSキャッシュ機能)

More than 1 year has passed since last update.

DNSキャッシュ機能

概要

DNSサーバの情報をキャッシュとしてROMAインスタンスが保存しておく機能
インスタンスがIPアドレスではなくHostName等で作成されている場合の為の機能

  • ( romaA_10001みたいな) DNS_cash.png

動き

なんらかの理由でDNSサーバとのアクセスが出来なくなった場合、IPアドレスでもFQDNでもない名前のinstanceの場合、ROMAが別サーバにあるinstanceにアクセスできなくなってしまう

これを防ぐため、ROMA起動時にDNSの情報をキャッシュとして各instanceに保持し、このデータを基に通信を行う

不足の事態でDNSサーバがダウンしてもROMAのinstance間の通信は担保される!!

使い方

configで設定する方法

DNS_CAHINGの値をtrueにする

config.rb
.
.
# lookup hostname to the nameserver everytime or only first time.
# if set true, the result of lookup will keep.
DNS_CACHING = true
.
.

動的変更コマンド

ROMA起動後にROMAを止めずに変更したい場合は、以下のコマンドを実行

> switch_dns_caching [on|off]

Example

条件

  • IPアドレスでもFQDNでもない名前でインスタンスを作成する (今回は以下のように作成)
  • インスタンス
    • vm1_20001
    • vm1_20002
    • vm2_20001
    • vm2_20002
  • サーバ
    • vm1( 192.168.223.2 )
    • vm1( 192.168.223.3 )
  • /etc/hosts 以下のように追記
192.168.223.2 vm1
192.168.223.3 vm2

確認

DNSキャッシュ機能offの場合

vm1サーバにて
# vi /etc/hosts
  ###以下の行を削除する
  192.168.223.3 vm2

$ telnet vm1 20001
> balse
  {"vm1_20002"=>"BYE", "vm2_20001"=>nil, "vm2_20002"=>nil, "vm1_20001"=>"BYE"}

自サーバ内のvm1のサーバはbalse(クラスター終了コマンド)を受け取っているが、vm2は送り先がわからずnilになっている

DNSキャッシュ機能onの場合

vm1サーバにて
# vi /etc/hosts
  ###以下の行を削除する
  192.168.223.3 vm2

$ telnet vm1 20001
> balse
  {"vm1_20002"=>"BYE", "vm2_20001"=>nil, "vm2_20002"=>nil, "vm1_20001"=>"BYE"}

/etc/hostsを削除したが、instance自体にDNS情報を保存しているのでその情報に基づいてvm2にも正常にbalseコマンドを送ることができた!!