さくらのクラウドにDHCPサーバ構築してパフォーマンス測定してみた
さくらインターネットから「さくらのクラウド」の2万円分無料クーポンをいただきました。ありがとうございます。
「さくらのクラウドでDHCPサーバ運用すれば、自前でサーバ持ってなくていいよな。サーバ買い替えなくてもいいし。VPN張って、DHCPリレー先(helper address)をさくらのクラウドにすればいいよね。とりあえず、さくらのクラウド内でパフォーマンスを測定してみよう。」ってことでやってみた。
さくらのクラウドに2台の仮想サーバを作成する。スイッチ(dhcp-sw)経由で2台を接続する。1台をDHCPサーバ(dhcp01)、もう1台をパフォーマンス測定サーバ(dhcperf)とする。構成図は、以下の通り。

パフォーマンス測定に使用したツールは、nominum社提供のdhcperfというやつ。
Measurement Tools - Nominum
用意したもの
- サーバ x 2台
- ネットワーク
- スイッチ(ルータ いいえ) x 1台
DHCPサーバの準備
1. インタフェースの設定
[root@dhcp01 ~]# nmcli add type eth ifname eth1 con-name eth1
Connection 'eth1' (f1fdbd45-0160-471c-9357-ff302598d36f) successfully added.
[root@dhcp01 ~]# nmcli c mod eth1 ipv4.method manual ipv4.addresses "10.0.0.1/16 10.0.255.254"
[root@dhcp01 ~]# # nmcli c down eth1
Error: 'eth1' is not an active connection.
[root@dhcp01 ~]# # nmcli c up eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@dhcp01 tmp]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 9c:a3:ba:30:44:16 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/16 brd 10.0.255.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::9ea3:baff:fe30:4416/64 scope link
valid_lft forever preferred_lft forever2. dhcpのインストール
[root@dhcp01 ~]# yum install dhcp <snip> Installed: dhcp.x86_64 12:4.2.5-27.el7.centos.2 Complete!
3. dhcpd.confの設定
[root@dhcp01 ~]# vi /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
authoritative;
ddns-update-style none;
subnet 10.0.0.0 netmask 255.255.0.0 {
default-lease-time 600;
max-lease-time 7200;
range 10.0.0.10 10.0.255.253;
option routers 10.0.255.254;
ddns-updates off;
}
#NIC
subnet 133.242.*.0 netmask 255.255.255.0 {
not authoritative;
}4. dhcpのリースファイル作成
[root@dhcp01 ~]# touch /var/tmp/dhcpd.leases
5. dhcpdのコンフィグファイルのテスト
[root@dhcp01 ~]# dhcpd -t -cf /etc/dhcp/dhcpd.conf -lf /var/tmp/dhcpd.leases
コンフィグにerrorがあると、以下のような感じです。
/etc/dhcp/dhcpd.conf line 27: expecting a declaration }; ^ Configuration file errors encountered -- exiting <snip>
6. dhcpdの起動
[root@dhcp01 ~]# dhcpd -cf /etc/dhcp/dhcpd.conf -lf /var/tmp/dhcpd.leases Internet Systems Consortium DHCP Server 4.2.5 Copyright 2004-2013 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Wrote 0 leases to leases file. Listening on LPF/eth1/9c:a3:ba:30:44:16/10.0.0.0/16 Sending on LPF/eth1/9c:a3:ba:30:44:16/10.0.0.0/16 Listening on LPF/eth0/9c:a3:ba:30:ee:51/133.242.*.*/24 Sending on LPF/eth0/9c:a3:ba:30:ee:51/133.242.*.*/24 Sending on Socket/fallback/fallback-net
7. dhcpdの起動を確認
[root@dhcp01 ~]# ps axww | grep dhcp[d] 5550 ? Ss 0:00 dhcpd -cf /etc/dhcp/dhcpd.conf -lf /var/tmp/dhcpd.leases
8. ログを眺める
[root@dhcp01 ~]# tailf /var/log/messages Jan 22 15:32:50 dhcp01 dhcpd: Internet Systems Consortium DHCP Server 4.2.5
dhcperfの準備
1. インタフェースの設定
[root@dhcp01 ~]# nmcli add type eth ifname eth1 con-name eth1
Connection 'eth1' (862f4a5e-e055-430e-94b5-8e5b9c2c9209) successfully added.
[root@dhcp01 ~]# nmcli c mod eth1 ipv4.method manual ipv4.addresses "10.0.0.2/16 10.0.255.254"
[root@dhcp01 ~]# # nmcli c down eth1
Error: 'eth1' is not an active connection.
[root@dhcp01 ~]# # nmcli c up eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@dhcpperf ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 9c:a3:ba:30:ef:89 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/16 brd 10.0.255.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::9ea3:baff:fe30:ef89/64 scope link
valid_lft forever preferred_lft forever
2. wgetのインストール
wgetインストール済みであれば、skip
[root@dhcpperf ~]# yum install wget <snip> Complete!
3. dhcperfのパッケージをダウンロード
[root@dhcpperf ~]# wget ftp://ftp.nominum.com/pub/nominum/dhcperf/1.0.1.0/dhcperf-1.0.1.0-1-rhel-4-i386.tar.gz
4. dhcperfのインストール
[root@dhcpperf ~]# tar xzf dhcperf-1.0.1.0-1-rhel-4-i386.tar.gz [root@dhcpperf ~]# rpm -ivh ./dhcperf-1.0.1.0-1/dhcperf-1.0.1.0-1.i386.rpm
5. dhcperfのテスト
[root@dhcpperf ~]# /usr/local/nom/bin/dhcperf --server 10.0.0.1 --one-discover Sending DHCPDISCOVER. Received DHCPOFFER of 10.0.128.106. Sending DHCPREQUEST for 10.0.128.106. Received DHCPACK of 10.0.128.106. Acquired address: 10.0.128.106
6. dhcperfでパフォーマンス測定
DISCOVER - OFFER - REQUEST - ACK - RELEASE の測定
[root@dhcpperf ~]# /usr/local/nom/bin/dhcperf --server 10.0.0.1 --discover --test-duration 30 Beginning DHCPDISCOVER load test. Initial probe complete: High-water mark is 61 clients/second. Preparing for next test run. Beginning test run: 30 clients/second for 30 seconds. Succeeded: 0/900 clients failed. Preparing for next test run. Beginning test run: 45 clients/second for 30 seconds. Stopping run after 6 seconds; 2/109 clients failed. Preparing for next test run. Beginning test run: 37 clients/second for 30 seconds. Stopping run after 16 seconds; 2/542 clients failed. Preparing for next test run. Beginning test run: 33 clients/second for 30 seconds. Succeeded: 0/990 clients failed. Preparing for next test run. Beginning test run: 35 clients/second for 30 seconds. Succeeded: 0/1050 clients failed. Preparing for next test run. Beginning test run: 36 clients/second for 30 seconds. Stopping run after 15 seconds; 2/430 clients failed. 35 five-way handshakes per second.
7. dhcperfでパフォーマンス測定
REQUEST - ACK の測定
[root@dhcpperf ~]# /usr/local/nom/bin/dhcperf --server 10.0.0.1 --renew --test-d uration 30 Creating 20000 clients for renew test. 20000 clients available Beginning DHCPRENEW load test. Initial probe complete: High-water mark is 209 clients/second. Preparing for next test run. Beginning test run: 104 clients/second for 30 seconds. Stopping run after 11 seconds; 4/935 clients failed. Preparing for next test run. Beginning test run: 52 clients/second for 30 seconds. Succeeded: 0/1560 clients failed. Preparing for next test run. Beginning test run: 78 clients/second for 30 seconds. Stopping run after 23 seconds; 3/1776 clients failed. Preparing for next test run. Beginning test run: 65 clients/second for 30 seconds. Succeeded: 0/1950 clients failed. Preparing for next test run. Beginning test run: 71 clients/second for 30 seconds. Succeeded: 0/2130 clients failed. Preparing for next test run. Beginning test run: 74 clients/second for 30 seconds. Succeeded: 0/2220 clients failed. Preparing for next test run. Beginning test run: 76 clients/second for 30 seconds. Succeeded: 0/2280 clients failed. 76 DHCPRENEW transactions per second.
それぞれのテストを6回実施した結果。
| テスト種別 | 1目 | 2回目 | 3回目 | 4回目 | 5回目 | 6回目 | 平均 |
|---|---|---|---|---|---|---|---|
| RENEW[回/秒] | 76 | 74 | 94 | 71 | 92 | 59 | 77.6 |
| DISCOVER[回/秒] | 35 | 30 | 32 | 32 | 28 | 31 | 31.3 |
※RENEWは、REQUEST-ACKで1回。DISCOVERは、DISCOVER-OFFER-REQUEST-ACK-RELEASEで1回。
VPN張ってなかったり, DHCPに設定しているサブネット1つだったりと実際の利用を想定した環境と全然違って、このデータ意味あるのかという感も否めませんが。今後、下記を参考にVyOSでVPN張ってテストしてみたい。
サイト間VPN設定 | さくらのクラウドニュース
dhcperfがインストールに失敗した時の対処例
[root@dhcpperf ~]# rpm -ivh ./dhcperf-1.0.1.0-1/dhcperf-1.0.1.0-1.i386.rpm error: Failed dependencies: libc.so.6 is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.0) is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.1) is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.1.3) is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.2) is needed by dhcperf-1.0.1.0-1.i386 libc.so.6(GLIBC_2.3) is needed by dhcperf-1.0.1.0-1.i386 libm.so.6 is needed by dhcperf-1.0.1.0-1.i386 libresolv.so.2 is needed by dhcperf-1.0.1.0-1.i386 [root@dhcpperf ~]# yum install glibc* <snip> Complete! [root@dhcpperf ~]# yum install glibc*i686 <snip> Complete!