SRV RR
SRVレコードのメモ.
SRVリソースレコードを一言で説明すると,サービスとサーバ&ポートを結びつけるためのDNSレコード. ポート指定まで出来る汎用MXレコード,というイメージ. MXと同じく,冗長構成および負荷分散もサポートしている.
例えば,IM用プロトコルであるJabberは,サーバ間での通信で宛先サーバを決定するためにSRVレコードを利用している. Jabberを利用している代表的なサービスであるGoogle Talkは,次のようなJabber用SRVレコードを持っている.
$ dig _jabber._tcp.gmail.com srv
_jabber._tcp.gmail.com. 86400 IN SRV 5 0 5269 xmpp-server.l.google.com.
_jabber._tcp.gmail.com. 86400 IN SRV 20 0 5269 xmpp-server1.l.google.com.
_jabber._tcp.gmail.com. 86400 IN SRV 20 0 5269 xmpp-server2.l.google.com.
_jabber._tcp.gmail.com. 86400 IN SRV 20 0 5269 xmpp-server3.l.google.com.
_jabber._tcp.gmail.com. 86400 IN SRV 20 0 5269 xmpp-server4.l.google.com.
$ dig _xmpp-server._tcp.gmail.com srv
_xmpp-server._tcp.gmail.com. 86372 IN SRV 20 0 5269 xmpp-server4.l.google.com.
_xmpp-server._tcp.gmail.com. 86372 IN SRV 5 0 5269 xmpp-server.l.google.com.
_xmpp-server._tcp.gmail.com. 86372 IN SRV 20 0 5269 xmpp-server1.l.google.com.
_xmpp-server._tcp.gmail.com. 86372 IN SRV 20 0 5269 xmpp-server2.l.google.com.
_xmpp-server._tcp.gmail.com. 86372 IN SRV 20 0 5269 xmpp-server3.l.google.com.
$ dig _xmpp-client._tcp.gmail.com srv
_xmpp-client._tcp.gmail.com. 86400 IN SRV 5 0 5222 talk.l.google.com.
_xmpp-client._tcp.gmail.com. 86400 IN SRV 20 0 5222 talk1.l.google.com.
_xmpp-client._tcp.gmail.com. 86400 IN SRV 20 0 5222 talk2.l.google.com.
_xmpp-client._tcp.gmail.com. 86400 IN SRV 20 0 5222 talk3.l.google.com.
_xmpp-client._tcp.gmail.com. 86400 IN SRV 20 0 5222 talk4.l.google.com.
Google Talkのユーザsomebody@gmail.com
に他のJabberサービスのユーザsomeone@other-jabber.com
がIMを送った場合の動作は次のようになる.
other-jabber.com
はドメインgmail.com
の場所を知るために,_xmpp-server._tcp.gmail.com.
の SRV レコードを問い合わせる- 応答レコードのなかで最もプライオリティ値の高い
xmpp-server.l.google.com.
の5269/tcp
に接続に行く xmpp-server.l.google.com.
が落ちていた場合,セカンダリ Jabber サーバxmpp-server{1-4}.l.google.com.
にアクセスする.どれを選ぶかは クライアントがランダムに決定 する.
上記の動作は,メールシステムがMTAを利用する場合と非常に良く似ている.
SRVレコードの書式は以下の通り.
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
PriorityはMXレコードで言うところのpreference値,Weightは負荷分散のためのパラメータだ. MXラウンドロビンでは均一な負荷分散しか出来なかったが,Weightを設定することで重み付けを行えるようになっている.
負荷分散に関して言えば,DNSラウンドロビンとSRVレコードでは分散を実現する仕組みが異なる. DNSラウンドロビンはDNSサーバが返答するレコードを分散させていたが,SRVレコードの場合はクライアントが選ぶレコードを分散させる.