2008年10月11日土曜日

ad01の設定

sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.231/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:E7/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=ad01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

ln -s /etc/xen/ad01 /etc/xen/auto/ad01

output_buffering = Off
zlib.output_compression = Off
register_argc_argv = On
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.detect_order = auto
mbstring.substitute_character = none;

/etc/rc.d/init.d/saslauthd start
chkconfig saslauthd on
chkconfig --list saslauthd
mkdir -p /etc/skel/Maildir/new
mkdir -p /etc/skel/Maildir/cur
mkdir -p /etc/skel/Maildir/tmp
chmod -R 700 /etc/skel/Maildir/
/etc/rc.d/init.d/sendmail stop
chkconfig sendmail off
chkconfig --list sendmail
alternatives --set mta /usr/sbin/sendmail.postfix
/etc/rc.d/init.d/postfix start
chkconfig postfix on
chkconfig --list postfix

あとpostfixの設定、と。

2008年5月27日火曜日

PHPでImageMagickを使う

# vi /usr/share/pear/pearcmd.php
@ini_set('memory_limit','80M'); を追記

# yum install ImageMagick-devel
# pecl install imagick
# vi /etc/php.ini
extension=imagick.so を追記

# service httpd restart
# yum install dcraw ※RAW現像用

■参考
http://labs.uechoco.com/blog/2008/04/phppecl.html

■imagick2.0系のドキュメント
http://php.morva.net/manual/ja/book.imagick.php
ネットに出回っているのは1.0系が多く、使えない。後方互換なし。

2008年5月3日土曜日

MySQLのバックアップ

毎回忘れるのでメモ。

データ元で
# /kfs/backup/mysqlsnapshot -u [ID] -p [PW] -l -v -s /kfs/backup/output
# rsync -av /kfs/backup/output/* dbm01.hoge.com:/var/lib/mysql/

データ先で
# service mysqld stop
# cd /var/lib/mysql
# tar -zxvf *.tar ←1つずつ展開しないとだめ。
# service mysqld start

なおInnnoDBの場合はmysqlsnapshotでは取れない。
# mysqldump -u*** -p*** --all-databases -l --flush-logs > ***.sql

2008年4月26日土曜日

ssh01を立ち上げる

外部からのSSH着信用に専用待ち受けサーバを立てることにしました。
やっぱ危ないもんね。

cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/ssh01.img

cp /etc/xen/standard /etc/xen/ssh01
sed -i 's/name = "standard"/name = "ssh01"/g' /etc/xen/ssh01
sed -i 's/maxmem = 512/maxmem = 256/g' /etc/xen/ssh01
sed -i 's/memory = 512/memory = 256/g' /etc/xen/ssh01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa630029"/g' /etc/xen/ssh01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/ssh01.img,xvda,w\" \]/g' /etc/xen/ssh01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:29,bridge=xenbr0\" \]/g' /etc/xen/ssh01

○ssh01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.41/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:29/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=ssh01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○公開鍵設定まで
# yum update
・DNSに設定追加
・Webmin Clusterに参加させ、ユーザーを同期させる
・SSH公開鍵のセット
# cd ~
# mkdir .ssh
# vi .ssh/authorized_keys
公開鍵をペースト
# chmod 600 .ssh/authorized_keys
# chmod 700 .ssh
# chwon -R hoge:hoge .ssh
これを各ユーザー分セットしてしまえ

○鍵なしログイン禁止
# vi /etc/ssh/sshd_config
#PasswordAuthentication yes
→PasswordAuthentication no
# /etc/rc.d/init.d/sshd restart

いじょ。

なお、鍵はPoderosaで作成しましたが、WinSCPとPuTTyはPuTTy形式の秘密鍵しか認識しないので、秘密鍵についてはPoderosaで生成後、puttygenでputty形式に変換しました。

あとー、/etc/snmp/snmpd.confを他のサーバからコピーしておく。standardイメージには入ってないです。

2008年4月20日日曜日

unixbenchによるベンチマークテスト

unixbenchでベンチしてみる。
rpmforgeのx86_64のrpmはディレクトリ構成がイケてないので、シンボリックリンク貼っております。

# yum --enablerepo=rpmforge install unixbench
# ln -s /usr/lib64/unixbench /usr/lib/unixbench
# unixbench

このまま30~40分待つ。

# rm /usr/lib/unixbench
# yum remove unixbench

なお、x86_64でi386を使う場合は、rpm持ってきてrpmコマンドで入れないとだめだぞ。
# wget http://ftp-stud.fht-esslingen.de/dag/redhat/el5/en/i386/dag/RPMS/unixbench-4.0.1-1.el5.rf.i386.rpm
# rpm --install unixbench-4.0.1-1.el5.rf.i386.rpm
# unixbench
# rpm --erase unixbench

Celeron D 341 と Core 2 Quad のunixbench対決結果

プロセッサCelD341CelD341Q6700CelD341Q6700
ドメイン種別Dom0DomUDom0Dom0Dom0
ドメイン名/td>alphadevalphabetaalpha
unixbenchのアーキテクチャx86_64x86_64x86_64i386i386
Arithmetic Test (type = double)237.4235.3287.5213.4240.0
Dhrystone 2 using register variables526.2525.31297.2385.3945.0
Execl Throughput173.87.8372.3202.8417.0
File Copy 1024 bufsize 2000 maxblocks322.3319.0802.4316.5708.6
File Copy 256 bufsize 500 maxblocks212.2214.8530.8207.9463.8
File Copy 4096 bufsize 8000 maxblocks590.9525.9301.0586.0297.1
Pipe Throughput156.0171.6404.1155.4333.5
Pipe-based Context Switching0.00.00.0111.0221.0
Process Creation117.9114.5304.5152.0393.8
Shell Scripts (8 concurrent)321.768.2312.8328.3320.5
System Call Overhead115.1119.0290.1102.8209.4

2008年4月13日日曜日

全Dom0にPostfixを入れる

しまった、面倒なことになってしまった。
PHPやPerlはsendmailをコマンドラインで叩いてメール送信するので、各Dom0にMTAを導入してやらないとメールを集約できないじゃん・・・。。。

Webminで全mail01を除く各Dom0にPostfixを入れて、設定ファイルをコピーすることにする。ああ、まんどい。
※alphaには入れない。Dom0が常に動いているとは言い切れないのでトラブルの元。

全DomUに
# yum -y install postfix

全DomUに設定追記
myhostname = stats01.hoge.com
mydomain = hoge.com
myorigin = $mydomain
inet_interfaces = all
#proxy_interfaces =
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/

#SMTP-Auth
smtpd_banner = $myhostname ESMTP unknown
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

#MailSizeLimitter 100MB
message_size_limit = 104857600

#MailBoxSizeLimitter 500MB
mailbox_size_limit = 512000000

mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domains = $mydestination

relayhost = mail01.hoge.com
#transport_maps = hash:/etc/postfix/transport
#alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases

#manual setting
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include
disable_vrfy_command = yes
allow_percent_hack = yes
swap_bangpath = yes
forward_path = $home/.forward$recipient_delimiter$extension,$home/.forward
sendmail_path = /usr/sbin/sendmail

これでローカル配信以外は全部mail01.hoge.comにリレーされる。
全DomUで
# /etc/rc.d/init.d/saslauthd start
# chkconfig saslauthd on
# chkconfig --list saslauthd
# mkdir -p /etc/skel/Maildir/new
# mkdir -p /etc/skel/Maildir/cur
# mkdir -p /etc/skel/Maildir/tmp
# chmod -R 700 /etc/skel/Maildir/
# /etc/rc.d/init.d/sendmail stop
# chkconfig sendmail off
# chkconfig --list sendmail
# alternatives --set mta /usr/sbin/sendmail.postfix
# /etc/rc.d/init.d/postfix start
# chkconfig postfix on
# chkconfig --list postfix

これでよしと。

■動作まとめ
○mail01
@hoge.com宛・・・ローカル配信する。
外向け・・・携帯はプロバイダSMTPサーバ、その他は直接当該SMTPサーバにリレー。
外から@xxx.hoge.com宛・・・全部ローカル配信。

○mail01以外
@hoge.com宛・・・ローカル配信する。
@xxx.hoge.com宛・・・該当xxx.hoge.comにリレー。
外向け・・・mail01.hoge.com宛にリレー。
外から@xxx.hoge.com宛・・・全部ローカル配信。

DomU mail01の設定

■Postfix&IMAPサーバ
○参考サイト
http://centossrv.com/postfix.shtml

○Postfix設定 全部最後にまとめて書く。
# vi /etc/postfix/main.cf
myhostname = mail01.hoge.com
mydomain = hoge.com
myorigin = $mydomain
inet_interfaces = all
#proxy_interfaces =
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/

#SMTP-Auth
smtpd_banner = $myhostname ESMTP unknown
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

#MailSizeLimitter 100MB
message_size_limit = 104857600

#MailBoxSizeLimitter 500MB
mailbox_size_limit = 512000000

mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domains = $mydestination

#relayhost = op25b.asahi-net.or.jp
transport_maps = hash:/etc/postfix/transport
alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases

#manual setting
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include
disable_vrfy_command = yes
allow_percent_hack = yes
swap_bangpath = yes
forward_path = $home/.forward$recipient_delimiter$extension,$home/.forward
sendmail_path = /usr/sbin/sendmail


# vi /etc/postfix/transport
最後に追記
ezweb.ne.jp :mail.asahi-net.or.jp
.ezweb.ne.jp :mail.asahi-net.or.jp
docomo.ne.jp :mail.asahi-net.or.jp
.docomo.ne.jp :mail.asahi-net.or.jp
vodafone.ne.jp :mail.asahi-net.or.jp
.vodafone.ne.jp :mail.asahi-net.or.jp
softbank.ne.jp :mail.asahi-net.or.jp
.softbank.ne.jp :mail.asahi-net.or.jp
pdx.ne.jp :mail.asahi-net.or.jp
.pdx.ne.jp :mail.asahi-net.or.jp


○SMTP-AuthにシステムのID/PWを使う
# /etc/rc.d/init.d/saslauthd start
# chkconfig saslauthd on
# chkconfig --list saslauthd

○Maildir形式メールボックス自動作成
# mkdir -p /etc/skel/Maildir/new
# mkdir -p /etc/skel/Maildir/cur
# mkdir -p /etc/skel/Maildir/tmp
# chmod -R 700 /etc/skel/Maildir/

○Sendmail止める
# /etc/rc.d/init.d/sendmail stop
# chkconfig sendmail off
# chkconfig --list sendmail
# alternatives --config mta

○Postfix起動
# /etc/rc.d/init.d/postfix start
# chkconfig postfix on
# chkconfig --list postfix


続いてDovecot(今回はIMAPのみとする)
これも最後にまとめて追記。
#vi /etc/dovecot.conf
protocols = imap imaps
mail_location = maildir:~/Maildir

あと自動起動設定して完了。

なお、ユーザーiwataについてはiwata01.hoge.comにメールを転送するよう、.forwardファイルを設定しておく。


○mailman
mailmanもインスコしておく。

# yum install mailman
# vi /etc/mailman/mm_cfg.py
DEFAULT_URL_HOST = 'mail.hoge.com'
DEFAULT_EMAIL_HOST = 'hoge.com'

MTA = 'Postfix'
DEFAULT_SERVER_LANGUAGE = 'ja'
DEFAULT_GENERIC_NONMEMBER_ACTION = 2
DEFAULT_LIST_ADVERTISED = No
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s:%%d] "
DEFAULT_REPLY_GOES_TO_LIST = 1
OWNERS_CAN_ENABLE_PERSONALIZATION = Yes
VERP_PERSONALIZED_DELIVERIES = Yes

# /usr/lib/mailman/bin/mmsitepass [パスワード]
# /usr/lib/mailman/bin/genaliases
aliasesが /etc/mailman/aliases に生成される。
# chown mailman. /etc/mailman/aliases*
# chmod g+w /etc/mailman/aliases*
# vi /etc/postfix/main.cf
alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases
# /etc/rc.d/init.d/postfix restart
# /etc/rc.d/init.d/httpd reload

ここまででインスコは完了。続いてデータ引き継いでおく。
# rsync -av 192.168.0.9:/etc/mailman /etc/
# rsync -av 192.168.0.9:/usr/lib/mailman /usr/lib/
# rsync -av 192.168.0.9:/var/lib/mailman /var/lib/
# rsync -av 192.168.0.9:/var/log/mailman /var/log/

あと、ドメイン変更は以下を参考に。
http://mm.tkikuchi.net/pipermail/mmjp-users/2004-June/000917.html

# /etc/rc.d/init.d/postfix restart
# /etc/rc.d/init.d/httpd reload
# /etc/rc.d/init.d/mailman restart

で完了。

オリジナルCMS HogeCMSの改造

■DBサーバ切り替え
このあたり。
# find ./ -name \*.php -print | xargs grep dbm01
mailsend/mail_send.php
edit.php
beacon.php
gallery/config.php
loginsys/login.php
beacon_bench.php

■キャッシュ対応
Squidを入れたので、キャッシュ制御をちゃんとせねばならん。

○common.php - 5分間キャッシュ有効
header("Expires: ".gmdate("D, d M Y H:i:s",time()+300)." GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: public, max-age=300");
header("Vary: User-Agent");

※投稿フォームがキャッシュされると困るので、index.phpに手を入れないとダメだな・・・。。

