2008/10/20

iSCSIターゲット(CentOS)とiSCSIイニシエーター(MacOS)のインストール

iSCSIはEthernet上でSCSIプロトコルのやりとりを行うことで、安価なEthernetの機器を利用してSANを構築することができるものです。
今回はそのiSCSIの環境を構築してみたいと思います。
ちなみにiSCSIのディスク(サーバー)に相当するものがターゲット、クライアントに相当するものをイニシエータと呼びます。

ちなみに、ターゲットとイニシエータは多くは1対1で利用します。
複数から接続する場合は、それに対応したファイルシステム(GFS,OCFSなど)が必要です。
これは普通のSCSIと同じですね。

まず、iSCSIターゲットのインストールをします。
LinuxではiSCSI Enterprise Targetというものがあるので、これを使用します。
下記の手順でインストールすることが可能です。
途中openssl-develを求められたので、インストールしていない場合はyumで導入しておきます。
KSRCには今起動しているカーネルのソースツリーを指定します。
カーネルソースが入っていない場合もyumで導入しておきます。
# wget http://nchc.dl.sourceforge.net/sourceforge/iscsitarget/iscsitarget-0.4.16.tar.gz
# tar xzvf iscsitarget-0.4.16.tar.gz
# cd iscsitarget-0.4.16
# make KSRC=/usr/src/kernels/2.6.18-92.1.13.el5xen-i686/
# make KSRC=/usr/src/kernels/2.6.18-92.1.13.el5xen-i686/ install

次に設定を行います。
今回はテストなので、適当なイメージファイルを作成します。
# dd if=/dev/zero of=/tmp/test.img bs=1M count=1024

次に設定ファイルの/etc/ietd.confを編集します。
Targetから始まる行を削除し、以下のように記述します。
iqnから始まる部分は環境によって読み替えてください。
Target iqn.2008-10.com.hirokikana:storage.test
Lun 0 Path=/tmp/test.img,Type=fileio


最後にiSCSIターゲットを起動します。
# /etc/init.d/iscsi-target start
# chkconfig iscsi-target on

これでインストール完了です。

ひとまずMacにイニシエーターをインストールして動作確認しました。
MacのイニシエーターはglobalSAN iSCSI Initiator for OS Xを使用しました。
公式サイトからダウンロードしてきて、あとは普通にインストールします。
インストール後OSの再起動が必要です。

再起動後、システム環境設定にglobalSAN iSCSIの設定項目が追加されています。
メニューのPortalsを選び、下の+マークを押すとホスト名を入力するダイアログが表示されるので、iSCSIターゲットをインストールしたホスト名を指定します。
次にメニューのTargetsを選ぶとインストールしたTargetが表示されているので選択し、Log Onボタンを押します。
すると何かいろいろ入力するダイアログが出ますが、Connectボタンを押します。
これで接続完了です。



このときは初めて接続したのでフォーマットをするか聞かれます。
とりあえずFATでフォーマットしてみました。
あとは普通のディスクとして使用できます。
アイコンが黒ベースのちょっと違う感じになっています。

認証とか経路の暗号化などもできるようですが、中からつなげるだけなので特にいらないかなぁと思ってます。
でも、情報収集のためにいずれ使ってみます。

ちなみにXbenchで計測してみたところ以下のような感じになりました。
Sequential 15.58 
Uncached Write 17.50 10.74 MB/sec [4K blocks]
Uncached Write 15.02 8.50 MB/sec [256K blocks]
Uncached Read 12.08 3.54 MB/sec [4K blocks]
Uncached Read 19.91 10.01 MB/sec [256K blocks]
Random 47.90
Uncached Write 39.79 4.21 MB/sec [4K blocks]
Uncached Write 26.12 8.36 MB/sec [256K blocks]
Uncached Read 489.62 3.47 MB/sec [4K blocks]
Uncached Read 55.37 10.27 MB/sec [256K blocks]


iSCSIの意味がないくらい遅いですね。
なぜなら我が家のネットワークは未だに100BASE/TXだからなのです。
Gigaにすればもっと早くなると思います。
今使ってるスイッチがAllideの16ポートスイッチなので、新しいのにするの躊躇してるんですよね。
それにいつもしていることで100BASE/TXで困ったことがないもので…。

