2015年12月03日

Unboundの性能測定/評価(試行錯誤中)

この記事はDNS Advent Calendar 2015 - Qiitaの3日目の記事です。

色々な会社のクラウドサーバを使ってUnbound立てて
パフォーマンステストをしているのですが
あまり納得のいく結果が出ていない状況です。

結果自体に妥当性があるのかどうかというのがまず疑問。
なんとなくグラフィカルでわかりやすいのでrespeerf-reportを
使っているけど、本当にそれでいいのかとか、わからない。

このへん読んで基本に立ち返ろうと思います。
http://dnsops.jp/event/20130718/20130718-stress-tool-hattori-1.pdf
https://www.nic.ad.jp/ja/materials/iw/2013/proceedings/d2/d2-hattori.pdf

今わかっていることとしては
Unboundのチューニングとクラウドサーバのスペック(CPU数とメモリ容量)を揃えたうえで
同じクエリファイルを使って同じ負荷のかけ方をした場合、まぁどこのサービスでも
同じような結果が出るのだけれど、稀に性能が出ないサービスがあったりする。
おそらく他ノードへの影響を与えないために制限をかけているのだろうけれど
コンピューティングリソースの問題なのかネットワーク帯域の問題なのか
現時点ではわからないので、そのへんも見極められるようになると良いなぁと。

ちなみに別にDNSサーバの管理をしているわけでもないし
自分でISP立ち上げるわけでもないので、Unboundのパフォーマンステストは
仕事には全く関係なく完全に趣味の領域なんだけど、楽しいから続けてる。
なぜ楽しいと思うのかは自分でもよくわかっていない。。
posted by maroon at 13:14| Comment(0) | IT_設定関連メモ | このブログの読者になる | 更新情報をチェックする

2015年12月02日

DNSキャッシュサーバだけでできるローカルゾーンの名前解決

この記事はDNS Advent Calendar 2015 - Qiitaの2日目の記事です。

1日目で構築したUnboundはDNSキャッシュサーバとしての機能のみで
ゾーン情報を保持する権威サーバとしては動作しません。

なので普通に考えると、Unboundだけでは
「この名前でこのIPアドレスに変換させたい」
ということはできません。

ですが、Unboundにはlocal-dataという機能がありまして
「この名前でこのIPアドレスに変換させたい」を実現させることができます。

権威サーバを構築した場合との差は
・そのUnboundサーバに問い合わせした際しか有効でない
・他のDNSサーバに情報伝達することができない
あたりでしょうか。

小規模で簡単に名前解決させたい場合は権威サーバたてるより良いでしょう。

書き方はこんな感じです。これをunbound.confに書きます。
local-data: "host1.local. A 192.168.0.1"
local-data: "host2.local. A 192.168.0.2"
local-data: "host3.local. A 192.168.0.3"

なお、ヤマハルータでも以下のように書くことで同じことができるようです。
ip host host1.local 192.168.0.1
ip host host2.local 192.168.0.2
ip host host3.local 192.168.0.3



posted by maroon at 13:32| Comment(0) | IT_設定関連メモ | このブログの読者になる | 更新情報をチェックする

2015年12月01日

Raspberry PiでつくるDNSキャッシュサーバ

この記事はDNS Advent Calendar 2015 - Qiitaの1日目の記事です。

Raspberry Pi B+にUnboundをインストールして
DNSキャッシュサーバを構築したときの話です。

UnboundはオランダのNLnet Labsにより開発されている
オープンソースのDNSキャッシュサーバです。
BINDと異なり権威サーバの機能は持っておらず、
DNSキャッシュサーバとしてのみ動作します。
シンプルな設計となっていることから、
比較的設定が容易かつ高速で動作します。
デフォルトのconfigでもそれなりに動いてくれますが、
今回はRaspberry Pi B+のスペックに合わせた
チューニングを行いましたので
そのへんの話を中心に書きます。