○beacon.php - キャッシュさせない
header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

○image.php - 5分間キャッシュ有効
header("Expires: ".gmdate("D, d M Y H:i:s",time()+300)." GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: public, max-age=300");
header("Vary: User-Agent");
※下の方にキャッシュ無効設定が隠れているので注意

DomU sc01の設定

# yum install squid
# mv /etc/squid/squid.conf /etc/squid/squid.conf.org
# vi /etc/squid/squid.conf
http_port 80 vhost
cache_peer www01.hoge.com parent 80 0 no-query originserver round-robin

acl valid1 dstdomain .hoge.com
http_access allow valid1
acl valid2 src 192.168.0.0/24
http_access allow valid2
acl all src 0/0
http_access deny all

cache_dir ufs /tmp/squid/cache 128 16 256
cache_effective_user squid
cache_effective_group squid
visible_hostname sc01.hoge.com
cache_mem 128 MB
maximum_object_size 4096 KB
maximum_object_size_in_memory 4096 KB

forwarded_for off

coredump_dir /var/cache/squid
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
emulate_httpd_log on
log_fqdn off

cache_vary on

※forwarded_for off について
OnにするとHTTPヘッダに X-Forwarded-For が付く・・・ というのが一般的に囁かれていますが、
正確に言うと、X-Forwarded-Forを上書きする、が正しいようです。Offにしとくと既にあるX-Forwarded-Forがスルーされるので、受け側Apacheに入れたmod_rpafで正しく処理できます。ややこしい・・・。。。

# mkdir /tmp/squid/cache
# chown -R squid:squid /tmp/squid

ついでに日本語化。
Squid日本語化
# mv /etc/squid/errors /etc/squid/errors.org
# ln -s /usr/share/squid/errors/Japanese/ /etc/squid/errors
うむむ。日本語化されないじゃん。。。

DomU mdbm01の設定

# yum install mysql-server
# vi /etc/my.cnf
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
big-tables
query_cache_type=1
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=32M
table_cache=128
log-bin
server-id=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
ft_min_word_len=1

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set = binary

[client]
default-character-set=utf8

#utf8を明示しないとエラー出るよ

DomU www01の設定

■www01に導入するものと手順

# yum install httpd httpd-devel php perl
# yum install ImageMagick-perl
# perl -MCPAN -e shell
## install Jcode

○apacheの設定
バーチャルホストベースでwww01を作ります。httpd.confを適切に編集する。

○PHPの追加インスコ
yum install php-mysql php-pear php-mbstring php-mcrypt

○PHPの設定
#vi /etc/php.ini
↓以下変更点
output_buffering = Off
zlib.output_compression = Off
memory_limit = 64M
post_max_size = 80M
upload_max_filesize = 20M
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.detect_order = auto
mbstring.substitute_character = none;

※ad01は以下のとおり。
output_buffering = Off
zlib.output_compression = Off
register_argc_argv = On
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.detect_order = auto
mbstring.substitute_character = none;

あと、DBホストを設定変更しとこうね。

2008年4月12日土曜日

DomU iwata01の設定

■statsに導入するものと手順
○apache周りの導入
# yum install httpd httpd-devel php perl

○apacheの設定
バーチャルホストベースでiwata01を作ります。httpd.confを適切に編集する。

○各種ライブラリの導入
# yum install ImageMagick-perl
# perl -MCPAN -e shell
全部Enter応答。
CPANのFTPに繋がらないエラーが出た。この日限定だと思うが、以下を入力して回避した。
ftp://ftp.dti.ad.jp/pub/lang/CPAN/
いくつもミラー設定したが、あちこちエラー出過ぎです orz
install Image::Size
install Image::IPTCInfo
install Image::Info
install Jcode
install Archive::Zip

続いてuploader.cgi用。依存関係で他は全部入る。
install MIME::WordDecoder
install File::Path

uploader.cgiをコピーしておく。
pop3ディレクトリを作成しておく。

○mod_rpafの導入
http://www.nire.com/2008/02/howto-install-mod_rpaf/

DomU gatekeeper01の設定

■gatekeeperに導入するものと手順
○apache+mod_proxy
HTTPリバースプロキシはmod_proxyを利用するため、apacheを入れます。
# yum install httpd
httpd.confは適切に設定。
リバースプロキシ関係は別ファイルに切り出しておく。
# vi vi /etc/httpd/conf/proxy.conf
ProxyRequests Off
<proxy>
Order deny,allow
Allow from all
</proxy>

ProxyPass /balancer-manager !
<location>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 192.168.0.
</location>

<proxy>
BalancerMember http://iwata01.hoge.com loadfactor=10
</proxy>
<proxy>
BalancerMember http://stats01.hoge.com loadfactor=10
</proxy>

NameVirtualHost *:80
<virtualhost>
ServerName iwata.hoge.com
ProxyPass / balancer://cluster_iwata/ lbmethod=byrequests timeout=1
ProxyPassReverse / balancer://cluster_iwata/
ProxyPassReverseCookieDomain balancer://cluster_iwata/ iwata.hoge.com
ProxyPassReverseCookieDomain balancer://cluster_iwata/ iwata.hoge.com
ProxyPreserveHost On #バックエンドでバーチャルホストを使うため
</virtualhost>

<virtualhost>
ServerName stats.hoge.com
ProxyPass / balancer://cluster_stats/ lbmethod=byrequests timeout=1
ProxyPassReverse / balancer://cluster_stats/
ProxyPassReverseCookieDomain balancer://cluster_stats/ stats.hoge.com
ProxyPassReverseCookieDomain balancer://cluster_stats/ stats.hoge.com
ProxyPreserveHost On #バックエンドでバーチャルホストを使うため
</virtualhost>

受け側ではmod_rpafの導入を忘れずに。


あー、gccとgcc+++は今後も必要そうなので、webminのCommand shellから全PCに導入しておく。基本イメージに含めればよかったね。。
# yum -y install gcc gcc-c++

○DeleGate
手順は以下で検証済み。
http://centos-server.blogspot.com/2008/03/delegate.html

SMTPサーバにPostfixを入れてあるが、25番ポートをDelegateに占有させるので泣く泣く切る。
一応設定は生かしておくので、アンインスコはしない。

IMAPは直接mail01に送る。設定するのはSMTPだけ。

・・・と思ったけど、Delegateをかますと、mail01から見るとローカルからの接続に見えちゃって、リレーし放題になっちゃうかも。これはまずい。
あ、いやまて、接続先を絞るわけだから、hoge.com宛以外の接続要求はmail01.hoge.comに飛ぶことはないわけで、問題ないかな。。。

・・・めんどくさいので、DeleGateは使わないことにした。HTTPもmod_proxyにしちゃったんで、抹消。

2008年4月11日金曜日