次回はLinuxのマシンにイニシエーターをインストールして接続してみます。

2008/10/19

CobblerでDomainUをインストールする

Cobblerを使ってDomainUをインストールしたいときはKoanというものを使用すると良いらしいですが、virt-installだけで可能でした。

virt-installでインストール時に指定するインストール場所は、下記のようなURLを指定します。
http://<Cobblerをインストールしたホスト名>/cblr/links/<profile名>/


Cobblerでのキックスタートファイルは下記のようなURLで取得することができます。
http://<Cobblerをインストールしたホスト名>/cblr/svc/op/ks/profile/<profile名>

profile名はCobblerでimportするときに指定した物です。
忘れてしまった場合はcobbler reportコマンドで確認することができます。

virt-install時にキックスタートファイルを指定することもできます。
下記のように指定します。
# virt-install --name=centos5 --ram=512 --file=/home/xen/centos5.img --file-size=15 --location=http://url/cblr/links/CentOS-5.2-i386/ --nographics -x ks=http://url/cblr/svc/op/ks/profile/CentOS-5.2-i386


あとはCobblerでインストールするときと同じように待っているだけでインストールが完了します。

2008/10/14

DomainUをVNC経由で操作する

Xenを最近ちょくちょく触ってます。
XenのPara-Virtualisationしか使ってないのですが、特に不便する点はないうえ、体感速度は物理マシンと変わらない気がします。
今度機会があったらなんらかのパフォーマンス検証してみます。

前回の記事でvirt-installを使ってCUIで簡単にインストールすることはできました。
今回は、他のマシンからVNC経由で画面を飛ばして操作してみました。

