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を追加導入しました。

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