DomU stats01の設定

■statsに導入するものと手順
○log集計
rsyncでwwwXXサーバのログを持ってきますが、これは後日。

○サーバ統括
Webminの操作をします。

Webminにログインし、全DomUを管轄下に置きます。
今回導入したDomUは全て目的が異なるため、異なるグループに所属させ、
Cluster Users and Groups
Cluster Webmin Servers
だけ利用します。

IPとドメインの関係は以下。
www01 IN A 192.168.0.31
lb01 IN A 192.168.0.21
sc01 IN A 192.168.0.211
gatekeeper01 IN A 192.168.0.11
dbm01 IN A 192.168.0.51
iwata01 IN A 192.168.0.91
stats01 IN A 192.168.0.81
mail01 IN A 192.168.0.71

○サーバ監視
Cactiを入れます。
ただし、先にdbm01にMySQLを入れなければなりません。
http://centossrv.com/mysql.shtml

次にRRDTool
yum --enablerepo=rpmforge install rrdtool

あとは http://centos-server.blogspot.com/2008/04/cacti.html で。

※なお、Cactiは起動時にMySQLに繋ぐらしく、他のドメインより後から起動させなければなりません。

○Webalizerの導入
Webalizerを導入し、アクセスログ集計を行います。
ログはgatekeeperXXから回収する。
gatekeeperXXのログはgatekeeperXX自身により週1回rotateする。

インストール
# yum install webalizer
# mkdir /kfs/logs/gatekeepers
# mkdir /kfs/logs/$HOSTNAME

gatekeeperXXのローカルにあるログをgatekeeperXX自身がcronで/kfs/logs/gatekeeperXXに上書きコピーする(毎時20分+logrotate前に週1回4:30にも実行)
# \cp -f /var/log/httpd/* /kfs/logs/$HOSTNAME/

awstatsの中に入っているlogresolvemerge.plでログを統合し、/kfs/logs/gatekeepers/に出力する。(毎時40分)
# perl /kfs/logs/logresolvemerge.pl /kfs/logs/gatekeeper0*/komaspo_access_log > /kfs/logs/gatekeepers/komaspo_access_log

stats01のWebalizerが/kfs/logs/gatekeepers/のログを集計し、members_html/webalizer/に結果を書き出す(毎時00分)
これはWebminで設定しちゃうことにする。

Webalizerが文字化けするので、後処理で自作コードを走らせる。
Jcode.pmをCPANで入れておく。
# perl -MCPAN -e shell
全部Enter応答。
CPANのFTPに繋がらないエラーが出た。この日限定だと思うが、以下を入力して回避した。
ftp://ftp.dti.ad.jp/pub/lang/CPAN/
いくつもミラー設定したが、あちこちエラー出過ぎです orz
install Jcode

BINDの設定

一気にDomUを立ち上げたので、一気にBINDに登録します。

www01 IN A 192.168.0.31
lb01 IN A 192.168.0.21
sc01 IN A 192.168.0.211
gatekeeper01 IN A 192.168.0.11
dbm01 IN A 192.168.0.51
iwata01 IN A 192.168.0.91
stats01 IN A 192.168.0.81
mail01 IN A 192.168.0.71

DomUを一気に立ち上げる

ここまでで一旦、DomUを一気に作ってしまいました。
以下、コンソールに流したコマンド。

■イメージ量産
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/www01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/sc01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/gatekeeper01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/dbm01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/iwata01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/stats01.img
cp --sparse=auto /kfs_alpha/xen/standard.img /kfs_alpha/xen/mail01.img

■設定量産
cp /etc/xen/standard /etc/xen/www01
sed -i 's/name = "standard"/name = "www01"/g' /etc/xen/www01
sed -i 's/maxmem = 512/maxmem = 1024/g' /etc/xen/www01
sed -i 's/memory = 512/memory = 1024/g' /etc/xen/www01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa63001f"/g' /etc/xen/www01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/www01.img,xvda,w\" \]/g' /etc/xen/www01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:1f,bridge=xenbr0\" \]/g' /etc/xen/www01

cp /etc/xen/standard /etc/xen/sc01
sed -i 's/name = "standard"/name = "sc01"/g' /etc/xen/sc01
sed -i 's/maxmem = 512/maxmem = 1024/g' /etc/xen/sc01
sed -i 's/memory = 512/memory = 1024/g' /etc/xen/sc01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa6300d3"/g' /etc/xen/sc01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/sc01.img,xvda,w\" \]/g' /etc/xen/sc01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:d3,bridge=xenbr0\" \]/g' /etc/xen/sc01

cp /etc/xen/standard /etc/xen/gatekeeper01
sed -i 's/name = "standard"/name = "gatekeeper01"/g' /etc/xen/gatekeeper01
sed -i 's/maxmem = 512/maxmem = 256/g' /etc/xen/gatekeeper01
sed -i 's/memory = 512/memory = 256/g' /etc/xen/gatekeeper01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa63000b"/g' /etc/xen/gatekeeper01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/gatekeeper01.img,xvda,w\" \]/g' /etc/xen/gatekeeper01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:0b,bridge=xenbr0\" \]/g' /etc/xen/gatekeeper01

cp /etc/xen/standard /etc/xen/dbm01
sed -i 's/name = "standard"/name = "dbm01"/g' /etc/xen/dbm01
sed -i 's/maxmem = 512/maxmem = 1024/g' /etc/xen/dbm01
sed -i 's/memory = 512/memory = 1024/g' /etc/xen/dbm01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa630033"/g' /etc/xen/dbm01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/dbm01.img,xvda,w\" \]/g' /etc/xen/dbm01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:33,bridge=xenbr0\" \]/g' /etc/xen/dbm01

cp /etc/xen/standard /etc/xen/iwata01
sed -i 's/name = "standard"/name = "iwata01"/g' /etc/xen/iwata01
sed -i 's/maxmem = 512/maxmem = 1024/g' /etc/xen/iwata01
sed -i 's/memory = 512/memory = 1024/g' /etc/xen/iwata01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa63005b"/g' /etc/xen/iwata01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/iwata01.img,xvda,w\" \]/g' /etc/xen/iwata01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:5b,bridge=xenbr0\" \]/g' /etc/xen/iwata01

cp /etc/xen/standard /etc/xen/mail01
sed -i 's/name = "standard"/name = "mail01"/g' /etc/xen/mail01
sed -i 's/maxmem = 512/maxmem = 256/g' /etc/xen/mail01
sed -i 's/memory = 512/memory = 256/g' /etc/xen/mail01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa630047"/g' /etc/xen/mail01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/mail01.img,xvda,w\" \]/g' /etc/xen/mail01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:47,bridge=xenbr0\" \]/g' /etc/xen/mail01

cp /etc/xen/standard /etc/xen/stats01
sed -i 's/name = "standard"/name = "stats01"/g' /etc/xen/stats01
sed -i 's/maxmem = 512/maxmem = 512/g' /etc/xen/stats01
sed -i 's/memory = 512/memory = 512/g' /etc/xen/stats01
sed -i 's/uuid = "37d373d8-22ae-7923-2e14-3977aa63ac00"/uuid = "37d373d8-22ae-7923-2e14-3977aa630051"/g' /etc/xen/stats01
sed -i 's/disk = \[ \"tap:aio:\/kfs_alpha\/xen\/standard.img,xvda,w\" \]/disk = \[ "tap:aio:\/kfs_alpha\/xen\/stats01.img,xvda,w\" \]/g' /etc/xen/stats01
sed -i 's/vif = \[ \"mac=00:16:3e:63:95:00,bridge=xenbr0\" \]/vif = \[ \"mac=00:16:3e:63:00:51,bridge=xenbr0\" \]/g' /etc/xen/stats01

■DomU起動量産
xm create www01
xm create sc01
xm create gatekeeper01
xm create dbm01
xm create iwata01
xm create stats01
xm create mail01

■DomUそれぞれ処理
○www01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.31/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:1F/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=www01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○sc01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.211/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:D3/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=sc01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○gatekeeper01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.11/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:0B/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=gatekeeper01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○dbm01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.51/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:33/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=dbm01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○iwata01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.91/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:5B/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=iwata01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○stats01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.81/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:51/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=stats01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

○mail01
sed -i 's/IPADDR=192.168.0.XXX/IPADDR=192.168.0.71/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HWADDR=00:16:3E:63:95:XX/HWADDR=00:16:3E:63:00:47/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i 's/HOSTNAME=standard.hoge.com/HOSTNAME=mail01.hoge.com/g' /etc/sysconfig/network
rm -rf /etc/ssh/ssh_host*
rm -rf /root/.bash_history
reboot

■DomU自動起動
ln -s /etc/xen/www01 /etc/xen/auto/www01
ln -s /etc/xen/sc01 /etc/xen/auto/sc01
ln -s /etc/xen/gatekeeper01 /etc/xen/auto/gatekeeper01
ln -s /etc/xen/dbm01 /etc/xen/auto/dbm01
ln -s /etc/xen/iwata01 /etc/xen/auto/iwata01
ln -s /etc/xen/stats01 /etc/xen/auto/stats01
ln -s /etc/xen/mail01 /etc/xen/auto/mail01

Sparseファイルの取り扱い方法

XenのイメージファイルをSparseファイルにしておくと
未使用領域を圧縮した状態になる。

■メリット
・イメージファイルのディスクスペースの節約になる
・コピーが速い(イメージファイルを量産する時に有効)

■デメリット
・書き込み速度がとても遅い
http://www.atmarkit.co.jp/flinux/rensai/xen02/xen02b.html
・ファイルが膨張するとHDDから溢れて壊れる可能性がある。
・対応したコマンドで取り扱わないと、元に戻る。

■取り扱い方法
○コピー
# cp --sparse=auto [コピー元] [コピー先]
# rsync -avS [コピー元] [コピー先]

○GNU TARで圧縮/解凍
圧縮 # tar zcSvf [書庫ファイル] [格納するファイル]
解凍 # tar zxSvf [書庫ファイル]

○通常ファイルをSparseファイルにする
# cp --sparse=always [コピー元] [コピー先]

○Sparseファイルを通常ファイルに戻す
# cp --sparse=never [コピー元] [コピー先]

○実容量を表示する
# du -h [ファイル名] ※ワイルドカードOK
↑ls -lと比べてみよう。

2008年4月10日木曜日

Xenのイメージサイズを変更する

Xenのイメージファイルのサイズを変更します。

■条件
・イメージファイルは1つのまま。
・/を増やしたい。
・DomUのパーティションはデフォルトでインスコした=/がLVMになっている。

■やり方
DomUをシャットダウンする。
# dd if=/dev/zero of=dummy4GB.img bs=1M count=4096
# cat standard.img dummy4GB.img > 8GB.img

DomUを起動し、fdiskでLVMを作る。
# fdisk /dev/xvda
n p 3 [ret] [ret]
t 3 8e
w
再起動

# pvcreate /dev/xvda3
# vgextend VolGroup00 /dev/xvda3

空き容量を確認する
# vgdisplay
↑Free PEの値を確認

# lvextend -l+XXX(←FreePEの値) /dev/VolGroup00/LogVol00
# e2fsck -f /dev/VolGroup00/LogVol00
# resize2fs /dev/VolGroup00/LogVol00

■参考 なかなか情報がなくて苦労しました。。。
http://tomo.ac/goodstream/xen/centos5/imgfile.html
http://fedorasrv.com/xen-domuhdd-add.shtml
http://slashdot.jp/~Ryo.F/journal/366066
http://pc.watanet.com/lab/homesvr/linux/lvm_resize/lvm_resize.html

2008年4月8日火曜日

NTPで時刻同期

そういやNTP入れてなかった。

■やりかた
http://fedorasrv.com/ntp.shtml

■使うサーバ
ntp.asahi-net.or.jp
ってのが公式でアナウンスされてるので使うことにする。

導入後、自動起動設定。
# ntpdate ntp.asahi.com
# /etc/rc.d/init.d/ntpd start
# chkconfig ntpd on
# chkconfig --list ntpd

どうやらDomUは自動的にDom0に同期するらしいので、放置。

Cactiの導入

ポコポコたくさんサーバを立てるので、監視用にCactiを入れておきます。
Net-SNMPについてはXenの標準イメージにも導入しておく。
Cactiはネットワークを通じて1つあればよくて、mysql-serverのインスコが先に必要。

■基本的な手順
http://centossrv.com/rrdtool-cacti.shtml

■ただし
・標準XenイメージにはNet-SNMPだけ入れておく。

・RRDToolは普通に入れる。

・Cactiの前に。
 以下は事前に明示して入れておく。
 依存関係で勝手にrpmforgeから入るのを防止する。

# yum install apr apr-util gmp httpd mysql net-snmp-utils perl-DBI perl-Net-Daemon perl-PlRPC php php-cli php-common php-mysql php-pdo php-snmp postgresql-libs

・さてようやくcacti
# yum --enablerepo=rpmforge install cacti

あとの設定は先の参考サイトで。所々間違ってるけど。
public →ユニークな名前にしよう。

2008年4月7日月曜日

ソフトウェアRAIDの構築

HDDとメモリを買ってきたので、ソフトウェアRAIDで再セットアップすることにする。

■基本ポリシー
・500GB×2で丸ごとRAID1(ミラー)
・Xenの管理コマンドを覚えるのが面倒なので、GNOMEを入れてしまう。