まず、Xenの共通設定でVNCの設定をします。
Xenの設定は/etc/xen/xend-config.sxpです。
このファイルの(vnc-listen '127.0.0.1')のコメントアウトを外します。
あと、127.0.0.1の部分を別のホストから接続できるように、0.0.0.0にします。
VNC接続時のパスワードを設定したい場合は(vncpasswdに指定します。

(vnc-listen '0.0.0.0')
(vncpasswd '<パスワード>')


設定ファイルを編集したらxendを再起動します。

# /etc/init.d/xend restart
restart xend を起動中: [ OK ]
#


virt-installでインストールする際にVNCで飛ばす方法は--nographicsと指定していた部分を--vncにします。
必須ではありませんが、--vncportでポート番号を指定することもできます。

# virt-install --vnc --vncport <ポート番号>


あとは、前回と同じようにいくつかの質問に答えるとインストールが開始されます。
インストールが開始されるとVNCで接続することが可能なので、Domain0のホスト名、指定したポート番にアクセスします。
ポート番号は指定していない場合、5900+nになります。
nは起動した順になってました。ランダムなわけがないので、あとで調べておきます。
とりあえず1台しかいない場合はだいたい5900です。
するとGUIのインストーラーの画面が表示されます。



次にすでに--nographicsを指定してインストールしたDomainUをVNC経由で操作する方法です。
まず、/etc/xen以下にあるDomainUの設定ファイル中の下記部分を編集します。

vfb = [ "type=vnc,vncunused=1" ]


上記の設定をしたらxm createでDomainUを起動します。
DomainU用のVNCも立ち上がっているのですが、このままではVNCの画面には何も表示されません。
これで2時間近くはまったのですが、どうやら--nographicsを指定してインストールすると端末が1つも生成されない設定になってしまっていました。
/etc/inittabの下記部分を編集して端末を生成するようにしたらVNCに表示されました。

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6


このVNCの機能はqemuに入っているVNCの機能を使った物らしく、OSの起動画面からきちんと表示することができます。
DomainU上にVNC serverを入れなくても使用できるので便利です。

2008/10/13

MacPortsのパッケージでconfigureオプションの変更

MacPortsのffmpegを使っていて、いろいろなオプションが有効になっていなかった。
どうにかconfigureオプションをいじりたいと思って調べたところ、以下のコマンドで可能だった。

$ sudo port edit <パッケージ名>


ちなみに、EDITOR環境変数を定義していないと怒られました。
とりあえず、lameパッケージを導入してffmpegのconfigureオプションのlibmp3lameを有効にして再インストールしたら、正常に動作しました。
すでにインストールしているパッケージの場合一度sudo port unistallしてから再度sudo port installしないとダメでした。

2008/10/12

MacOSでvirtual-pythonが動かない…

LinuxでPythonの開発をするときは、下記サイトを参考にvirtual-python環境を構築して、システムのPython環境を汚さないように開発をしています。

ウノウラボ Unoh Labs: Python開発環境を整えよう
reizn Second-Life - virtual-pythonの使い方

今日Macで同じようにしてみたのですが、どうやらうまく使用できない。
PYTHONPATHとかいろんなこと設定してみたりしましたが、easy_installすると動かないことが…orz
特にpysqliteとsqliteあたりが全然動かなかった…

と、数時間考えて…
よく考えてみたら、MacPortsが…。
しかもMacPortsには相当多くのPythonモジュールが…
結局、MacPortsで使うようにしました。
下記のものはちゃんと動きました。

  • Python 2.4

  • SQLAlchemy

  • Mako

  • pysqlite

  • flup




MacPortsならシステムのPython環境は汚さないし、最初からこうすれば良かった…。

2008/10/05

Hadoopをインストール

先日のOSC2008でHadoopのセッションを聞いてきたのですが、イマイチしっくりきませんでした。
一緒に紹介されたLustreという分散ファイルシステムの方が良いのでは?(POSIX互換だし)と思っているのですが、話題にされるには何か理由があるだろうということでちょっとインストールしてみつつ、理解を深めてみようかと思います。

ちなみに以下の記事を参考にしました。というより下記の記事の手順以上のことはしてません。


まず、JDKをインストールします。
yumだとgcjが入る模様なので、Sunのサイトからダウンロードしてきました。
バージョンは6 Update7でした。

次に、SSHでlocalhostにパスワードなしで入れるようにします。
下記のような操作を行います。

$ ssh-keygen -t rsa -P ""
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys


ちなみに.ssh/authorized_keysがない場合は作成後パーミッションを600にしておきます。
これでパスワードなしで入ることができるようになります。

次にHadoopをダウンロードします。
Hadoop CoreというのがHadoopの本体なようです。
バージョンは私が検証したときは0.18.1でした。
ダウンロードしたら、展開しディレクトリに入ります。
ディレクトリ以下のconf/hadoop-env.shのJAVA_HOMEを設定します。
私の場合は/usr/java/jdk1.6.0_07に設定しました。
次にconf/hadoop-default.xmlをconf/hadoop-site.xmlにコピーし、hadoop-site.xmlを編集します。
たくさん項目がありますが、下記の3つについて編集を行いました。

<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop</value>
</property>

<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
</property>

<property>
<name>mapred.job.tracker
<value>localhost:54311
</property>


いろいろ設定できるらしいですが、あとで調べてみます。
とりあえず今はこのまま進めます。

次にフォーマットと起動を行います。
./bin/hadoop namenode -formatでフォーマットを行い、./bin/start-all.shで起動することができます。
停止する際は./bin/stop-all.shで停止することができます。
起動確認はjpsがなかったので、psとnetstatで確認しました。

とりあえず付属のサンプルを使って試してみます。
ファイル中の文字列出現数を計測するサンプルを実行してみます。
$ mkdir inputs
$ cat > inputs/file1
hoge hoge hoge fuga fuga
$ ./bin/hadoop dfs -copyFromLocal inputs inputs/
$ ./bin/hadoop dfs -ls
Found 1 items
drwxr-xr-x - hiroki supergroup 0 2008-10-05 21:49 /user/hiroki/inputs
$ ./bin/hadoop jar hadoop-0.18.1-examples.jar wordcount inputs outputs
08/10/05 21:51:11 INFO mapred.FileInputFormat: Total input paths to process : 1
08/10/05 21:51:11 INFO mapred.FileInputFormat: Total input paths to process : 1
08/10/05 21:51:11 INFO mapred.JobClient: Running job: job_200810052142_0001
08/10/05 21:51:12 INFO mapred.JobClient: map 0% reduce 0%
08/10/05 21:51:24 INFO mapred.JobClient: map 100% reduce 0%
08/10/05 21:51:39 INFO mapred.JobClient: Job complete: job_200810052142_0001
08/10/05 21:51:39 INFO mapred.JobClient: Counters: 16
08/10/05 21:51:39 INFO mapred.JobClient: File Systems
08/10/05 21:51:39 INFO mapred.JobClient: HDFS bytes read=39
08/10/05 21:51:39 INFO mapred.JobClient: HDFS bytes written=14
08/10/05 21:51:39 INFO mapred.JobClient: Local bytes read=36
08/10/05 21:51:39 INFO mapred.JobClient: Local bytes written=158
08/10/05 21:51:39 INFO mapred.JobClient: Job Counters
08/10/05 21:51:39 INFO mapred.JobClient: Launched reduce tasks=1
08/10/05 21:51:39 INFO mapred.JobClient: Launched map tasks=2
08/10/05 21:51:39 INFO mapred.JobClient: Data-local map tasks=2
08/10/05 21:51:39 INFO mapred.JobClient: Map-Reduce Framework
08/10/05 21:51:39 INFO mapred.JobClient: Reduce input groups=2
08/10/05 21:51:39 INFO mapred.JobClient: Combine output records=4
08/10/05 21:51:39 INFO mapred.JobClient: Map input records=1
08/10/05 21:51:39 INFO mapred.JobClient: Reduce output records=2
08/10/05 21:51:39 INFO mapred.JobClient: Map output bytes=45
08/10/05 21:51:39 INFO mapred.JobClient: Map input bytes=25
08/10/05 21:51:39 INFO mapred.JobClient: Combine input records=7
08/10/05 21:51:39 INFO mapred.JobClient: Map output records=5
08/10/05 21:51:39 INFO mapred.JobClient: Reduce input records=2
$ ./bin/hadoop dfs -ls
Found 2 items
drwxr-xr-x - hiroki supergroup 0 2008-10-05 21:49 /user/hiroki/inputs
drwxr-xr-x - hiroki supergroup 0 2008-10-05 21:51 /user/hiroki/outputs
$ ./bin/hadoop dfs -ls outputs
Found 2 items
drwxr-xr-x - hiroki supergroup 0 2008-10-05 21:51 /user/hiroki/outputs/_logs
-rw-r--r-- 3 hiroki supergroup 14 2008-10-05 21:51 /user/hiroki/outputs/part-00000
$ ./bin/hadoop dfs -cat outputs/part-00000
fuga 2
hoge 3


ふむふむ、確かにできている。
これ実態はどこにいるんでしょうか。
もしかしてhadoop.tmp.dir?
とすると、/tmp以下はめちゃくちゃヤバいですね。
とりあえず今回は動いているところを見ることが目的だったので、もう一度資料を見直してみます。

いまいちHadoopの力を享受できている気がしないので、もうちょっと調べてみます。
あと、そもそもMapReduceの話とかももう少し詳しく調べてみようと思います。

CentOS 5.2にXenを導入

先日OSC 2008 Tokyo fallに行ってきました。
土曜日は元気がなくて参加できなかったのが残念でした。
やはり刺激になりますね、ああいうイベントは。
しかし、最近企業さんが増えましたね。
初めて行ったときはほとんどいなかった気が…。


この前図らずも2台ほどサーバを手に入れたのでそこにXenを導入してみたいと思います。
下記が導入するマシンのスペックです。
型名NEC Express5800/110Eh
CPUIntel Pentium4 3GHz
Memory2.25GB
HDD250GB(ATA)
OSCentOS 5 32bit
すでにCentOS 5はインストール済みです。
ちなみにPentium 4なのでIntel-VTは搭載されていません。
そこにyumを使ってXenをインストールします。

# yum groupinstall Virtualization


これで仮想化関連のパッケージがインストールされます。
次に、再起動をしXen用のカーネルを読み込むのですが、GRUBの設定を変更してXen用のカーネルがデフォルトで起動するようにします。
/etc/grub.confのdefaultを1から0に変更します。
編集後は以下のようになっているはずです。

default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-92.1.13.el5xen)
root (hd0,0)
kernel /boot/xen.gz-2.6.18-92.1.13.el5
module /boot/vmlinuz-2.6.18-92.1.13.el5xen ro root=LABEL=/
module /boot/initrd-2.6.18-92.1.13.el5xen.img
title CentOS (2.6.18-92.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/
initrd /boot/initrd-2.6.18-92.el5.img


/etc/modprobe.confにalias scsi_hostadapter xenblkを追記します。
これはどうやら仮想ディスクを読み込むための記述らしいです。
# よくわかってません…orz
デフォルトのカーネルを変更するために/etc/sysconfg/kernelのDEFAULTKERNELをkernelからkernel-xenに変更します。

再起動し、Xen用のカーネル(2.6.18-92.1.13.el5xen)で立ち上がってるかuname -aなどを利用して確認します。
xendを立ち上げ、再起動後も立ち上がるように設定します。

# /etc/init.d/xend start
xend を起動中: [ OK ]
# chkconfig xend on


次に、ゲストOS(DomainUというのか)を作成します。
今回はFull-Virtualizationが利用できないので、おのずとPara-Virtualizationに対応したOSしか使うことができません。
インストールにはvirt-installコマンドを使います。

# virt-install --nographics --file=/tmp/hoge
 仮想マシンの名前は何ですか? CentOS5_test
 どれだけの RAM を割り当てますか (メガバイト単位で)? 256
 どの位の大きさのディスク (/tmp/hoge) にしたいですか(ギガバイト単位で)? 10
 インストール場所は何ですか? http://mirror.centos.org/centos/5/os/i386/


virt-installのオプションの--nographicsはテキストモードでインストールを行い、--fileはDomainUのディスクイメージの保存先を指定します。
いくつかの質問に答えると、インストールが開始されます。
あとは通常通りにインストールするだけです。

ちなみにインストール元の指定はhttp、ftp、nfsが可能で、指定した先にimages/xen/があることが条件です。
CentOS5以降とFedora6以降はimages/xenディレクトリが存在したので、直接指定することが可能です。

インストール後、DomainUのコンソールから抜けるにはCtrl+]を押します。
DomainUのコンソールに入るにはxm console コマンドです。


