• お問い合わせ
  • ユーザー登録
インデックス

環境設定:メールサーバの性能測定

メールサーバの性能測定 > 環境設定:メールサーバの性能測定



性能測定環境の構築方法

1. 共通環境設定

性能測定に使用した各サーバには、Turbolinux 11 Serverを導入し、下記のネットワーク構成を基に性能測定環境を構築しました。

表 1:性能測定環境のネットワーク構成
項目 サーバA サーバB サーバC
ホスト名 mail mail gw
IPアドレス 192.168.211.10 192.168.212.10 192.168.211.1
192.168.212.1
ネットマスク 255.255.255.0
DNSサーバ 192.168.211.1 192.168.212.1 192.168.211.1
ドメイン名 jp.tlana jp.tlanb jp.tlana
デフォルトゲートウェイ 192.168.211.1 192.168.212.1 192.168.211.1

2. サーバA

送信用メールサーバとして用いるサーバAの各アプリケーションの設定を下記の通り設定しました。

2.1 Linux Kernelに関する設定

メールサーバを稼働させる場合に影響する下記Linux Kernel設定について、本性能測定環境ではデフォルト値のまま使用しました。

表 2:Linux Kernelの設定
対象設定 設定値
/proc/sys/fs/file-max 359789
/proc/sys/kernel/threads-max 81920
/proc/sys/net/ipv4/tcp_rmem 4096  87380  4194304

2.2 メールサーバに関する設定

メール(SMTP)サーバとして稼働させるPostfixを設定しました。Postfixのデフォルト設定値から以下のパラメータを変更しました。なお、この設定値は、Postfixの設定ファイルである、/etc/postfix/main.cfに設定しました。

/usr/sbin/postconfの実行結果
default_destination_concurrency_limit = 200
default_destination_recipient_limit = 100
default_process_limit = 5000
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = jp.tlana
myhostname = mail.jp.tlana
mynetworks = 127.0.0.0/8 192.168.211.0/24
smtp_mx_address_limit = 0
smtp_mx_session_limit = 0

下記のコマンドを実行し、OS起動時にPostfixが自動起動するように設定しました。

# chkconfig postfix on

下記コマンドを実行し、Postfixを起動しました。

# /etc/init.d/postfix restart

POPサーバは、スーパーサーバーデーモンであるxinetd経由が起動するため、下記のコマンドを実行して、POPサーバを有効にしました。

# chkconfig ipop3 on

これにより、/etc/xinetd.d/ipop3のdisable属性の値がno(有効)に書き換わります。xinetdを再起動して、サービスを有効にしました。

# /etc/init.d/xinetd restart

メールクライアントがPOPサーバーにアクセスするには、/etc/hosts.allowファイルを変更しアクセスを許可するホストを指定する必要があります。Turbolinux 11 Serverのxinetdは、TCP Wrappersによるアクセス制御を行う仕様です。このため、下記の記述を/etc/hosts.allowに追加しました。

/etc/hosts.allow
ipop3d: ALL

下記のスクリプトを実行し、テスト用ユーザを作成しました。

#!/bin/sh

PASSWORD=turbolinux
#CRYPTPASSWD=`perl -e "print(crypt('password', 'turbolinux'))"`

BINPATH='/usr/sbin'
LANG=en_US

changePasswd(){
  expect -c "
  spawn passwd $USERNAME
  expect password:
  send $PASSWORD\n
  expect password:
  send $PASSWORD\n
  expect eof"
}


for i in `seq 0 1000`
do
  USERNAME='mailtestuser'$i
  echo $USERNAME
  $BINPATH/userdel -r $USERNAME
  $BINPATH/adduser  $USERNAME
  changePasswd
done


3. サーバB

受信用メールサーバとして用いるサーバBの各アプリケーションの設定を下記の通り設定しました。


3.1 Linux Kernelに関する設定

メールサーバを稼働させる場合に影響する下記Linux Kernel設定について、本性能測定環境ではデフォルト値のまま使用しました。

表 3:Linux Kernelの設定
対象設定 設定値
/proc/sys/fs/file-max 359789
/proc/sys/kernel/threads-max 81920
/proc/sys/net/ipv4/tcp_rmem 4096  87380  4194304


3.2 メールサーバに関する設定

メール(SMTP)サーバとして稼働させるPostfixの設定ファイルを下記の通り変更しました。

/etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = mail.jp.tlanb
mydomain = jp.tlanb
#myorigin = $myhostname
#myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/packages/postfix-2.4.5/samples
readme_directory = /usr/share/doc/packages/postfix-2.4.5/README_FILES
default_destination_concurrency_limit = 200
default_destination_recipient_limit = 100
default_process_limit = 5000
smtp_mx_address_limit = 0
smtp_mx_session_limit = 0

下記のコマンドを実行し、OS起動時にPostfixが自動起動するように設定しました。

# chkconfig postfix on

下記コマンドを実行し、Postfixを起動しました。

# /etc/init.d/postfix restart

POPサーバは、スーパーサーバーデーモンであるxinetd経由が起動するため、下記のコマンドを実行して、POPサーバを有効にしました。

# chkconfig ipop3 on

これにより、/etc/xinetd.d/ipop3のdisable属性の値がno(有効)に書き換わります。xinetdを再起動して、サービスを有効にしました。

# /etc/init.d/xinetd restart

メールクライアントがPOPサーバーにアクセスするには、/etc/hosts.allowファイルを変更しアクセスを許可するホストを指定する必要があります。Turbolinux 11 Serverのxinetdは、TCP Wrappersによるアクセス制御を行う仕様です。このため、下記の記述を/etc/hosts.allowに追加しました。

/etc/hosts.allow
ipop3d: ALL

下記のスクリプトを実行し、テスト用ユーザを作成しました。

#!/bin/sh

PASSWORD=turbolinux
#CRYPTPASSWD=`perl -e "print(crypt('password', 'turbolinux'))"`

BINPATH='/usr/sbin'
LANG=en_US

changePasswd(){
  expect -c "
  spawn passwd $USERNAME
  expect password:
  send $PASSWORD\n
  expect password:
  send $PASSWORD\n
  expect eof"
}


for i in `seq 0 1000`
do
  USERNAME='mailtestuser'$i
  echo $USERNAME
  $BINPATH/userdel -r $USERNAME
  $BINPATH/adduser  $USERNAME
  changePasswd
done



4. サーバC

DNSサーバとして用いるサーバCの設定を下記の通り設定しました。

4.1 DNSサーバに関する設定

DNSサーバとして稼働させるBindの設定ファイルを下記の通り変更しました。

