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_設定関連メモ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: