目次
OpenVZを利用していて、JavaVMが起動できない場合、最大メモリ容量を制限すると解決するかもしれません。
OSレベル仮想化を採用したVPSサービスでJavaが起動できない!と嘆いている方、お試しあれ...
(はい、私、嘆いていました...)
この例では、最大256MBにメモリを制限しています。
通常、いくらメモリをアロケートしても、実際に書き込みを行わなければ物理メモリは消費されないわけですが、
OSレベル仮想化ではそうはいかないようです...。
ゆえに、Apache2のworkerMPMもアウトなんですよね...。
Xen HVMにてWindows(CD-ROM版)をインストールしようとすると、ディスク交換を行う必要があります。
しかし、単純にディスクを交換しただけでは、交換後のディスクが認識されません。
このような場合、QEMUコンソールから、ディスクの交換を行うことで解決することができます。
ディスクの交換を行うには、まずQEMUコンソール画面へ移動します。移動方法は以下の通りです。
1、フレームバッファ -> QEMUコンソール
→“CTRL+ALT+2”
2、QEMUコンソール -> フレームバッファ
→“CTRL+ALT+1”
ディスクの交換は、QEMUコンソール上で次のコマンドを用いて行います。
※ディスクイメージにはisoファイル指定でなくても、実デバイス(/dev/cdrom等)でもかまいません。
※ディスクイメージの後ろに"raw"オプションを付けないと、正しくイメージが認識されないかもしれません。
changeコマンドを発行後、フレームバッファ画面へ移動すると、交換したディスクが認識されているかと思います。
なお、ディスクの状態は「info block」コマンドにて確認できます。
Fedora10 GDM+VNCServer (Xvnc on XDMCP)環境で、ssh -Xで他サーバのディスプレイを飛ばそうとすると、
が出てしまい、XAuthによるディスプレイ認証が失敗します。
いまいち詳細は分からないのですが、xauth listの結果が変わったために生じる現象のようです。
このように、Fedora8では127.0.0.1:1と素直なASCII文字列としてXホストが表示されますが、
Fedora10では#ffff#3132372e302e302e31#:1という、16進文字列として表示されます。
(なぜか、Xvncを使っているとき(というより、XDMCP on GDMのとき?)のみで、
使っていないときは普通にホスト名/unix:0としてXホストが表示され、フォワーディング問題も発生しない。)
sshクライアントはX11 MagicCookieの検索をプレーンなASCII文字列で行うため、結果的にXAuth認証に失敗する、という現象が生じます。
(検索に失敗する様子はssh -vvで確認可能)
しかし、実はこの16進文字列、単に"127.0.0.1"をバイナリとみなしhexdumpした結果と等価だったりします(^^;;
そこで、sshから受け取った引数のうち、ホスト名部分だけを勝手に16進文字列に変換した状態でxauthへ渡すラッパーを作ってみました。
このラッパーを挟むことで、問題なくディスプレイが飛ぶようになります。
これを、/usr/bin/xauth.sshへ保存し、パーミッションを755にセットします。
その後、/etc/ssh/ssh_configの"Host *"以下、もしくは~/.ssh/configへ、
を入れれば完了です。以降sshはxauth.sshをxauthの代わりに使うようになり、
フォワーディングに成功するようになるのではないかと思います。
もし不具合等発見された場合は、ぜひご連絡ください。
-
/etc/ssh/sshd_config中に、次の設定を記述。(GSSAPI経由の認証を有効化)
-
ローカル認証(PAM含む)よりKerberos認証を優先させたい場合は、次の設定を記述。
-
~/.ssh/config にチケットフォワーディングを許可する設定を記述
(これを忘れると2台め以降へのログイン時パスワードが必要になるばかりでなくNFSv4 with Kerberosのマウントができなくなる。)
-
/var/lib/pgsql/data/postgresql.confにKerberosの設定を記述
-
kadminでpostgresのprincipalを作成し、キーを1で指定した場所に保存する
-
キーの所有権をpostgresに変更
(これを忘れると正しく設定していても認証に失敗する)
結論から言うと、Xenのブリッジスクリプトを利用しなければOKです。
あのスクリプトはちょっと変な挙動をしますので、
手動でブリッジを立ち上げるスクリプトを書くのがもっとも確実かつ安全です。
なお、この例ではタグVLANを例に取りますが、eth0.*を、bond0.*に置き換えることで、そのままボンディング+タグVLAN対応となります。
-
dom0上のXenブリッジ起動設定を無効にします
-
/root/以下に次のようなスクリプトを書きます。
ここでは、既にeth0.4000、eth0.4001、というVLANインターフェースがあるものとします。
このVLANインターフェースは
「/etc/sysconfig/netowrk-scripts/ifcfg-eth0.4000」
「/etc/sysconfig/netowrk-scripts/ifcfg-eth0.4001」
で作成した普通のVLANインターフェースです。
また、それぞれが所属するブリッジはBridge1、Bridge2とします。
-
iptablesでBridge間の通信を許可します
ここでは次のような設定スクリプトで通信を許可し、同時にスプーフィング対策も行います。
このスクリプトに実行権を持たせて実行することで、Bridge内でのパケットフォワーディングが開始されます。
ここではレイヤ2・レイヤ3レベルでのフィルタリングが定義出来ますので、BridgeをL2スイッチ代わりに利用することが出来ます。
-
boot.shを起動時に実行されるよう/etc/rc.d/rc.localへ登録します。
-
スクリプトに実行権限を持たせます。
以上で完了です。再起動するか、boot.shを実行すると、VLANインターフェースが接続されたブリッジが出来上がります。
あとはここにdomUを接続していくだけです。
次に接続するためのdomU起動用設定ファイルの例を示します。
この例では、メモリ4GB、8コア、Bridge1、Bridge2に接続された2つのNICを搭載したdomU仮想マシンを立ち上げています。
この方法であればブリッジに好きな名前をつけることが出来ますので、非常に便利です。
この方法の難点は、ネットワークスクリプトをrestartしたとき、もう一度boot.shを実行しなければいけない点にありますが、
Xen附属のnetwork-bridgeスクリプトに任せるよりはましなのではないかと思います。
パフォーマンス的にも良好で、Supermicroマザー(BroadCOMチップ)、CentreCOM L2スイッチの組み合わせ(非ボンディング、タグVLAN)
で異なる物理サーバ上の仮想サーバ間通信は800MBps程度と十分な速度が出ますし、domU上ではタグVLANを意識する必要もありませんので、非常に便利です。
(NFSv4でファイル転送中のスイッチ上でのポート間通信量計測値、ちなみに、ファイル転送速度はこのとき70MBytes/s〜80MBytes/s、これ以外の仮想サーバも色々通信していましたので、余り正確ではありませんが...)
tc(Traffic Control)コマンド+HTBを使います。
-
次のようなスクリプトを作成します。ここでは30MBps、1000MBpsの2つのクラスを用意し、
デフォルトは30MBps、192.168.0.0/24、172.16.0.0/16へのパケットのみ1000MBpsで送信します。
-
これを起動時に実行できるよう/etc/rc.d/rc.localに登録します
これで、再起動する、もしくはQoS.shを実行すると、eth0に対して帯域制限が開始されます。
設定状態を確認するには、次のコマンドを利用します。
また、設定を削除するには、addをdelに変えて後ろから実行していけばOKです。