オレンジのトップページ

2009年5月5日火曜日

OpenSolarisをESXiのNFSストレージとして使う

Solaris美しい、ぜひレコメンドしていきたい。


ESXi3.xは興味深いが、ホストの障害検知が削られているので使うのは厳しい。 でもとにかくとりあえずESXiのテスト環境用に速いNFSストレージが欲しい時には次のようにして用意できる。


 


DHCPからStaticへ変更


GUIから システム→システム管理→ネットワーク で 手動 を選択し、適切なIPアドレスとDNSサーバ、必要ならホスト名を入力する。


このままでは DNS を引けないので /etc/nsswitch.conf を手動で編集し


hosts:       files dns
ipnodes:     files dns


と編集する。 なおGUIでの操作は実際には次の内容をバックで実行しています。 


1.nwam(ネットワーク自動構成デーモン)を停止し、手動モードを有効にする


pfexec /usr/sbin/svcadm disable svc:/network/physical:nwam
pfexec /usr/sbin/svcadm enable svc:/network/physical:default


2./etc/nodename, /etc/hostname.(ネットワークデバイス名), /etc/hosts, /etc/resolv.conf  を編集


 


ZFS共有


インストール直後、デフォルトで rpool というZFSストレージプールが存在しています。


zpool list
NAME    SIZE   USED  AVAIL    CAP  HEALTH  ALTROOT
rpool  76.5G  3.49G  73.0G     4%  ONLINE  -


ZFSファイルシステムの内容を確認します。 ZFSの仕様どおり rpool ZFSストレージプールは そのまま /rpool にマウントされています。 rpool/ROOT と rool/ROOT/opensolaris は使用中のファイルシステムで、 / にマウントされています。 rpool/export, rpool/export/home, rpool/export/home/admin はそれぞれ、ユーザ領域用のファイルシステムとなっています。


zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
rpool                    4.49G  70.8G    72K  /rpool
rpool/ROOT               2.37G  70.8G    18K  legacy
rpool/ROOT/opensolaris   2.37G  70.8G  2.24G  /
rpool/dump               1023M  70.8G  1023M  -
rpool/export              128M  70.8G    19K  /export
rpool/export/home         128M  70.8G    19K  /export/home
rpool/export/home/admin   128M  70.8G   128M  /export/home/admin
rpool/swap               1023M  71.8G    16K  -


 


zfs mount
rpool/ROOT/opensolaris          /
rpool/export                    /export
rpool/export/home               /export/home
rpool/export/home/admin         /export/home/admin
rpool                           /rpool


 


共有用のファイルシステムを作成します


zfs create rpool/export/home/nfs


作成したファイルシステムを共有します


zfs set sharenfs=on rpool/export/home/nfs
(zfs share rpool/export/home/nfs でも同じ結果が得られます)


 


確認します。 ここで share コマンドを使っていますが、Sunのドキュメントによると



http://docs.sun.com/app/docs/doc/819-6260/gaynd?a=view
「従来の share および unshare コマンドは・・・推奨されていません。」


ということなので共有の確認をするためだけに使います。



 


share
-@rpool/export  /export/home/nfs   rw   ""


sharenfs=on はデフォルト共有のキーワードで、制限なしの共有です。IPアドレスで少し制限をしておきます。


zfs set sharenfs='rw=@192.168.0.0/16' rpool/export/home/nfs


 


再度確認


share
-@rpool/export  /export/home/nfs   sec=sys,rw=@192.168.0.0/16   ""


 


NFS共有はデフォルトでnobody権限でアクセスされますので、フォルダのパーミッションを修正しておきます。


chown  nobody /export/home/nfs
chgrp  nobody /export/home/nfs


 


データはWinSCPを使ってSSHで操作してもいいのですが、普通にFTPを使いたいので/etc/group を編集し、 nobody グループにadmin を追加しておきます。


nobody::60001:admin


いちおう 50Gに Quotaを設定しておきます


zfs quota=50g rpool/export/home/nfs


 


 


OpenSolaris側は以上です、続いて ESXi側の操作です。



Configuratioin -> Storage -> Add Storage


esxi-nfs1.jpg


 


Server: 192.168.24.24


Folder: /export/home/nfs


Datastore Name: datastore-nfs1




esxi-nfs2.jpg



このように追加できます。容量が先ほどQuotaで設定した 50GB となっているのを確認できます。



esxi-nfs3.jpg


 


以上



2009年3月14日土曜日

CentOS-Xen

RedHat5/CentOS5のCentOS-Xenの手順を復習しておく。ASCII社での導入事例 http://ascii.jp/elem/000/000/212/212112/summary.html?ml は面白い。



インストール時に選択するパッケージは3つ・GNOME
・仮想化
・ベース

インストール時の設定・SElinuxを無効に。ファイアウォール(iptables)もお好みで無効に。
・「システムクロックでUTCを使用」は有効に。仮想マシンのハイパーバイザー側では、実マシンをUTCで使っておいた方が無難。インストール後変更したい場合は /etc/sysconfig/clock が HWCLOCK="--localtime" なっているので、 HWCLOCK="-u" へ変更すると 実マシンでUTCがセットされる。
・IPv6は無効