やってみた感じですが、思った以上に簡単に扱えるのですね。
「Para-VirtualizationだとOSにいろいろパッチみたいの当てて面倒なんだろうなぁ」と勝手に思い込んでいたのですが、ここまで簡単だとは。
あとはCobblerと連携させればインストールも楽になれそうな気がするので、今度やってみます。

参考サイト

yumでグループ単位でインストール

OSインストール時にグループを選択してインストールすると思います。
インストール後に、そのグループをまとめてインストールしたい場合もあると思います。
Xが入っていればGUIツールでできそうですが(やったことない上、詳細調べていませんができますよね?)、どうにかyumからやりたい。
昔(Fedora Core1,2?)はできなかったそうですが、yumでもグループインストールが可能です。
まず、今インストールされているグループやインストールできるグループを調べるときはyum grouplistを使います。

# yum grouplist
Loading "fastestmirror" plugin
Setting up Group Process
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* updates: www.ftp.ne.jp
* addons: www.ftp.ne.jp
* extras: www.ftp.ne.jp
Installed Groups:
Editors
System Tools
Legacy Network Server
Dialup Networking Support
Network Servers
Emacs
Web Server
Mail Server
Yum Utilities
Available Groups:
Tomboy
Cluster Storage
Office/Productivity
Engineering and Scientific
MySQL Database
Development Libraries
Beagle
GNOME Software Development
Text-based Internet
X Software Development
Virtualization
DNS Name Server
GNOME Desktop Environment
Authoring and Publishing
Base
FTP Server
Mono
Games and Entertainment
XFCE-4.4
Legacy Software Development
Clustering
Java
Java Development
OpenFabrics Enterprise Distribution
Legacy Software Support
X Window System
Graphics
Ruby
Windows File Server
Printing Support
KDE Software Development
KDE (K Desktop Environment)
Server Configuration Tools
Horde
Sound and Video
PostgreSQL Database
Administration Tools
News Server
Development Tools
FreeNX and NX
Graphical Internet
Done



指定したグループをインストールするときはyum groupinstallを使います。

# yum groupinstall "FTP Server"


ちなみにこのグループ名でkickstartの指定にも使えます。
意外と使っていそうで使ってない機能な気がしました。