■パーティションの切り方
http://www.linuxmania.jp/soft_raid.html

ただし、以下相違点。
・swapは2GB(2048MB)
・/はLVMで構築。

LVMを切るのでグラフィカルインストールでなければならない。
グラフィカルインストールだとオプションが違う。
導入するもの
・開発-レガシーなソフトウェアの開発、開発ツール、開発ライブラリ
・ベースシステム-ベース
・仮想化
・言語-日本語のサポート

インスコ終わったらgrub忘れずに。
[root@linux ~]# grub  
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> root (hd0,0)
grub> setup (hd0)
grub> quit

2008年4月5日土曜日

DeleGateの導入(POP3、SMTP編)

DeleGateはPOPもSMTPも中継できちゃいますので、導入します。

まずpop。
# vi pop.conf
-P110
SERVER=pop
ADMIN="root@hoge.com"
RELIABEL="*"
RELAY=proxy
CACHE="no"
LOGFILE=""
CONNECT="d:*:*"
MOUNT="* pop://hoge.com/*" #default
REACHABLE="192.168.0.9"
MOUNT="//moge.com/* pop://moge.com/*"
REACHABLE="192.168.0.9"

↑この設定の解説。
MOUNT="* pop://hoge.com/*"
普通にPOPアクセスがあると、hoge.comに中継されます。

MOUNT="//hoge.com/* pop://hoge.com/*"
POPのアカウント名が「アカウント名#moge.com」となってる時には、moge.comに中継されます。

REACHABLE="192.168.0.9"
中継先は192.168.0.9縛りです。

次にSMTP編。
-P25
SERVER="smtp"
RELIABEL="*"
RELAY=proxy
CACHE="no"
LOGFILE=""
CONNECT="d:*:*"
MOUNT="/* smtp://192.168.0.2/* vhost=-smtp.bbb.biz"
REACHABLE="192.168.0.0/24"

↑この設定の解説
外から来たsmtpを内側に振り分けます。
SMTPサーバを外部に制限無しに解放してしまうのは危険なので、到達できるIPを限定しておきます。



POP起動(コンソール付き)
# delegate -vv +=pop.conf
POP起動
# delegate +=pop.conf
POP終了
# delegate -P110 -Fkill

SMTP起動(コンソール付き)
# delegate -vv +=smtp.conf
SMTP起動
# delegate +=smtp.conf
SMTP終了
# delegate -P25 -Fkill


なお。
DeleGateは積極的に名前解決してくれるので、「アカウント名#存在しないドメイン」とやると、DNSの設定によっては自動的に補完してくれちゃいます。このため、指定以外の文字列でもサーバにアクセスできてしまうことがままあるのでご注意。

2008年3月30日日曜日

Delegateの導入(HTTP編)

Delegateを導入します。
XenとDelegateなリバースプロキシを組み合わせて、グローバルIP1つでバーチャルホストでない複数ドメインを運用する計画。

バーチャルホストに対しての利点
・ドメインごとに環境を完全に分けられる。
・バーチャルホストだと、一部のドメインを別マシンに分離する作業が大工事になってしまうが、本方式だと超簡単に対応できる。(マイグレーションすれば作業終了)

バーチャルホストに対してのデメリット
・XenのためネットワークのI/Oパフォーマンスがボトルネックになる(以前測定済みで許容範囲と判断)
・Xenのためバージョンアップでの互換性喪失リスクがあったりする(冒険)
・管理すべき環境が増える(必要以上に細かく分けすぎないようにする)
・サーバリソースを余分に食う(物理的な分割よりは低コストと判断)

Squidでもなくmod_proxyでもなくDelegateを選んだのは、HTTPに限らずメール環境も一緒にリバースプロキシできるから。
SMTPリレーでなくリバースプロキシが良いのは、サーバの切り離しがラクだから。

まずインストール。
# wget ftp://ftp.delegate.org/pub/DeleGate/delegate9.7.7.tar.gz
# tar zxvf delegate9.7.7.tar.gz
# cd delegate9.7.7
# make

と思ったらエラー。開発環境入れてないんだった。

# yum install gcc
# yum install gcc-c++

で改めてmake
メールアドレス聞かれるので、とりあえずrootを入力してみる。
どうせ受け取らないけど。
# mkdir /usr/local/delegate
# cp src/delegated /usr/local/delegate/
# chown -R nobody:nobody /usr/local/delegate/
# cd /usr/local/delegate/

設定書く。
# vi http.conf
-P80
SERVER=http
ADMIN="root@hoge.com"
RELIABLE="*"
HTTPCONF="add-qhead:X-Forwarded-For:%a"
RELAY=proxy
CACHE="no"
LOGFILE=""
CONNECT="d:*:*"
MOUNT="/* http://www.hoge.com/* vhost=-alpha"
REACHABLE="192.168.0.9"
MOUNT="/* http://192.168.0.105/* vhost=-beta"
REACHABLE="192.168.0.105"
MOUNT="/-/ = rcode=404"
MOUNT="/-/admin/* = rcode=404"

最後の404指定は管理画面やバージョン番号の丸出しを防ぐため from DeleGateのML。
Deledateの使い方を紹介してるサイトは数あれど、これを載せてるサイトは見かけませんでした。みんな正気か!?


起動(コンソール付き)
# delegate -vv +=http.conf

起動
# delegate +=http.conf

終了
# delegate -P80 -Fkill


これで動くけれども、受け側のapacheにmod_rpafを入れてやらないとログが全部alphaになっちゃう。
http://www.nire.com/2008/02/howto-install-mod_rpaf/

2008年3月29日土曜日

Xenのネットワークベンチマーク取ってみた。

XenのDom間のLAN速度を測定。

まず、DomU→dom0通信
[root@p01 kfs]# netperf -H alpha -fM
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to alpha.hoge.com (192.168.0.2) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec
87380 16384 16384 10.01 114.79

Dom0間通信(110MB/Sec)より速いので、これはGJ。CPUパワーを全力で食ってますが。
あ、ちなみに
Dom0のlocalhostでベンチ取ったら234MB/Secでした。
DomUのlocalhostでベンチ取ったら337MB/Secでした。
DomUのほうが速いという不思議。


次に、同一Dom0上にあるDomU→DomU通信。理屈的にはDomU→Dom0→DomUとなるはず。
[root@p01 kfs]# netperf -H 192.168.0.105 -fM
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.105 (192.168.0.105) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec
87380 16384 16384 10.01 68.15

68MB/Sec。さっきの半分近い。
ローカル通信のくせに遅いのね。xm topで監視してたら、CPUパワーも全力食ってたようだし。
CPUパワーに依存する&現在の環境では、Domをまたぐごとに50%のオーバーヘッドがあるらしい。