■事前準備
1.Raspberry Pi B+でRaspbianが起動するようにする
2.コンソールかSSHでログインする
3.Unbound 1.15.1をインストールする
手順はこちら
http://blog.watercloud.net/article/410606733.html

■unbound.conf
unboundの設定ファイルは/etc/unbound/unbound.confになります。
デフォルトのまま使うと色々ゴチャゴチャ書いてあるので、
私は普段は
# cd /etc/unbound/
# mv unbound.conf unbound.conf.orig
として、新たにunbound.confを作成してしまいます。

チューニング前の本当に本当に基本的な設定だけを
している状態のunbound.conf
−−−−−−−−−−−−−−−−−−−−
server:
verbosity: 1
interface: 0.0.0.0
do-ip6: no
access-control: xxx.xxx.xxx.xxx/xx allow
edns-buffer-size: 1280
−−−−−−−−−−−−−−−−−−−−

後半にパフォーマンスに関与する項目を足しました。
−−−−−−−−−−−−−−−−−−−−
server:
verbosity: 1
interface: 0.0.0.0
do-ip6: no
access-control: xxx.xxx.xxx.xxx/xx allow
edns-buffer-size: 1280

#toshi__ya wrote
num-threads: 1
msg-cache-slabs: 1
infra-cache-slabs: 1
key-cache-slabs: 1
so-rcvbuf: 8m
so-sndbuf: 8m
num-queries-per-thread: 1000
outgoing-range: 2000
rrset-cache-size: 512m
msg-cache-size: 256m
−−−−−−−−−−−−−−−−−−−−
それぞれのパラメータの算出基準は
以下の資料を参考にして、
Raspberry Pi B+のスペックを考慮して設定しました。

−−−−−−−−−−−−−−−−−−−−
DNSキャッシュサーバチューニングの勘所
http://www.slideshare.net/hdais/dns-32071366
−−−−−−−−−−−−−−−−−−−−

■パラメータの解説
DNSキャッシュサーバの詳しい動作や考え方などは
上記の資料によくまとまっているので
こちらをご参照いただくとして
それぞれの値の説明をしていきます。

num-threads: 1

これはCPUが1コアなのでワーカースレッドも1です。
複数コア・複数CPUの構成の場合、
コア数のぶんだけワーカースレッドをたてることになります。

msg-cache-slabs: 1
infra-cache-slabs: 1
key-cache-slabs: 1

「スレッド数に近い2のN乗」の値を設定すると
良いとのことですが、なにぶんスレッド数が1なので、
全部1にしました。

so-rcvbuf: 8m
so-sndbuf: 8m

これはUnboundの大規模環境向け設定値が4Mまたは8Mと例示されている
とありますので、それに従って最大の8Mとしています。

num-queries-per-thread: 1000
outgoing-range: 2000

基本的にはメモリが許す限り大きな値に設定するとのことですが
そんなにメモリが潤沢なマシンではないので、
num-queries-per-threadはとりあえずで1000を設定。
outgoing-rangeはnum-queries-per-threadの2倍の値と
することが推奨されているので、1000の倍の2000としました。

rrset-cache-size: 512m
msg-cache-size: 256m

B+はメモリが512MBなのでrrset-cache-size は
フルフルに使えるように512mに設定。
実際はOSなどの動作を考えると使える
メモリ量はもっと少ないはずですが。。
msg-cache-sizeはrrset-cache-sizeの半分が
推奨値なので、256mとしました。

チューニングconfigの解説は上記の通り。
resperfを使って何回かベンチマークとりましたが
1000クエリ/秒の負荷で何回かかけると982qpsまで出たので
このハードウェアスペックを考えると上出来だと思います。
ちなみにこれ以上負荷をかけたらプロセスが死にました。。
posted by maroon at 20:21| Comment(0) | IT_設定関連メモ | このブログの読者になる | 更新情報をチェックする