インストール後に追加するパッケージ・httpd (OSのISOイメージのマウントに必要)
・system-config-lvm (今回LVMに仮想マシンのストレージを作成するが、このツールがあるとLVMをビジュアル的に確認できて楽しい(笑) )



仮想マシンの作成

まず ストレージを用意する。 LVMで8G程度作った。LVMの操作については こちら http://pantora.net/pages/linux/lvm/1/ のページがわかりやすい。


lvcreate -L 8G -n LogVol03 VolGroup00


ゲストOSのインストールイメージをISOファイルで用意し、 /var/backup/xxxxx.iso に置く。 mount -o loop ISOファイル名 /mnt/iso としてマウントし、 ln -s /mnt/iso /var/www/html/iso とシンボリックリンクを張る。 そしてhttpd を起動。 ノートパソコンなどから http://IPアドレス/iso でアクセスし、インストールイメージの内容が見れるかどうか確認しておく。 このへんの方法は http://wingse.blog57.fc2.com/blog-entry-123.html のページを参考にした。



こまで準備ができたら

(GUIで virt-manager を使って設定する場合 )
アプリケーション メニュー→システムツール→仮想マシンマネージャ を起動。

・完全仮想化 と 準仮想化 の選択は 当然 準仮想化 を選択
・「ストレージ」には 先ほど用意した LVMボリュームを指定する。 /dev/VolGroup00/LogVol03
・「インストールメディアのURL」には http://IPアドレス/iso

そのほかは先のハイパーバイザ側と同じオプションでインストールを完了させる。



(CUIで virt-install を使って設定する場合 )

# virt-install

--------------------------------------------------------------------------------------------------------------------
仮想マシンの名前は何ですか? system2

 どれだけの RAM を割り当てますか (メガバイト単位で)? 256

 What would you like to use as the disk (file path)? /dev/VolGroup00/LogVol04

 グラフィックサポートを有効にしたいですか? (yes または no) no

 インストール場所は何ですか? http://192.168.168.20/iso



インストールを開始しています...

--------------------------------------------------------------------------------------------------------------------