/etc/named.conf
acl corpnets { 192.168.211.0/24; 192.168.212.0/24;};
options {
        listen-on port 53 { corpnets; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { corpnets; };
        recursion yes;
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";

zone "jp.tlana" {
        type master;
        file "jp.tlana";
};

zone "jp.tlanb" {
        type master;
        file "jp.tlanb";
};

zone "211.168.192.in-addr.arpa" {
        type master;
        file "211.168.192.in-addr.arpa";
};

zone "212.168.192.in-addr.arpa" {
        type master;
        file "212.168.192.in-addr.arpa";
};

ドメイン名jp.tlana用の正引きゾーンファイルを下記の通り作成しました。

/var/named/chroot/var/named/jp.tlana
$TTL 1D ; 1 day
@               IN      SOA     gw.jp.tlana. root.gw.jp.tlana. (
                        200811084       ; Serial
                        3H              ; Refresh after 3 hours
                        1H              ; Retry after 1 hour
                        1W              ; Expire after 1 week
                        3H )            ; Minimum TTL of 3 hours
                IN  NS     gw.jp.tlana.
                IN  MX     10  mail.jp.tlana.
gw              IN  A      192.168.211.1
mail            IN  A      192.168.211.10
localhost       IN  A      127.0.0.1
c-111           IN  A      192.168.211.111
c-211           IN  A      192.168.211.211

下記のコマンドを実行し、ファイルへのパーミッション変更しました。

# chown root:named  /var/named/chroot/var/named/jp.tlana
# chmod 644  /var/named/chroot/var/named/jp.tlana

ドメイン名jp.tlana用の逆引きゾーンファイルを下記の通り作成しました。

/var/named/chroot/var/named/211.168.192.in-addr.arpa
$TTL 1D ; 1 day
@       IN SOA  gw.jp.tlana. root.gw.jp.tlana. (
                200811084       ; Serial
                3H              ; Refresh after 3 hours
                1H              ; Retry after 1 hours
                1W              ; Expire after 1 week
                3H )            ; Minimum TTL of 3 hours
        IN  NS   gw.jp.tlana.
        IN  PTR  jp.tlana.
        IN  A    255.255.255.0
1       IN  PTR  gw.jp.tlana.
10      IN  PTR  mail.jp.tlana.
111     IN  PTR  c-111.jp.tlana.
211     IN  PTR  c-211.jp.tlana.

下記のコマンドを実行して、ファイルへのパーミッションを変更しました。

# chown root:named  /var/named/chroot/var/named/211.168.192.in-addr.arpa
# chmod 644  /var/named/chroot/var/named/211.168.192.in-addr.arpa

ドメイン名jp.tlanb用の正引きゾーンファイルを下記の通り作成しました。

/var/named/chroot/var/named/jp.tlanb
$TTL 1D ; 1 day
@               IN      SOA     gw.jp.tlanb. root.gw.jp.tlanb. (
                        200811081       ; Serial
                        3H              ; Refresh after 3 hours
                        1H              ; Retry after 1 hour
                        1W              ; Expire after 1 week
                        3H )            ; Minimum TTL of 3 hours
                IN  NS     gw.jp.tlanb.
                IN  MX     10  mail.jp.tlanb.
gw              IN  A      192.168.212.1
mail            IN  A      192.168.212.10
localhost       IN  A      127.0.0.1

下記のコマンドを実行して、ファイルへのパーミッションを変更しました。

# chown root:named  /var/named/chroot/var/named/jp.tlanb
# chmod 644  /var/named/chroot/var/named/jp.tlanb

ドメイン名jp.tlana用の逆引きゾーンファイルを下記の通り作成しました。

/var/named/chroot/var/named/212.168.192.in-addr.arpa
$TTL 1D ; 1 day
@       IN SOA  gw.jp.tlanb. root.gw.jp.tlanb. (
                200811081       ; Serial
                3H              ; Refresh after 3 hours
                1H              ; Retry after 1 hours
                1W              ; Expire after 1 week
                3H )            ; Minimum TTL of 3 hours
        IN  NS   gw.jp.tlanb.
        IN  PTR  jp.tlanb.
        IN  A    255.255.255.0
1       IN  PTR  gw.jp.tlanb.
10      IN  PTR  mail.jp.tlanb.

下記のコマンドを実行して、ファイルへのパーミッションを変更しました。

# chown root:named  /var/named/chroot/var/named/212.168.192.in-addr.arpa
# chmod 644  /var/named/chroot/var/named/212.168.192.in-addr.arpa

下記のコマンドを実行して、OS起動時にBindが自動的に起動するように設定しました。

# chkconfig named on

下記コマンドを実行して、Bindを起動しました。

# /etc/init.d/named start



性能測定ツール(Postal)の設定

本章では、性能測定ツールとして用いた、Postalに関する設定方法についてまとめています。

1. Postalの入手

Postalのソースファイルを、下記URLから入手しました。
http://freshmeat.net/projects/postal/ 新しくウィンドウが開きます

情報 :性能測定時に最新版であるPostral 0.70をダウンロードしました。



2. Postalのインストール

入手したPostalのソースファイルを/usr/local/srcに保存してビルドしました。

注意 :Postalをインストールするには、Turbolinux 11 Server インストールCD 2(オプショナル CD)から開発ツールのパッケージをインストールする必要があります。

# tar xvzf postal-0.70.tgz -C /usr/local/src/
# cd /usr/local/src/postal-0.70/
# ./configure -disable-gnutls
# make
# make install

情報 :メールサーバに対して高負荷をかけるために、Postalをコンパイルする際に、postal.hの「#define MAX_PROCESSES」を「400」から「1000」に変更しました。

3. Postalの設定

下記のスクリプトを実行し、Postal実行(メールを送信)時に使用する送信先メールアドレスを列挙したファイルを作成しました。

#!/bin/sh

FILENAME=SendUserList.txt
HOSTNAME="@jp.tlanb"

rm -Rf $FILENAME

for i in `seq 0 1000`
do
  USERNAME='mailtestuser'$i
  echo $USERNAME$HOSTNAME >> $FILENAME
done

4. rabidの設定

下記のスクリプトを実行し、rabid実行(メールを受信)時に使用する受信ユーザとパスワードを列挙したファイルを作成しました。

#!/bin/sh

FILENAME=ReceiveUserList.txt
PASSWORD="turbolinux"

rm -Rf $FILENAME

for i in `seq 0 1000`
do
  USERNAME='mailtestuser'$i
  echo $USERNAME $PASSWORD >> $FILENAME
done