続いて異なるDom0間でのDomU→DomU通信の場合。理屈的にはDomU→Dom0→Dom0→DomUになるかな?
[root@p01 kfs]# netperf -H 192.168.0.105 -fM
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.105 (192.168.0.105) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec
87380 16384 16384 10.01 33.04

33MB/Sec。
やはり通過するDomが増えた事によるオーバーヘッドだろうか。こちらも50%ダウンである。
受信側のほうがCPUめいっぱい、送信は70%くらいの負荷でした。

Xenのイメージファイルをコピーする

この概要は表示できません。投稿を閲覧するには ここをクリック してください。

XenのHDDベンチマーク取ってみた。

とりあえずXenのHDDベンチマーク取ってみた。

alpha(Dom0)のベンチ
[root@alpha ~]# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 3108 MB in 2.00 seconds = 1556.04 MB/sec
Timing buffered disk reads: 196 MB in 3.02 seconds = 64.86 MB/sec

beta(Dom0)のベンチ
[root@beta ~]# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 3104 MB in 2.00 seconds = 1552.36 MB/sec
Timing buffered disk reads: 192 MB in 3.00 seconds = 63.90 MB/sec

p01(共有ストレージ=alpha、稼働=alpha)
[root@localhost ~]# hdparm -Tt /dev/xvda
/dev/xvda:
Timing cached reads: 3188 MB in 2.00 seconds = 1595.82 MB/sec
Timing buffered disk reads: 166 MB in 3.03 seconds = 54.85 MB/sec

p02(共有ストレージ=alpha、稼働=beta) ←1GbpsのLAN、NFSで共有
[root@localhost ~]# hdparm -Tt /dev/xvda/dev/xvda:
Timing cached reads: 3160 MB in 2.00 seconds = 1580.61 MB/sec
Timing buffered disk reads: 62 MB in 3.01 seconds = 20.59 MB/sec

○結論
alpha、betaはほぼ同水準で65 MB/sec。そりゃまぁ、買ったばっかりの同一モデルだし、差が出る訳がない。
Dom0(alpha)の上でDomUを動かした場合、55 MB/sec。20%弱のオーバーヘッド。
Dom0(alpha)にストレージを残したままbetaにライブマイグレーションした場合、20.59 MB/sec。もうね、70%ダウンですよ。

ネットワーク越しにしたことでモロに影響が出ているわけですが、では私の環境のネットワーク速度はどんなもんでしょう。

[root@beta ~]# netperf -H alpha -fM
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to alpha (192.168.0.2) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec

87380 16384 16384 10.01 110.31

はい、110MB/Secと出ました。
でも同じネットワーク上でWin同士でデータをやり取りしたり、SCP転送したりすると、速くて20MB/sec程度のもんなので、先のHDDベンチの水準は妥当な感じがします。

やっぱりライブマイグレーションしてHDDにガリガリアクセスするのは無理があるなぁ。

ハードディスクのベンチ

非キャッシュで読み取りベンチ
# hdparm -Tt /dev\sda
# hdparm -Tt /dev\xvda

HDD情報読み取り
# hdparm -i /dev/sda
# hdparm -i /dev/xvda ←これ動かない

Xenで遊ぶぞ

とりあえずXen入れて、ライブマイグレーションしてみる。
「OSとはインストールするものではなく、コピーするものである」という哲学に沿って、使い回せるイメージの作成を目指します。


# virt-install -n hoge -r 256 -f /kfs/hoge -s 4 --nographics -l ftp://ftp.riken.go.jp/Linux/centos/5.1/os/x86_64

hogeという識別子をつける(-n)
256MBのメモリを割り当て(-r)
/kfs/hogeというファイル名で仮想ファイル[xvd形式]を作成する(-f) ←これは識別子と揃えておいたほうがいいぞ
4GBの仮想ファイルを作成する(-s)
GUIは利用しない(--nographics)
指定ftpからインストール(-l)

Domain-0のメモリが足りないとき、無理矢理圧縮する方法
# xm mem-set Domain-0 128

インスコ時はDHCPにしとくと、後でイメージコピーできて便利だぞ

とりあえずオプションはデフォルトで進める。
ソフトパッケージはカスタムして空っぽにする。(コピーして使い回すため)
あと普通にカスタム。

# yum install yum-fastestmirror
# yum -y update
# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.410-1.noarch.rpm
# rpm --install webmin-1.410-1.noarch.rpm
# rm webmin-1.410-1.noarch.rpm

webmin設定する。
いらないスタートアップも消す。
こんなもんかしら。
DHCPで割り当てられたipは
# ifconfig
で調べられるぞ。

Xen自体は、
XenのHTTPインターフェースを有効化
# vi /etc/xen/xend-config.sxp
(xend-http-server yes) #どうも落ちる。原因不能。
(xend-port 8000)
(xend-address '192.168.1.100') # 接続元を限定
# service xend restart

Xenのマイグレーション有効化
# vi /etc/xen/xend-config.sxp
(xend-relocation-server yes)
(xend-relocation-port 8002)
(xend-relocation-hosts-allow '')
# service xend restart

ライブマイグレーションする
# xm migrate moge hoge.com --live
ネットワークコネクションも切れず、数秒で移動させられる。かなり実用的な機能のようだが、しかし使い道が思いつかない・・・

1:超RAIDで可用性バリバリだがCPUが弱い共有ストレージを用意する
2:OSを数台のPCで動かし、メンテ時や過負荷時にマイグレしたりしてみる

そうするとディスクのメンテナンスコストは抑えられそうだが、一台壊れると影響範囲が極めて広く、それって結局可用性が下がっちゃって意味ないような気がする。
読み書きが集中したらパフォーマンス落ちるし。
うーん・・・ 一体、何に使うんだろう・・・。。。

DHCP、オンメモリ運用、書き込み無しを前提に、サーバをポコポコ増やしまくる用途なら効くような気がするが、それってライブマイグレーションなんか実はどうでもよくて、ディスクのイメージ化のほうが重要だったり。あー、しかしDHCPだとトラブったサーバを特定できないから、ポコポコ増やすにも向いてないね、やっぱり。

いらないサービスを消し去る

webminで作業しちゃう。
こうしちゃう。