ここから ターミナルが仮想コンソールになる。 ゲストを終了すると、virt-install プログラムは仮想コンソール を離す。 virt-install コマンドはこのへん (http://www.asahi-net.or.jp/~aa4t-nngk/xen.html#guestvirtinstall) とか、このへん参考に。 (http://www.os-museum.com/linux/xen/xen310f8remote/xen310f8remote.htm



ゲストインストール後の設定

・IPv6を無効にする(必須)
ゲストOSに CentOS5.x を使う場合、 ゲストOS側でリブートすると確実に再起動に失敗する罠。再起動を繰り返して立ち上がらない。 ログを見ていると IIPv6 over IPv4 の処理で落ちているので ホスト側とゲスト側両方で IPv6を無効にしておく。

インストール時に IPv6 を使わない設定にしていも /etc/modprobe.conf  は書き換えてくれず IPv6が有効になっているので次のように修正すること。 この手順は http://pooh.gr.jp/item-4933.html のページを参考にした。

/etc/sysconfig/network
NETWORKING_IPV6=no

/etc/modprobe.conf
alias net-pf-10 off



仮想マシンの管理、自動起動コマンドの作成

毎回 仮想マシンマネージャ を使って起動など 管理するのは面倒なので コマンドラインから行える用準備する。 手順についてはこちらの ThinkIT のページ http://www.thinkit.co.jp/free/article/0706/10/4/ を参考にした。

<準備>
仮想マシンの名前は今回 system1 です。 仮想マシンが立ち上がった状態で 
virsh dumpxml system1 > /etc/xen/system1.xml
そして、 <console tty・・・> の行を削除、<graphics・・・>の行は <graphics type='vnc'/> と修正しておく。

<主なコマンド>
起動: virsh /etc/xen/system1.xml start
一覧: virsh list
終了: virsh shutdown (数字)
強制終了: virsh destroy (数字)

<自動起動コマンドの作成>
ThinkITの sample1.sh をそのまま書き換えて作った。 動作チェック後 /etc/rc.local に登録して 自動起動させる。


sample1.shの内容

#!/bin/bash

VMNAME=rhel5
IPADDRESS=192.168.0.100
VMFILE=/etc/xen/rhel5.xml
TIMEOUT=600
STATE=1

virsh create $VMFILE > /dev/null 2>&1
rc=$?
[ $rc -ne 0 ] && exit $STATE

before=$(date +%s)
now=$(date +%s)

while [ $((now - before)) -le $TIMEOUT ]
do
  ping -c 1 $IPADDRESS > /dev/null 2>&1
  rc=$?
  if [ $rc -eq 0 ]; then
    STATE=0
    break
  fi

  now=$(date +%s)
done

exit $STATE


2009年1月22日木曜日

OpenSolaris 2008.11- Indiana

OpenSolarisがZFSファイルシステムや仮想化が標準となっていたりして魅力的な仕様になっている。 昨年の2008年12月に ZDNetの記事で概要が紹介されていたOpenSolaris 2008.11 (Idiana)をセットアップする。


インストーラはミラーに対応してないので、 インストール後にZFSのRAID1ミラー化するまでを記録。


 


 


インストールメディアの取得はこちら http://opensolaris.org/os/downloads/ から。 オープンソースのディストリビューションは数ギガバイトが普通ですが、ダウンロードのサイズは700MBとコンパクト。

OpenSolaris-Indiana-download.jpg




Live-CDになっていてCDから起動すると、 デスクトップ上のインストール用アイコンをクリックすることでインストール開始。


opensol-inst1.jpg





1基目のディスク全体をインストール先に指定します。 ZFSはソフトウェアミラーリングできますが、それはインストール後に設定します。 このインストールテストは DELL SC440 を使用しています。





opensol-inst2.jpg



30分程度でインストールは終了しますので早速リモートからログインして作成されたZFSストレージプールおよびファイルシステムの情報を確認します。 ZFSストレージプールが rpool という名前でデフォルト作成されています。

*以降のZFSの操作については Sunの Solaris ZFS 管理ガイド を参考にしています。




# zpool status

  pool: rpool

 state: ONLINE

 scrub: none requested

config:



        NAME        STATE     READ WRITE CKSUM

        rpool       ONLINE       0     0     0

          c4d0s0    ONLINE       0     0     0






# zfs list

NAME                      USED  AVAIL  REFER  MOUNTPOINT
rpool                    4.30G  71.0G    72K  /rpool
rpool/ROOT               2.30G  71.0G    18K  legacy
rpool/ROOT/opensolaris   2.30G  71.0G  2.23G  /
rpool/dump               1023M  71.0G  1023M  -
rpool/export             58.5K  71.0G    19K  /export
rpool/export/home        39.5K  71.0G    19K  /export/home
rpool/export/home/admin  20.5K  71.0G  20.5K  /export/home/admin
rpool/swap               1023M  72.0G    16K  -





ディスクのハードウェアIDを確認


# format

Searching for disks...done

AVAILABLE DISK SELECTIONS:

       0. c4d0 <DEFAULT cyl 10008 alt 2 hd 255 sec 63>
          /pci@0,0/pci-ide@1f,2/ide@0/cmdk@0,0
       1. c5d0 <DEFAULT cyl 10008 alt 2 hd 255 sec 63>
          /pci@0,0/pci-ide@1f,2/ide@1/cmdk@0,0





2基目のディスクを ZFSストレージプール rpool  に追加していきます。

# format

1

fdisk

ここで全体を solaris にする。

 

             Total disk size is 10011 cylinders
             Cylinder size is 16065 (512 byte) blocks

                                               Cylinders
      Partition   Status    Type          Start   End   Length    %
      =========   ======    ============  =====   ===   ======   ===
          1       Active    Solaris2          1  10010    10010    100


パーティションテーブルを 1基目→2基目 にコピーする

# prtvtoc /dev/rdsk/c4d0s0 | fmthard -s - /dev/rdsk/c5d0s0

 

zpool に追加する。-f を付けないと怒られます

# zpool -f attach rpool c4d0s0 c5d0s0


Please be sure to invoke installgrub(1M) to make 'c5d0s0' bootable.

(instalgrubコマンドで c5d0s0 を起動可能にしろとか言ってます。)



ちなみに外すときはその逆。

zpool detach rpool c5d0s0




次のコマンドで同期状況を確認できます。今回 80GBのミラー同期は約4分で完了しました。

# zpool status



2基目のディスクへのGRUBのインストールをするは rsync を Redhat/CentOS でやった http://orangesooda.com/centos_redhat/2008/08/rsyncgrub.html と同じ。 Sunのマニュアル P84 にも紹介されている。bootスライスは Solarisでは伝統的に スライス8 なので次のようになる。Solarisには便利な installgrub コマンドがあるのでこうする。



# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c5d0s0




 

以上。作業が終わったら、電源を落として作業終了。

shutdown -y -i5 -g0

 

 

以下は参考ページ

zpoolコマンド(SUNマニュアルページ)


 

ぼくの今回の作業と同じことをしている


 

Solarisのパーティションについては


こちらのページの解説が詳しい。一部引用する。


Part(Slice)番号 用途

0 システム(root)。通常、swapの次に置く。

1 swap。通常シリンダ1から置く。

2 全体を指す。あえて設定しなくてもそうなってるはず

3 自由に使ってよい

4 自由に使ってよい

5 自由に使ってよい

6 自由に使ってよい

7 自由に使ってよい。インストーラは/export/homeをここに置く

8 boot。シリンダ0を利用する

9 必要ならalternates。1~2のスライスを利用する。