Weighted Routingとは
DNSクエリに対して指定した割合で一連のレコードセットの中からどれかを返す。
同名・同タイプのレコードセットを作成することで一連のレコードセットと見なされる。
Simpleなレコードセットとの違いは Set ID
と Weight
を指定するところ。
Set IDは一連のレコードセット内でユニークなら適当でいい。
あるレコードセットのWeightを、一連のレコードセットのWeightの合計で割った割合で応答するようになる。
Weight / Weight合計
Aliasレコードを使わない場合、LatencyやGeolocationベースのルーティングは割増料金になるが、Weightedベースのルーティングは基本料金で使える。
https://aws.amazon.com/jp/route53/pricing/
レコードセットの作成
既存のSimpleなAレコードをWeighted Routingにしてみる。
1%だけ新規レコードのほうに流したい。
これが初期状態。SimpleなAレコードが1行あるだけ。
# | name | type | value | ttl | weight | set id |
---|---|---|---|---|---|---|
1 | www.example.com | A | 0.0.0.0 | 300 | - | - |
まず、既存のレコードセットをSimple → Weighted に変更する。
ELBのAliasレコードを追加するつもりなので、それに合わせてTTLは60秒にしておく。理由は後述。
99%は既存レコードを応答したいのでWeightは99に設定。
この時点で99/99の割合で既存レコードが応答される。要するにこれまで通り。
# | name | type | value | ttl | weight | set id |
---|---|---|---|---|---|---|
1 | www.example.com | A | 0.0.0.0 | 60 | 99 | idc |
続けて、ELBのAliasレコードをWeightedで追加する。
Weightは1。これで1/100の割合でこちらが応答される。
# | name | type | value | ttl | weight | set id |
---|---|---|---|---|---|---|
1 | www.example.com | A | 0.0.0.0 | 60 | 99 | idc |
2 | www.example.com | A | ALIAS dualstack...amazonaws.com | - | 1 | aws |
問題なければ100%新規レコードを応答する。
# | name | type | value | ttl | weight | set id |
---|---|---|---|---|---|---|
1 | www.example.com | A | 0.0.0.0 | 60 | 0 | idc |
2 | www.example.com | A | ALIAS dualstack...amazonaws.com | - | 100 | aws |
その他
作成できるタイプ
AレコードはもちろんCNAMEレコードも複数作成できる。
Aliasも使える。
TTLの設定
レコードセットのTTLを変更すると全ての関連するレコードセットのTTLが一括で変更される。
一連のレコードセットにELBのAliasが含まれる場合、Aliasでない他のレコードセットのTTLも60秒に設定することが推奨されている。
ELBのTTL(60秒)に合わせないと指定した割合で応答しないことになるから。
負荷が分散できないケース
名前解決を行うクライアント(レゾルバ)数が少ない場合、たまに大量のアクセスが来ることになる。
例えば、クライアントが1人の場合、加重ルーティングで指定した割合で全てのアクセスが来る。
大量のアクセス→アクセスなし→大量のアクセス→・・・を繰り返す状態。
逆にクライアント数が多ければ指定した割合と同じ傾向でアクセスが分散される。