アクション 起動時に開始しますか?
acpid はい いらない
anacron はい
atd はい
auditd はい いらない
autofs はい
avahi-daemon はい いらない
avahi-dnsconfd いいえ
bluetooth はい いらない
conman いいえ
cpuspeed はい いらない
crond はい
cups はい いらない
dhcdbd いいえ
dnsmasq いいえ
dund いいえ
firstboot はい いらない
gpm はい
haldaemon はい
halt いいえ
hidd はい いらない
ip6tables はい いらない
iptables はい
irda いいえ
irqbalance はい シングルプロセッサだけどいちおう入れておくか
killall いいえ
krb524 いいえ
kudzu はい
libvirtd はい
lvm2-monitor はい
mcstrans はい いらない
mdmonitor はい raidじゃないけど一応いれておくか
mdmpd いいえ
messagebus はい
microcode_ctl はい いらない
multipathd いいえ
netconsole いいえ
netfs はい
netplugd いいえ いちおういれておくか
network はい
NetworkManager いいえ
NetworkManagerDispatcher いいえ
nfs いいえ
nfslock はい
nscd いいえ
oddjobd いいえ
pand いいえ
pcscd はい いらない
portmap はい
psacct いいえ
rdisc いいえ
readahead_early はい いらない
readahead_later いいえ
restorecond はい いらない
rpcgssd はい
rpcidmapd はい
rpcsvcgssd いいえ
saslauthd いいえ
sendmail はい いちおういれておくか
single いいえ
smartd はい いちおういれておくか
sshd はい
syslog はい
webmin はい
wpa_supplicant いいえ
xend はい
xendomains はい
xfs はい
ypbind いいえ
yum-updatesd はい いらない あぶない
/etc/rc.d/rc.local はい

こちらが詳しい。
http://engineers-be-ambitious.blogspot.com/2007/05/centos-5-server-cd.html
でも私はnfsとXenを使うので、必要なのは残しました。

これを2マシン設定。
#ほんとはcfengineを導入するとラクそうなんだけど、めんどいのでいずれまた。

NFSサーバを建てるぞ

# mkdir /hoge
# chown -R nfsnobody:nfsnobody /hoge
# vi /etc/exports

中身は↓
/hoge 192.168.0.0/255.255.255.0(async,no_root_squash,rw)

# /etc/rc.d/init.d/portmap start
# /etc/rc.d/init.d/nfs start

自動起動も設定しとこう
# chkconfig portmap on
# chkconfig --list portmap
# chkconfig nfs on
# chkconfig --list nfs

ちなみにマウントする時 mount <ファイルシステムタイプ> <マウント先>
#mount -t nfs hoge.com:/hoge /hoge

自動マウントはこちら
# vi /etc/fstab
hoge.com:/hoge /hoge nfs rw 0 0

さんこう
http://kajuhome.com/nfs.shtml

一応ですね、Dom0は/kfs_alphaを公開し、全Dom0が自動マウントするようにしておきます。

イントラDNSサーバに新サーバを追加

BIND使っとります。レコードをこんな感じで修正
vi /var/named/hoge.com.db

$ttl 60
hoge.com. IN SOA moge.hoge.com. root.hoge.com. (
2008032901
28800
14400
3600000
86400 )
IN NS hoge.com.
IN MX 10 hoge.com.
@ IN A 192.168.0.9
* IN A 192.168.0.9
hoge IN A 192.168.0.9
moge IN A 192.168.0.9
foo.hoge IN A 192.168.0.9
alpha IN A 192.168.0.2 ←新サーバ1
beta IN A 192.168.0.3 ←新サーバ2

シリアル番号上げて保存。

webminのインストール

管理はメンドイのでwebmin入れてザクザクやります。

# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.410-1.noarch.rpm
# rpm --install webmin-1.410-1.noarch.rpm

これでブラウザから10000番ポートにアクセスすると・・・

あっ! イントラ用DNSサーバに新鯖登録するの忘れてた・・・
・・・ま、次のエントリで書くとして、とりあえず完了。

webmin設定に入る。
デフォルトのテーマが気に入らないのでMSC.Linuxに変更。
日本語UTF-8も選択しとく。
webminアップデートもかけてみる。最初から最新の入れておけよって感じ?
Submit Your OSもしてみる

HTTPじゃアクセスしたくないぞ。SSL暗号化をクリックすると以下のメッセージが出るので、そのまま入れてしまえ。

>Perlモジュール NET::SSLeayがシステム上にインストールされていません。OpenSSLライブラリ及びNET::SSLeayをインストールするにはWebmin Webサイトからの指示に従ってください。
>別の選択肢として、Webminに必要なNet::SSLeay Perlモジュールをダウンロードとインストールさせることができます。

>Perlからのエラーメッセージ : Can't locate Net/SSLeay.pm in @INC (@INC contains: /usr/libexec/webmin /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/site_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.7/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.6/x86_64-linux-thread-multi /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .)

改めてSSL暗号化。

>可能であればSSLを使用可能にしますか?
>はい

>非SSLリクエストをSSLモードにリダイレクトしますか?
>はい

あとはデフォルトでおk

IPアクセス制限かけておこう。

webminサーバの索引
ブロードスキャンしてみる。
新旧のサーバが色々引っかかる。
旧サーバに引きずられたくないので消しておく。
>ホスト名
>適切に編集しておく。

>サーバの種類
>CentOS Linux

>Member of server groups
>New group なんか入力する

>リンクの種類
>Webmin 経由でログイン
↑これにしとくとCluster管理できる。

Cluster Webmin Servers で自分と、シンクロさせたいwebminを登録しとく。
これやっとくと、1台でyumしたら他のサーバも同期できるので、環境差が発生しなくて便利ですよ。
ユーザーIDも連動できるし。一度環境差ができちゃうと意味なくなるけど、セットアップ初期は、まぁ便利。 登録は片方のサーバだけでいいです。両方登録するとその部分が環境差になっちゃうし、どっちがどっちだかわからなくなるし、意味ないです。

こんなもんかしら。

セットアップ

何はともあれ、セットアップ。

110GdのBIOSはデフォルト。

昔Torrentで落とした5.0(x86_64)のDVD版をlinux textでインスコ。

・インストールオプション
 Virtualizationのみオン。カスタムで他もそぎ落とす。
・パーティション
 全フォーマットのデフォルト
・DNSサーバ
 既存の自分で建ててるDNSサーバをPrimaryに(192.168.0.6)
 SecondaryはプロバイダのDNS。

インスコ完了したら
firstbootが立ち上がるので、FirewallをDisable(ルータ通すのでいらんわ)、SELinuxもDisable(めんどいわ)

yum install yum-fastestmirror ←yum高速化プラグイン
yum -y update ←全部アップデート

念のため再起動したらネットワークから操作します。

rpmforgeのレポジトリを入れてみる。
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
# rm -f rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
# sed -i 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo

auditのメッセージがうざいので消し去る
# yum remove audit

このブログの趣旨

CentOSの設定なんかをメモします。あくまで自分用メモです。

○経緯
NEC Express 5800/110Gc×1、110Gd×1、ミニPC×1でサーバ運用中です。
110Gd×2を追加導入しました。

これまで作業履歴を残してこなかったため、結構ブラックボックスになってしまっています。
新規導入したついでに、今後は残しておこうと思います。
万が一、誰かの参考にでもなっちゃうようなことがあれば幸いです。期待しないでね。