SkyDNSのプチ性能調査
DNS 大好き娘の皆さん今晩は。これは DNS Advent Calendar 2015 の 16 日目のエントリです。
16日目のエントリなのに 16 日に公開できなくてごめんなさい…orz
このエントリでは SkyDNS の簡単な性能調査をしてみようと思います。
性能計測パターンは1台と3台の2構成で計測してみます。(本当はもっと台数を線形に増やしてみたいんですが、ちょっと時間的に辛いので、日和って3台までで…)
以下、簡単な環境情報です。
- AMI: Amazon Linux AMI 2015.09.1 (HVM), SSD Volume Type - ami-383c1956
- SkyDNS の Instance Type: t2.micro
- 負荷をかける側の Instance Type: t2.medium
- SkyDNS:
- etcd:
1台構成時も3台構成時も1台のインスタンスに etcd と SkyDNS がそれぞれ配置されます。図にすると以下のような構成になります。
賢明な諸兄は「え?この構成なら何台構成になっても同じじゃね?」と気付いたと思いますが、まぁ何事もやってみないとわからないってことで、まずは1台構成から測定してみます。測定環境はこんな感じです。
蛇足かもしれませんが、Amazon Linux 上に SkyDNS 環境を構築する手順が以下になります。
# yum install git
# cd /usr/local/src/
# wget https://storage.googleapis.com/golang/go1.5.2.linux-amd64.tar.gz
# tar -xzf go1.5.2.linux-amd64.tar.gz
# mv go /opt/
# export GOPATH=/usr/local/go
# export GOROOT=/opt/go
# export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
# mkdir -p $GOPATH
# go get github.com/coreos/etcd
# cd $GOPATH/src/github.com/coreos/etcd/etcdctl
# go install
# go get github.com/skynetservices/skydns
一方、Amazon Linux 上に dnsperf をインストールする手順は以下です。
# yum --enablerepo=epel install dnsperf
では早速 SkyDNS を起動させます。
# etcd &
# skydns -addr 0.0.0.0:53 &
次に SkyDNS に今回の性能調査のためのデータを以下のように手抜きで投入します。(SkyDNS が起動しているホストで実行)
# for i in `seq 1 10000`; do echo $i | md5sum | sed -e "s|\([0-9a-f]*\)\s.*$|etcdctl set /skydns/local/skydns/\1 `printf "'{\\"host\\":\\"192.168.%d.%d\\"}'" $(( ($i >> 8) & 0xff )) $(( $i & 0xff ))`|" | sh; done
次に投入したデータを dnsperf で索くためのクエリを以下のように作成します。(dnsperf をインストールしたホストで実行)
# for i in `seq 1 10000`; do echo $i | md5sum | sed -e "s|\([0-9a-f]*\)\s.*$|\1.local.\tA|"; done > /tmp/queryfile
ちゃんと索けるかどうかを確認します。
# dig @172.30.2.34 a `head -n 1 /tmp/queryfile`