さくらのクラウドにDHCPサーバ構築してパフォーマンス測定してみた

さくらインターネットから「さくらのクラウド」の2万円分無料クーポンをいただきました。ありがとうございます。

さくらのクラウドDHCPサーバ運用すれば、自前でサーバ持ってなくていいよな。サーバ買い替えなくてもいいし。VPN張って、DHCPリレー先(helper address)をさくらのクラウドにすればいいよね。とりあえず、さくらのクラウド内でパフォーマンスを測定してみよう。」ってことでやってみた。

さくらのクラウドに2台の仮想サーバを作成する。スイッチ(dhcp-sw)経由で2台を接続する。1台をDHCPサーバ(dhcp01)、もう1台をパフォーマンス測定サーバ(dhcperf)とする。構成図は、以下の通り。
f:id:mittsun1979:20150123132927p:plain

パフォーマンス測定に使用したツールは、nominum社提供のdhcperfというやつ。
Measurement Tools - Nominum

用意したもの

  • サーバ x 2台
      • サーバプラン
        • 仮想コア 1
        • メモリ 1GB
    • ディスク
      • ディスクプラン SSDプラン
      • ディスクソース アーカイブ(簡易)
      • アーカイブ選択 [public] 20GB CentOS 7.0 64bit(基本セット)
      • 準仮想化モードを使用する(Virtio)
    • NIC
      • インターネットに接続
      • 準仮想化モードを使用する(Virtio)
  • ネットワーク
    • スイッチ(ルータ いいえ) 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 forever

2. 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!