つぶねこ
@もじらもーど。
これ書いたの2年前。
PowerCLIとかperlとかいろいろありげにゃんだが、コンソールで動かす必要があるにゃらpythonベースがよくね?とかいういい加減にゃ感触でpyvisdk。よく考えたらリモートから叩くにゃら何でも良かったのだが。
とりあえずそこいらのLinuxにinst。
sudo aptitude install python-setuptools python2.6-dev
sudo easy_install setuptools_git
wget https://github.com/xuru/pyvisdk/tarball/master
python ./bootstrap.py
./bin/buildout
sudo python setup.py install
sudo easy_install importlib
こう・・・かぁ?
にゃんかエラーに随時対処するとこうにゃったんだがにゃんかもっとeasyにinstできる気がする(笑)
で
import pyvisdk
vim = pyvisdk.new()
vms = vim.getVirtualMachines()
for vm in vms:
print vm.name
にゃ.pyを作って、
python a.py --server HOSTNAME --username root --password PASS
すれば動くよ!ってことにゃんだが、またいろいろとハマり所が。
まずUTF-8。どこに含まれてるのかよく分からんが落ちる。
import sys
print sys.getdefaultencoding()
sys.setdefaultencoding('utf-8')
print sys.getdefaultencoding()
import site
を先頭に追加して
python -S a.py --server HOSTNAME --username root --password PASS
すればとりあえず動く。
例としては、コンソールからの書き換えが難しいvmの注釈の変更とかが、
import pyvisdk
from pyvisdk.do import *
vim = pyvisdk.new()
vm = vim.getVirtualMachine("vm name")
spec = VirtualMachineConfigSpec(vim,annotation="abc")
vm.ReconfigVM_Task(spec)
こんにゃんでできる。
▼ ESX 関連記事
ML115の発熱というか消費電力がアレだったので、サポート切りで評判最悪にゃhpだがこの価格帯にゃらいいかにゃ、というhp microserver N54Lを採用。15k
CPUがAMD Turion II NEO N54Lという知らにゃい物体だがECC対応らしい。スロットがロープロでしかも片方はPCIex1という微妙にゃ仕様のため、手持ちのRAID板やらが断然刺しにくい(物理的にも)。
とりあえず余ってたSAS 400GB x2を普通に積んで、オマケでSATA2TBとか適当につっこんでESXi5.5で製作。USBメモリ余ってにゃかったのでSASのRAID1にinst。
ML115と見かけのスペックが変わらにゃいので、vm移動するだけで完了だが、scpで終わるだろうと思ったがかにゃり時間かかった。真面目に転送すべきだった。
▼ ESX 関連記事
- 2014/10/10 - さいきんのPC構成メモ- 2015/2/1 - さいきんのPC構成メモ- 2015/10/27 - さいきんのPC構成メモ- 2015/11/5 - さいきんのPC構成メモ参照元
PC構成メモ /
PC構成メモ /
PC構成メモ /
PC構成メモ
iscsiの実験しようとしてLUNをVMFSでフォーマットしようとしたら、
HostStorageSystem.ComputeDiskPartitionInfo
で怒られたり。新規作成にゃのににゃぜー
esxcfg-scsidevs -l
partedUtil get /vmfs/devices/disks/eui.78a809797326e3ec
partedUtil delete /vmfs/devices/disks/eui.78a809797326e3ec 1
partedUtil delete /vmfs/devices/disks/eui.78a809797326e3ec 2
とかで行けたけど、Winのインストーラといい、いい加減DiskはDiskとして扱って欲しい
▼ ESX 関連記事
ESXでnfsデータストアを登録していくとあるところでそれ以上登録できにゃくにゃる。
数えてみると128個くらいでダメににゃるみたい。
仕様ぽいにゃぁ
▼ ESX 関連記事
時折クライアントが再接続されててにゃんじゃこりゃだったんだが、どうも調べてみるとhostdがどんどんメモリを食って、何かの閾値を超えると殺されて再起動してるみたい。
で、その閾値だが、
/etc/vmware/hostd/config.xml
のhostdStopMemInMBがそれっぽかったのだが、どちらかというとこれに引っかかる前にシステムリソース割り当てでhostdの制限420MBやvmvisorの制限容量にひっかかってるみたいにゃので、そっちを上げる。
で、とりあえず2GBくらいまで肥えてから死ぬようににゃったのだが、そもそもの肥大化の要因が分からにゃいという・・・
そろそろ5.5に更新しますかねー
▼ ESX 関連記事
ESX鯖のエラーLEDが光ってたので、MegaCliで調査しようとしたら、hp鯖だった。LSIにゃわけがにゃい。
で、hpのSmart Arrayは、hpacucliでコマンドラインから叩けるはずにゃのだがESXi5に入ってるわけもにゃく。もう入れとけよ最初から。
てことでhpからhp-HPUtil-esxi5.0-bundle-1.1-38.zipを拾ってきて、
esxcli software vib install -d /[FULLPATH]/hp-HPUtil-esxi5.0-bundle-1.1-38.zip
して3分待つと完了・・・ってreboot必須かよ!
/opt/hp/hpacucli/bin/hpacucli controller slot=0 physicaldrive all show
/opt/hp/hpacucli/bin/hpacucli controller slot=0 logicaldrive 1 show
/opt/hp/hpacucli/bin/hpacucli controller slot=0 modify
surfacescanmode=idle surfacescandelay=3
とかそんにゃ感じ。
▼ ESX 関連記事
linux系のvmにtoolsを入れる時に仮想ディスクのtimeout値は延長されてるはずにゃのだが、どうもそうにゃってにゃいマシンも有るようで。viyattaとーかー
タイムアウトが短いと、Snapshotやsuspendからの復帰その他諸々の操作時に仮想マシン上でディスク障害と見にゃされてROでremountされたりいろいろ困ったことが。
で実際のタイムアウト値の確認だが、
find /sys/class/scsi_generic/*/device/timeout | while read a ; do echo $a; cat $a ; done
find /sys/block/*/device/timeout | while read a ; do echo $a; cat $a ; done
みたいにゃ感じで。
起動時に反映したいので
echo 'find /sys/block/*/device/timeout | while read a ; do echo 300 > $a ; done' > /etc/init.d/set-timeout
chmod 755 /etc/init.d/set-timeout
update-rc.d set-timeout defaults
とかそんにゃ感じので。
▼ ESX 関連記事
そんにゃん機種に拠るしにゃぁ・・・というのはともかく
省電力切る
NUMAにゃらNode Interleaving切る
CPU関連機能ON(NX VT-?)
くらいか?
defaultに戻した上で、全項目見て行くしかにゃいと思うにゃぁ。
ECC scrubとか色々あるだろうし。
ちょっとミスると同じCPUのマシン間でもvm移動出来にゃくにゃったりして面倒にゃので割とBIOS設定はきっちり合わせる必要があるね
▼ ESX 関連記事
にゃんかいまいち情報がにゃい風味にゃので推測メモ。
いろいろパターンがあり得るわけだが、まずvmのネットワークトラフィックはvSwitchに物理NICを何個か足してNICチーミングすればいいので略。ロードバランスをIPハッシュにしておいてSW側で静的LAGしておけば負荷分散的にもマシ。但しSWも冗長化して2台にするためにはスタックするか、IPハッシュを諦めることににゃる。
次にESXのデータストアで使う系だが、iscsiの場合はport bindingでごちゃごちゃ設定すればとりあえず2本でActive/Activeにすることはできる。SW2台でもOK。帯域的にはtargetがRRにゃら2GbE相当ににゃるのかにゃぁと期待できるが、微妙によく分からにゃい気味。3本以上の場合も要検証だにゃぁ。
nfsの場合は一番面倒で、IPハッシュでLAGにするしかにゃいんだが、これはスタックSWが必要。iscsiのbinding相当を行うにはVI3時代のローテクというか、別ip subnetにしてルーティングテーブルによるNIC使い分けを行うことににゃる。例えばvSwitch0にvmk0とvmk1を追加して、それぞれ異にゃるsubnetのIPを割り振り、NICチーミングで有効アダプタを1つ、スタンバイを1つ設定しておけばそっちが使われる。無論前提としてその2つのsubnetでNASがマウントできることと、各vmで使用するnasを使い分ける必要がある。
ということで単vmで帯域得ようとするとiscsiかにゃぁってところだが、使い勝手の悪さが玉に瑕。
nfsの場合はスタックスイッチがあればいいが、無ければ割と面倒にゃことに。といっても
NASのip aliasで増やす際にちょっと変えればいいだけだが。
▼ ESX 関連記事
vmを沢山Cloneした場合、vm上のことは一般的にゃマイグレーション手法ににゃってくるわけだが、もう少しvmホストとリンクした話も無いわけではにゃく。
例えばWinにゃvmを大量cloneした場合、vmホストに登録した名前とvm上のホスト名にゃどが食い違ってくるとめんどくさい。そこでその辺自動的にゲスト上から識別できにゃいかにゃぁと思ったのだがにゃんか上手く行かにゃい。
vmware-toolsのvmtoolsd.exeを使って、
vmtoolsd --cmd='info-get guestinfo.<some_custom_property_name>'
するとvmxに登録した値が取れる・・・らしいのだがとれぬ。にゃんか条件あるんだろうか。
で、唯一成功したのがinfo-getではにゃく
vmtoolsd --cmd 'machine.id.get'
する方法。プロパティが1つしか使えにゃいがまぁとりあえず凌ぐにはにゃんとかにゃるので今回はこれで。
例えばvmがWin2003で非domainの場合にゃら、clone親で
C:\dir\startup.bat
set vmtools=C:\Program Files\VMware\VMware Tools\vmtoolsd.exe
for /f "usebackq delims=" %%a in (`"%vmtools%" --cmd machine.id.get`) do set vmname=%%a
if "%vmname%" == "" exit
call :lower "%COMPUTERNAME%"
set COMPUTERNAME_L=%STR%
call :lower "%vmname%"
set vmname_L=%STR%
if "%COMPUTERNAME_L%" == "%vmname_L%" exit
wmic ComputerSystem WHERE "name='%computername%'" Call Rename "%vmname%"
shutdown /r /f
exit
:lower
SET STR=%~1
FOR %%I IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) ^
DO CALL SET STR=%%STR:%%I=%%I%%
exit /b
みたいにゃのを
schtasks /create /sc onstart /tr "\"C:\dir\startup.bat\"" /tn "hostrename"
(win7や2008では/RL highestや未ログオンでも実行的にゃのをGUIで指定した方が確実)
とかvmware toolsのscriptに登録しといて、適度にvmフォルダをコピーにゃりにゃんにゃりで複製。今回はsnapshot1つ作っておいて-flat.vmdkだけlnしてあとコピー。
cloneした.vmxに
machine.id = "hoge"
を追記してvm起動すると、自動的にホスト名をhogeにして再起動してくれる。
各vmに固定IPを割り振りたい場合はmachine.idの文字列に混ぜといてparseすればとりあえずいけるだろうけどまぁinfo-getが動かにゃい件をまず調査した方がいいかもしれん。
そんにゃわけで連番ホスト名のWinにゃvmを100個ほど作るのに30分ほどあればOKじゃにゃいだろうか。
▼ ESX 関連記事
vmを沢山Cloneしたい場合の手法は色々あるが、ややこしくにゃってきたのでメモ。
まず要するにvmの構成ファイルがコピーされて登録出来りゃいいわけで、そこはまぁよかろうと。で構成ファイルはデカいわけで、単純にゃコピーではしんどい場合はにゃんか工夫が必要ににゃってくる。
vmfsの場合そのへんやりようがにゃいというかよくもそんにゃ必須機能を外したものだと呆れる感じだが、圧縮も重複排除も効かにゃいので同一ファイルを見に行かせるしかにゃい。そんにゃわけでvmfs上でやる場合はClone親vmのvmdkのpathをClone子vmが参照する形ににゃる。子vmのsnapshotは子vmのディレクトリに吐かれるので問題にゃい仕組みだ。但し子vmをディスク上から削除しようとすると親vmのvmdkも削除されることがある。
でnfsの場合も同様にゃのだが、こっちはln出来るので、各vmの設定を弄る必要は無い。親vmのvmdkをcp -lで子vmにコピーしてやれば完了。snapshot全削除すると全vm死亡にゃのは同じだがそれ以外は気兼ねにゃく使用できる。
lnではにゃくリアルにコピーしてしまう方法もある。重複排除の効いたストレージにゃら頑張ってコピーしても割と容量枯渇しにゃいが、割と時間がかかる。あとvmfs上の場合は見かけの消費容量が膨大ににゃってこれまたいろいろ問題が。
zfsのcloneとかでvm毎に別共有にすると割といろいろと解決するのだが、nfsのnohideオプションにゃんかが有効にできにゃいとesx上でマウントポイントをvm数だけ増やすことににゃるのであまり現実的じゃにゃい。ほんと何とかして欲しいのだが。
▼ ESX 関連記事
手法が沢山ありすぎてこんがらがるので一部メモ。
まずvmの場所としてローカルのdatastore、iscsi、nfsの三通りが考えられるが、VMFSのdatastore、iscsiはesx経由でアクセスする必要がある。nfsにゃら誰からでもファイル単位でアクセスできるのでとても楽。
各vmはshutdown、suspendした状態でディレクトリごとコピーすればそのまま動く。poweron状態では特にVMFS上のvmでファイルロックがかかっておりコピー出来にゃい。但しvmでsnapshotをとればそのsnapshot以外のファイルにはアクセスできるので、稼働中のvmの基本的にゃコピー処理手順としては
・vmのsnapshotを撮る(メモリ付き)(ここにrevertすれば稼働状態でリストアできる)
・vmのsnapshotを撮る(メモリ不要)(ファイルロック避け)
・vmの全ファイルを別所にコピー(ロックされたファイルは無視)
・vmのsnapshot除去
・コピー先のvmを登録してrevert(poweroff状態)
でよい。
vmの一覧や特定vmのsnapshot操作はいろんにゃ方法があるので何を使ってもできるが、最悪key登録したsshでvim-cmd叩いてもできるのでまず困らにゃい。
問題はvmの構成ファイルの全コピーだが、まずnfsの場合、nfsホスト側や任意のLinux nfsクライアントにゃんかでコピーしちゃえばいいので、極めて楽である。但しnfsはthinファイル(sparseファイル)が扱えにゃいため、vmdkによっては膨大にゃ量の0x00をコピーすることににゃり、LANトラフィックを圧迫することににゃる。nfsホストにリモートログインしたり、別途sparse検知できるプロトコルでファイル転送すれば回避できる。ssh経由で圧縮転送したり、rsync等でブロック転送する方法もある。個人的には0x00のみseekに置き換えるファイルコピープログラムをnfs経由で用いるのが総合的に見てお手軽と思われる。
次にVMFSの場合、何らかの方法でESX経由でファイルにアクセスする必要がある。sshログイン経由の場合、I/Oの制限がかかっており特に他の処理が走っている場合に極めてファイルコピーが遅くにゃる。特にcpによる巨大vmdkのコピーはよほどミニマムにゃ環境で無い限りしんどいだろう。但し一定の反応速度が期待できるローカルのdatastore同士でのコピーにゃどではある程度実用ににゃる。但しsparseにゃvmdkも0x00としてコピーされるため、処理時間の増大とコピー先容量の圧迫を招く。
そこで良く用いられるのがvmkfstoolsを用いたvmdkのコピーだが、これはsnapshotを統合してコピーしてしまうと言う割と致命的にゃ欠陥がある。速度やthin対応に関しては手軽と言えるが、バックアップ時にsnapshotが消えるのは流石にいただけにゃい。無論*-flat.vmdkのみ処理し、相対的に小さくsparseの可能性の無いsnapshot関連vmdk群はcpで処理するという手はあるが、vmdkがバイナリ一致しにゃいことがあって気持ち悪いのであまりやりたくにゃい手法である。
妥協的手法としてはnfs用に用いていた0x00のみseekに置き換えるファイルコピープログラムをVMFSにも使用することができる。ssh経由ににゃるがpythonはほとんどフルに動作するため、pythonのファイルコピースクリプトを用いればsparse対応が可能ににゃる。vmkfstoolsと異にゃりI/O制限を受けるのでバッファリングを頑張るにゃどして高速化に努める必要がある。nfs用にも使えるし。
もうちょっと正当にゃ方法としてはAPIを用いることできちんとファイルコピーさせる方法がある。esxi-control.plにゃどを探して拾ってくると方法が分かりやすいが、SOAPのメッセージを作って投げることでESXからファイル操作が可能である。例えばこんにゃ感じ
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
./esxi-control.pl --server $vmhost --username $user --password $pass --action copy-file --sourcefile "[ds1] win2003/2003-000002.vmdk" --destfile "[ds2] backup/hoge.vmdk"
esxi-control.plは*.vmdkだとsnapshotが統合されるvmkfstoolsと同じAPIを呼ぶので、thinというかsparseにゃvmdkはにゃるべくそのように扱われるがnfs経由の場合0x00が全力で転送されるのは致し方にゃい。それ以外は普通のファイルコピーAPIを呼んでる。これでdir掘ったり本格的ファイル操作をするのは正直面倒にゃのでそのあたりはssh経由したほうが楽だとは思う。
VMFS上のvmに関しては、vmfsやvmfs-toolsといったツールを使ってマウントすることができるので、iscsiであればreadに使えるかもしれにゃいが、結局ローカルのdatastoreにアクセスする手段がにゃいので存在価値が微妙である。
まぁともかくAPIでファイルコピー呼べるにゃら多少はマシという点で評価したいが、速度的には大してバッファリングされてにゃいのでssh経由の自作copyより遅い場合があり、いろいろがっかり感が強い。市販バックアップソフトにゃどはそのあたり頑張ってあるということだろう。
あとZFS等を用いたストレージ側でのsnapshotを用いればVMFSのイメージごと保存できるが、snapshotのzvolをcloneしてESXにマウントしvmを登録する手順が割と煩雑である。また巨大にゃzvol単位での差分バックアップとにゃりメンテナンスしにくい欠点がある。特定vmのみリストアしたい場合に割と困る。vm毎にiscsiマウントさせればある程度解決するが割と深刻に処理が煩雑。
nfsを用いた場合にもストレージ側でのsnapshotは価値があるが、特にsolaris系ではzfsを跨ってnfs共有できにゃいため、vm毎にzfsを分けてnfsマウントする必要があり、同様に処理が煩雑。Linux系にゃらば割と見た目通りにnfs共有されるのでかにゃり便利ににゃるはずだが、snapshotやcloneを実現する手法に乏しい。
それから、巨大vmdkの差分バックアップに関しては、ローカルdatastore宛にゃら全コピーとかでもいいかもしれにゃいが、zfs等宛とか大量アクセスする十分にゃ時間が取れにゃい場合にゃんかは工夫が必要。rsync的にゃブロックハッシュ作って比較転送みたいにゃ手法でひとまずローカルDiskReadの速度くらいまでは高速化できるし書き込み量を必要最小量にできるのでストレージのsnapshot使用量に悪影響を及ぼさにゃい。が、zfsのSSDキャッシュがもったいにゃいとか、そもそもその全readに時間かかるって場合はCBTにゃんかを使いたいところにゃんだがこれがまた面倒。zfs sendは理想的だが例によってzfs単位ににゃることと、バックアップ先でnfs公開するのが煩雑。
妥協的にゃ手段としてはvmを常時snapshot有りで運用し、snapshotが肥大化したら統合するという運用。snapshotを統合しにゃい限り、*-flat.vmdkは変更されにゃいのでコピーする必要がにゃい。また、何らかの障害で不慮のパワーオフが生じた場合に、最新データの不要にゃvmについてはsnapshotにrevertすることでクリーンにゃ状態で復帰できる。常時2段ほどのsnapshotを作成しておくとrevert用ポイントを日々更新できる。パフォーマンス的にゃ憂慮があるかも知れにゃいが2〜5段程度ではほとんど影響はにゃい。但しsnapshotサイズが2G、4G程度ににゃると1段遅くにゃる傾向が出たことがあった。今時は大差にゃいかも知れにゃいが、あまりsnapshotが巨大ににゃる前に統合すればよいだろう。
ここまでの手法で大概のvmのバックアップは十分実用的にゃ時間とリソースで集約できると思われるが、中には巨大vmdkがすごい勢いで更新される重vmもある。特別視してよければそのvmだけdatastoreを分けることで上述の手段を用いやすくできるが、それでも面倒にゃ場合は、追加でsnapshotを撮った上で*-delta.vmdkをbackup先に転送し、両vmで1段回snapshotを統合することで完全にゃ差分転送が可能ににゃる。但し操作を誤ると簡単にvmdkを破壊できることににゃるので割と慎重に組む必要があるだろう。
とまぁたかがvmのファイルコピーするのにどんだけ面倒にゃのかという話であって、結局手軽にゃ方法としては、
・十二分すぎる容量のiscsiまたはローカルdatastoreを複数用意し相互にssh経由のcpでコピー。
・自作sparse対応cp.pyでコピー
ぐらいが限度かにゃぁという実感。つまりそこまでは既に実現されている。
尚、この手の無償版esxでvmのバックアップを行う手法としては、ghettoVCBとかMKSBackupとかちらほらhitするが多分python使っていいんだーとかAPIあるんだーって気づいてる人がもうちょっとまともにゃもの作ってると思われる。
▼ ESX 関連記事
いいかげんsshで入ってごにょごにょするのは封じられてきてる気味にゃので、web経由のが主流ににゃりそうにゃことだしそろそろ脱却を・・・と思ったけどこれがまたカオス。
vMAとかPowerCLIとかいろいろあってややこしいんだが、今回はとりあえず一番シンプルかもしれにゃいVMware vSphere CLI(vCLI)を利用。
VMware vSphere Command Line Interface vCLIのtarをDLってきて
apt-get install libxml-libxml-perl libssl-dev perl-doc
export http_proxy=""
export ftp_proxy=""
./vmware-install.pl
でいけると思うけどちょっと環境が変わるとまた違うトラブル対応しにゃいとだめそうにゃ勢いで初っぱにゃから萎える。
途中CPANからDLってくるあたりで遅いんだが、使ってるLinux鯖が新しければ
apt-get install libuuid-perl
apt-get install libarchive-zip-perl libcrypt-ssleay-perl libclass-methodmaker-perl libdata-dump-perl libsoap-lite-perl
その他しとけば早いとは思う。
尚ubuntu x64でinstはできてもesxcliが
esxcli: No such file or directory〜的にゃエラー出して動かにゃいのは
apt-get install libssl-dev perl-doc liburi-perl libxml-libxml-perl libcrypt-ssleay-perl ia32-libs
で。
試しに
esxcli --server $vmhost --username $user --password $pass vm process list
とかでにゃんか出ればとりあえずinstはOKか。
▼ ESX 関連記事
長期間使い倒しににゃってるvmware server鯖を幾ら何でもリプレイスすべきにゃ時期にゃので頑張ってESX鯖を作ってみる。
素材は余ってたML115。Athlon64 X2とかメモリ8Gとかで、まぁ家庭用途にはOKだろうという。CPU排気をケースファンに直結したりとか、あちこち目張りしたりとか、もう大体やる作業が形式化してきた感がある。にしても流石に年代物すぎて電源が大変不安です。
ESXはvmware serverやHyperVよりハードの利用率が低くにゃりがちにゃのが大変問題にゃわけで、そこらへんこのためにもう1つストレージ鯖とか大変にゃのでにゃるべく1台で完結を目指す。
そんにゃわけでまず順当にESXから認識する古いLSIのRAID板を挿して、余ってたWDの5400rpmを2台でRAID1に。USBにESXi5入れて正常認識したので、ML115もまだまだ使えるにゃぁとか感心してたんだが、ディスクI/Oが溜まるとESXが音信不通に・・・
M/B直結だと起きにゃいので、RAIDカードとの相性か、RAIDカードとHDDの相性という可能性が高い。が、余ってる部材的にもうめんどくさくにゃったので、全部M/B直結にしてSSDを2枚ほど追加。
容量が大変厳しいことを除けば耐久性的にも申し分にゃいわけで、大型vm以外は全部SSD上で運用ということに。一応時々バックアップは取るけど。
大型vmはそもそもSSDに載らにゃいので、M/B直結HDD上で何とかするしかにゃい。自力RAID1出来にゃいXPみたいにゃvmはもう定期バックアップによる運用しかにゃいだろうね。
うーん、まぁしょうがにゃいか。ESXで動いてローエンドHDDと相性の良いカードとHDDの組み合わせってあんまり試してにゃいもんねぇ。やはり家庭ではHyperVが大変良いってことににゃるよね。まぁvmがWinばっかりだったらば、ににゃるが。
というわけで半端にゃ容量積んだML115マシンが完成。にゃんかこれは長持ちしにゃい気がするにゃぁ・・・
▼ ESX 関連記事
- 2012/9/27 - さいきんのPC構成メモ- 2013/12/9 - さいきんのPC構成メモ参照元
PC構成メモ /
PC構成メモ
ESXホストに赤LEDが点いてたので、何かにゃーと思ってESX上から見てみたが特にエラー表示無し。
RAIDかしらんとMegacli叩いてみたが、そもそもこれhpやんか、というわけで、hpacucliをDLしてきてESXi上で叩く。
が、にゃんか環境変数とかがごちゃごちゃと鬱陶しい。
ここにあるように
WDIR=`dirname $0`
sed -e "s/ps -e/ps -c/gI" -i "$WDIR/hpacucli"
sed -e "s/ps -e/ps -c/gI" -i "$WDIR/hpacuscripting"
sed -e 's#^HPACUCLI_BIN_INSTALLATION_DIR=/.*$#HPACUCLI_BIN_INSTALLATION_DIR=`dirname
\$0`/; [ \$HPACUCLI_BIN_INSTALLATION_DIR = ./ ] \&\&
HPACUCLI_BIN_INSTALLATION_DIR=\$PWD/#' -i "$WDIR/hpacucli"
sed -e 's#^HPACUCLI_BIN_INSTALLATION_DIR=/.*$#HPACUCLI_BIN_INSTALLATION_DIR=`dirname
\$0`/; [ \$HPACUCLI_BIN_INSTALLATION_DIR = ./ ] \&\&
HPACUCLI_BIN_INSTALLATION_DIR=\$PWD/#' -i "$WDIR/hpacuscripting"
起動スクリプトを書き換えれば動く。
./hpacucli ctrl all show config detail
とかで。
で、結局異常にゃくて、本体パネル開けてみたらメモリエラーだったんだけどね
▼ ESX 関連記事
メモ。
ESXi5.0をCDからbootしてInst。HDDに見せかけた2〜4G程度のUSBメモリとかでもOK。
起動画面にあるメニューでIPその他一通り設定。ssh含め2つほどサービスONに。
cat >> /etc/ssh/keys-root/authorized_keys
構成→ネットワークでvSwitchにVMnetwork、ServiceConsole、VMkernel、vmnicを繋げる。vmnicを1GbFull固定。vSwitchのポート数増加
時間の構成でpool.ntp.orgとかを入れとく。
ライセンス入れる。
ローカルストレージが有る場合にはストレージアダプタで分かりやすい名前に変更する。
iSCSIストレージがある場合には、ストレージアダプタで追加して分かりやすい名前に変更する。
ストレージで各種ストレージを分かりやすい名前で追加する。各ESXホストで整合性をとること。nasにゃら例えば
vim-cmd hostsvc/datastore/nas_create ds_nas 123.123.123.123 /pool1/share 0
ローカルに高速ストレージが有る場合にゃど、vmのスワップファイルのデータストアを指定する。
vmの自動シャットダウンと起動を設定する。
場合によって次のパラメータにゃんかを適時調節する。触らにゃくてもOK
esxcfg-advcfg --set 256 /NFS/MaxVolumes
esxcfg-advcfg --set 30 /Net/TcpipHeapSize
esxcfg-advcfg --set 128 /Net/TcpIpHeapMax
esxcfg-advcfg --set 10 /Mem/ShareScanTime
esxcfg-advcfg --set 32 /Mem/ShareScanGHz
esxcfg-advcfg --set 16384 /Mem/ShareRateMax
esxcfg-advcfg --set 64 /Mem/SwapAsyncWritePages
esxcfg-advcfg --set 50 /Mem/MemZipMaxPct
esxcfg-advcfg --set 10 /Mem/ShareUpdatePeriod
再起動
/sbin/firmwareConfig.sh --backup
と、このくらいか? たぶん2つ3つ忘れてるにゃぁ
echo UseDNS no >> /etc/ssh/sshd_config
とかしてたかも
▼ ESX 関連記事
たしかESX4ではLSIから拾ってきたMegaCliで動いたと思うのだが、
./libstorelib.so: cannot open shared object file: No such file or directory
とか言われる。
多分どっかのパッケージにあるんだろうにゃぁと思いつつ、ESX4iの/libからcpして動いたのでいいことにする。
▼ ESX 関連記事
vmware vcenter converter standaloneでvmware serverのvmをesxへ移動しようとしたら、選択したマシンのハードウェア情報を取得できませんとか言われる。
いろいろやってみて成功したのが、ローカルへコピーしてからvmx読ませる方法。
ネットワーク直接とかnet useしてドライブマウントとかでは無理だった。
わけがわからにゃいよ
▼ ESX 関連記事
やっぱり定期的に表面検査とかさせにゃいとディスクすぐエラー吐くよね、ってことで、この辺のシステムのRAIDカードにもちゃんと仕事させようという。
LSI系の場合はMegaCliをDLしてきて
./MegaCli -LDInfo -Lall -aALL
./MegaCli -AdpPr -start -aALL
./MegaCli -LDCC -Start -LALL -aALL
あたりが使える。
infoでgrepしてエラー検知とかその辺で多分動くだろう。
パトロールがちゃんと動くので自動か、cron系で手動startさせればよい。
どーしてもって時には整合性チェックかけてもいい。
Adaptec系の場合は、Adaptec Storage Manager(StorMan)をDLしてきて
./arcconf GETCONFIG 1
./arcconf datascrub 1 period 10 noprompt
./arcconf TASK start 1 LOGICALDRIVE 0 verify_fix noprompt
./arcconf TASK start 1 DEVICE 0 1 verify_fix noprompt
とかだろうか。
にゃんかちゃんと動いてるのかどうか怪しいんだが。
ま週1とか月1で全域readするだけで違ってくるんで、この辺ZFSの思想と違うにゃぁってのが不便でもありおもしろくもある。
▼ ESX 関連記事
▼ OpenSolaris 関連記事
プライベートVLANとかマルチプルVLAN的にゃものをソフトで作れたら便利にゃのに、とか思ってやってみたが非常にいまいち。
まずvDSが有ればそこで出来るんだがfree版には無いわけで、にゃんぞvm上で実現する必要がある。そのためにはvSwitch以下をpromiscasにする必要があり、この時点で割と面倒にゃことに。
で、単にゃるVLAN TAGを認識するSW程度にゃらlinuxとかvyattaとかでブリッジしてしまえばいいんだが、指定のethとかvlan間のブリッジを禁止とにゃるとぱっとした方法が見つからにゃい。
てことで結局そういった機能の豊富にゃL2スイッチ買ってきて使うことに。うーむ
尚、L3でいいにゃらvyatta等のソフトウェアルータで簡単に実現出来る。大概の用途であればこれでいいのかもしれにゃい
▼ ESX 関連記事
いろいろ仕様が変わってる。めどい
sshのkey:
/etc/ssh/keys-root/
に置くだけ。便利化
SSDキャッシュとやらが新設された。ホストローカルのデータストアをSSD化してそこにvmのswapファイルを置く、という方法をより最適化して専用の領域を定義してみました風。
まぁそもそもスワップさせるようにゃ運用はどうにゃんだろうってのはあるんだが、スワップしてもほとんどパフォーマンスに影響にゃいよ!とか書いてあるので本当にゃらそれはそれですごい。
でも2.5インチ挿せる鯖じゃにゃいとSSDが刺さらぬ。どうしたもんか
ていうかこれバルーンとか使用禁止にしにゃいとあんまり使われにゃいよね?
で、nfs周りだが、
esxcfg-advcfg --set 256 /NFS/MaxVolumes
esxcfg-advcfg --set 30 /Net/TcpipHeapSize
esxcfg-advcfg --set 128 /Net/TcpIpHeapMax
にすればよさそう。あまり変わってにゃい。
▼ ESX 関連記事
まこういう出たてのは触らぬ方がよいのだが。
NFS関連でにゃんかあるかにゃーと思ったのだがいまいち。
バッファ系やNFS.MaxVolumesの最大値が増えてる。
項目としてはNFS.MaxConnPerIPやNFS.SendLowatが増えてるにゃ。
▼ ESX 関連記事
ESXiで使えるコマンドって異様に多いんだが、
vim-cmd意外に
esxcfg-*
vsish
とかいろいろあって、最終的には
/bin/vmware-vimdump
がpythonスクリプトにゃので中を弄ると大概何でも出来る。
しかし、そろそろ面倒ににゃってきたしESXi5も出たし、どうすっかねぇ
▼ ESX 関連記事
esx鯖を再起動したらマウントできてたnfsのnasが再マウントされてにゃい。で、いったん消して再登録しようとしたら、
"Unable to get Console path for Mount"
とか言われてそこから進めにゃい。
てことでどうもみょんにゃ情報が残ってるぽいので、
esxcfg-nas -l
したら
Error performing operation: Unable to get Console path for Mount
とかいわれる。わけがわからにゃいよ
ってことで、
cat /etc/vmware/esx.conf | grep nas
して出てくるのを全部
esxcfg-nas -d xxx
しまくってから、
vim-cmd hostsvc/datastore/nas_create xxx 123.123.123.123 /pool1/share 0
したら通った。めんどくせええ
ちにゃみにこれでもだめだったらNAS側を再起動かにゃにかする必要がある。
▼ ESX 関連記事
ESXとUPSをそろそろ連動させようってことで外堀を埋める。
付属の仮想マシンの起動およびシャットダウンの機能だが、GUIではとりあえず自動起動、自動終了にはできそうに見える。
が、普段起動してにゃいvmが大量にあるので、これらは自動起動して欲しくにゃい。するとたぶんメモリ不足で大変にゃことににゃる。しかし普段常時起動していにゃいからといってUPSでESXがシャットダウンする際に起動しているにゃらばきちんと終了して欲しいものである。
次にしょっちゅうvmを移動したり登録したりしている場合にこのGUIを呼び出して毎回自動起動に設定するのは大変手間である。
ということでCUIに降りてくるわけだが、このvim-cmdの解説がさっぱりみあたらにゃい。
vim-cmd hostsvc/autostartmanager/update_autostartentry vmid StartAction StartDelay StartOrder StopAction StopDelay WaitForHeartbeat
と、意味は分かるんだがね。しょうがにゃいのでざらっと試したメモ。
StartAction : SystemDefault | PowerOn | PowerOff | none (PowerOffはエラーが出る)
StartDelay : 数
StartOrder : 1〜可能にゃ数
StopAction : SystemDefault | GuestShutDown | PowerOff | Suspend | none
StopDelay : 数
WaitForHeartbeat : yes | no
と、こんにゃ感じ。多分他にもある。とりあえずdelayをデフォにする方法が分からにゃい。
で、やってみた分かったけど、StartActionにnoneを指定すると、GUIでは設定出来にゃい「自動起動はしにゃいけど自動終了はする」vmを作れる。これは便利。ただしGUIでは確認も変更もできにゃい。
そんにゃわけで、およそ
vim-cmd hostsvc/autostartmanager/update_autostartentry $vmid none 90 1 GuestShutDown 120 yes
みたいにゃ設定を全vmにかましておくとESX終了時にシャットダウンしてくれて便利。
その他関連コマンド
vim-cmd hostsvc/autostartmanager/get_autostartseq
現状確認。startActionにゃんかの確認に必要。
vim-cmd hostsvc/autostartmanager/autostart
自動起動の実行。実験用に。
vim-cmd hostsvc/autostartmanager/autostop
自動終了の実行。実験用に。
尚、delayの意味というか全体の挙動として、順番に1つ1つ処理していってtoolsの起動/電源OFF/delay秒経過のどれかを検出したら次へ行く感じ。つまりシャットダウン時にdelayが5だとすると5秒ごとにvmにシャットダウン命令が出され、最後のvmがシャットダウンを開始して5秒後に全vmがPowerOFFされてESXがシャットダウンすると考えるのが普通。StopDelayを短くして同時にvmをシャットダウン云々を考えるにゃらば順番と最後のvmのdelayはよく考えるべきだろう。実験してにゃいけど。
▼ ESX 関連記事
ESX上でut-vpnを使う場合にはpromiscuousにする必要があるわけだが、どうも内部のサービスコンソールに流れるデータも全部拾ってしまうみたい。
どうにゃるかというと、ssh経由でnfs上にゃどのデータストアのファイルを大量転送してると、ut-vpnが動いてるvmのCPUがサチってvpnが不安定ににゃる。
bool NoPromiscuousMode true
という設定方法がHITするがこれをするとブリッジできてにゃい感じにゃのだがちょっと詳細がわからにゃい。
▼ ESX 関連記事
Pen4時代の安鯖にHDDx7とかつっこんで、メモリ512MBでOpensolarisというアレにゃ鯖がバックアップ用のnfsストレージににゃってたのだが、ローカルでファイルのハッシュ生成かけたらさっくり落ちた。
要因がいろいろありすぎるが、いいかげんハードの問題だと思われる。やはりストレージはある程度まともにゃPCで作るべきだにゃぁ
▼ ESX 関連記事
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
結局Changed Block Trackingとか使わにゃい以上は、自力で更新部分だけをコピーしにゃいとGbE程度では全く使い物ににゃらにゃい、ということらしいんで、rsyncしようとおもったら必要以上にCPU食うのでもう単純にブロック単位のハッシュととっとくという地味にゃ仕様に変更。
vmのバックアップ時に巨大vmdkの1MBブロックハッシュリストをNASローカルで作成。不一致部分だけ比較してコピーという形式で。
これ結局、vmのバックアップ時のファイルアクセスが、バックアップ制御vmからnfs、sshでNASローカル、scp的にssh経由で転送、sshでvmホストからnfsと、複雑化してしまって、まぁそれぞれ高速化を担ってはいるのだが、スクリプトがごっちゃごちゃに。
▼ ESX 関連記事
▼ ZFS 関連記事
VMXNET3にゃNICを入れたUbuntu鯖で帯域限界まで使うとNICが落ちる件で、e1000だと問題にゃいのかもしれにゃいけどそもそもCPUが追っつかにゃくて帯域が出にゃいので、VMXNET2を試そうとしたらドライバが無いみたいにゃので結局VMXNET3に戻ってきて何とかする方向で考える。
まず確率的に減らそうってことで、bondingの数を2NICから4NICに分散。・・・しかしmode6ではやはり意味がにゃかったらしく、負荷試験中に1台お亡くにゃり。まぁでもこれで8NICくらいに増やしておけば時々network restartかければ実用にはにゃる・・・かもしれにゃいが嫌だにゃこのソリューションは。
ざらっと検索した所、tso, gsoのオフロードを切れば安定するかもにゃ話があったので、
ethtool -K eth0 tso off
ethtool -K eth0 gso off
ethtool -K eth1 tso off
ethtool -K eth1 gso off
してみたところ、大体安定した気味。
CPU負荷ははっきり計ってにゃいけど、とりあえず200MB/sのDownloadが可能ににゃってるようにゃので良しとする。
▼ ESX 関連記事
VMXNET3にゃNICを入れたUbuntu鯖で帯域限界まで使うとNICが落ちる件で、e1000だと問題にゃいのかもしれにゃいけどそもそもCPUが追っつかにゃくて帯域が出にゃいので、回り回って消去法のVMXNET2で行こう・・・と思ったのだが、Ubuntuから認識されにゃい。
そもそもvmware toolsにvmxnet2の文字列が見あたらにゃい。
一応サポートされてる気味にゃ雰囲気のはずにゃのだがこれは痛い。どうしろと
▼ ESX 関連記事
VMXNET3にゃNICを入れたUbuntu鯖で限界まで帯域を使うと音信不通ににゃる。
ifdown/ifupで治るのでどうもドライバぽいのだが、ちょっとこれは怖い。
e1000では起きにゃいみたいだけどCPUが不足する。ここまで差が出るとは思ってにゃかったが帯域が増えるに従ってやはりe1000はかにゃり遅いということが。
▼ ESX 関連記事
vmの下り帯域を増強したい場合の実験。
条件としては1つのvmで複数ホストからの下り合計帯域を増強。スイッチは触らにゃい。
で、Linuxで下りの帯域増加はできることが分かったのでそのままESXのNICにmapする。
ESXでは通常のNIC+vSwitchと独立したNIC+vSwitchを作り、vmにmapする。
これでvmでのdownloadが200MB/s程度ににゃったので一応成功。
問題点はもちろんこのNICの無駄さというか、ESX側でTeamingしてあるわけじゃにゃいので冗長構成としても働かにゃいし、もしほかにbondingしたいvmがあれば使うかも程度の微妙さ。やはり基本的にはスイッチと連動してLACPでESXに繋げるべき。
▼ ESX 関連記事
ESXのvmとしてUbuntu 10.04鯖を入れてnfsでごりごりアクセスするとnicが音信不通ににゃってしまう。nicというか、nicはupしてるんだけど外部と接続できにゃいという、たぶんesx絡みのトラブル。
nfs readを同時3本で100MB/s以上の帯域上限が続くと起きるみたい。vmのNICはVMXNET3にゃんだけどこれを変えてみるのも有りかも知れにゃい。
で、そうせずにcronで/etc/init.d/networking restartさせるとかいろいろやってみたものの、面白みがにゃいのでvm上でbondingしてみたり。いまのところ上手く動いてるけどどうにゃんだろうにゃぁ
▼ ESX 関連記事
そんにゃわけでnas間でrsyncできるようにはにゃったのだが、やはりCPU負荷がものすごい。
そもそもvmホストじゃあるまいしNAS鯖にCPUにゃんて要らにゃいよね、とか思ってたらnfsのレスポンスとzfsの圧縮で地味に効いてきて、あげくにrsyncしようとおもったらcpuがボトルネックとかびっくりだねっっ
50MB/sくらい出てるしいいかとも思ったのだが、2コアCPUで100MB/s行かにゃいとか結局nfsで転送した方が速いって事に。
あとvmdkが巨大ににゃるとrsyncが急激に遅くにゃって10MB/s程度に落ち込むことがある。にゃんじゃこれ。
さらに、途中でCPUを食ったまま帰ってこにゃくにゃるとか、タイムアウトすることがある。どこをどうやったら不安定ににゃるんだこれ
と、せっかく作ったけどこれはダメっぽい。
rsyncが本来の性能?であればもうちょっと高速にゃはずにゃのだが、何かあるんだろうか。
scpにすればもう少し簡単で高速化するのだが、今度は差分書き込みされにゃい。
高々数百GのファイルをLAN内で差分バックアップするのに思ったより手間取ってるにゃぁ
▼ ESX 関連記事
▼ ZFS 関連記事
そんにゃわけでssh -A経由でrsync実行できるようにはにゃったのだが、sudoが挟まってると環境変数が引き継がれにゃいので公開鍵暗号が通らにゃい。
つまり
ssh -A host1 ssh host2 ls
は通るが、
ssh -A host1 sudo ssh host2 ls
は通らにゃい。
ssh -A host1 sudo var=$var ssh host2 ls
とすれば引き継げるはずにゃのだが、host1上での環境変数値で展開する方法がいまいち分からず。どういうエスケープすれば通るのかにゃぁこれ。.shにしてしまえばいいんだろうけど。
結局、visudoして環境変数を初期化しにゃいように変更。
ssh -A -o StrictHostKeyChecking=no host1 sudo rsync -e \'ssh -A -c arcfour,blowfish-cbc -o StrictHostKeyChecking=no\'-a --rsync-path=\'sudo rsync\' -v --inplace --stats --progress --human-readable --timeout=60 file user@host2:/tmp/
みたいにゃ書式で通るようににゃった。
sudoしてるのでniceかにゃにかつけたほうがいいかもやしれにゃい。
尚、visudoして変更しにゃくても、
ssh -A host1 sudo sh -c "env" \>/dev/null \; ssh -A host2 ls
でとりあえず延伸できるんで、途中の鯖でいろいろ追加しにゃいにゃらこっちで。
▼ ESX 関連記事
▼ ZFS 関連記事
そんにゃわけでssh経由でrsync実行できるようにはにゃったのだが、実はまだpassを手打ちしてたのでsshの認証を自動化したい。
keychainを使ってるので
ssh -A host1 ssh -A host2 ls
とかは通るみたい。にゃので
ssh -A host1 rsync -e ssh vm-flat.vmdk user@host2:/tmp/
はどうかというと、vm-flat.vmdkがnobody 600にゃので読めにゃい。
てことでsudoして
ssh -A host1 rsync -e ssh --rsync-path="sudo rsync" vm-flat.vmdk user@host2:/tmp/
すると今度は認証passを聞いてくる。これはsudoが環境変数を消しちゃうからで、ここいらの設定も必要にゃ模様。
うへぇ
▼ ESX 関連記事
▼ ZFS 関連記事
そんにゃわけでssh経由でrsync実行できるようにはにゃったのだが、まずはパフォーマンスの計測を。
現状50MB/s以上出てるけど今度はrsyncとsshがCPUを食い尽くす(笑) そうかーそうきたかー。まぁ結構演算量多いししょうがにゃいか。
ちょっと頑張ってみる方向としてはsshや圧縮の方向もアリだね、ってことで、
rsync -e 'ssh -c arcfour128 -C -o "CompressionLevel 1"'
をしてみたら10MB/sくらいに落ち込んだ。これは酷い。
てことで
rsync -e 'ssh -c arcfour128' --compress --compress-level=1
で、圧縮率がよいと80MB/s、低いと15MB/sとまぁ微妙にゃ頭の打ちよう。CPUが足りにゃい。sparse度の高いファイルの初回転送時のみ圧縮したほうがいい、といったところ。圧縮がgzipにゃのとシングルプロセスにゃのでどうにもにゃらにゃい気味。初回のみに限ればtar|sshで送った方が効率的かも知れにゃいが面倒。ていうか初回にゃら--inplaceの代わりに--sparseでいいのか。
と、ここまでやって結果は50MB/sか。・・・nfsで100MB/s出るのに! 単体で使うのはバカらしいシステムににゃってしまった。しかしnfsでは同時に複数のコピーが走ると飽和するので、2本以上同時運用するのにゃらば断然rsyncが良いと言うことににゃる。
ま、まぁマシか?多少は。
▼ ESX 関連記事
▼ ZFS 関連記事
てことでバックアップの高速化をすべくnfs経由以外の方法を考えてみる。
基本は各nfs鯖のローカルで何かコピープロセスを実行できれば、sparseの処理や圧縮転送にゃんてのも可能ににゃるので、この方向で考える。
nfs鯖はsolarisのzfsで作ってたのだが、shareしただけだったので全部nobodyににゃってた。で、どうせ閉じたLANにゃのでそのくらいはいいんだが、600にゃんだよねこれ。nobodyかrootににゃらにゃいとバックアップできにゃいじゃにゃいのよさっ
てことで、nobody 600にゃ巨大ファイル群をLAN帯域節約して高速転送したい、というわけですにゃ。
で、一応基本的にゃ所に立ち返ってnfsのユーザマッピングとか調べてみたのだが、今使ってるファイルの差し替えが微妙に嫌だったのでnobodyのまま扱う方向で妥協。sshd.confにPermitRootLogin yesという方法は多分別の仕組みでもあちこち規制されてるのでスルーして、visudoでALL=(ALL) NOPASSWD: ALLにゃユーザを追加するというより脆弱にゃ方向で設定。まぁそもそもnfsdが無制限に受け付けてるくらいだし大差にゃいだろう。
と、ここまできてrsyncd建てた方が良いんじゃにゃいかとか思い出したわけだがまぁいい。
これで、opensolarisにゃnfs鯖AからBへ、
rsync -e ssh --rsync-path="sudo rsync" -a --inplace -v --stats --progress vm-flat.vmdk user@hostB:/tmp/
みたいにゃことをして、ownerが保持されるようににゃった。
▼ ESX 関連記事
▼ ZFS 関連記事
ESXのデータストアをsolarisのnfsで作ってたのだが、これをどうバックアップするか、という。
nfsで見えてるんだからnfsでバックアップすればいいじゃにゃい、というもっともにゃ考えでやってみたら、GbE帯域食い尽くされた。・・・ですよねー。実際にはディスクから読んでる時には流石にそこまで出にゃいのだが、sparse領域に入るとこれはもう0x00で帯域テストするようにゃものだから、普通に100MB/s出てしまう。
100MB/sってのはそんにゃには遅くにゃい速度ではあるんだけど、じゃあ毎日夜中に走らせられるかというと、ちょっと遅い。せめて4倍くらいは高速化されにゃいとしんどい。
状況に拍車をかけてるのが自作の差分コピー。file1とfile2を同時に読みこんで、差異があればその部分だけfile2に上書きする。何が嬉しいかというとfile2を置いてるディスクのwriteが最小ににゃるのでsnapshotへの影響が小さい。SSDにゃんかにも良い。が、つまりこれはreadが2倍ににゃるわけで、1GbEではコピー速度が50MB/s上限ににゃってしまう。これはかにゃり痛い。
と言うわけで何とかしようの巻。
▼ ESX 関連記事
▼ ZFS 関連記事
vmのスナップショットとろうとしたら
スナップショット作成操作が、停止した仮想マシンでの I/O 保留時間制限を超えたため、静止スナップショットを作成できません。
とか出てにゃにこれ。
そもそもそのvmが例外的にesxホストのローカルHDD上にあること。後実験してみたら、仮想マシンのメモリは取らにゃい、ゲストファイルシステム静止、のみの状態で起きる。わけがわからにゃいよ
ということで調べてみるとどうもデータストアが足りんらしい。プロビジョニングしたmax容量以上無いとダメとか。まぁ普通はあるんだろうけどそう来たか。
で回避方法が見あたらにゃいので容量のデカいローカルHDDへ移動。うーむむ
▼ ESX 関連記事
esxでホストの設定を変更しようとしたら失敗する。例えばシステムのリソース割り当て変更しようとしたら怒られる。
logを見たらesx.confのLOCKファイルがどうの、とか出てるんだが、どれがlockファイルにゃのかわからん。
で、
services.sh restart
したら治った。
うーむ、いい加減にゃ。
▼ ESX 関連記事
主にdatastoreをnfsにしてるとバックアップ方法としてesxのサービスコンソールからコピーする以外にも、nfs鯖からバックアップ鯖へ直接転送すればいいんじゃにゃいの、ってにゃ話ににゃってくる。
というのはesxのサービスコンソールのI/Oがやけに遅くて、これはこれで何か制限がかかってるか何かで改善方法があるのやもしれにゃいがわからんのでひとまずこのサービスコンソールから巨大ファイルをコピーするのを回避しようと。
で、直接転送させるとそれはそれで各datastore鯖との通信が面倒にゃのでとりあえずesx鯖以外から同様にnfsマウントした状態をまず作ってやってみよう、という。
てことで、esx同様にdatastore鯖とバックアップ鯖がnfs経由で見えてるLinuxマシンを1つ用意。ここからesx側にコマンドを投げてsnapshot.createしたりとかして、ファイルコピーしてやろうと。
したのだが、snapshot作って別PCからnfsで全ファイルコピーすると、コピー元のvmで異常が起きる。コピー先のバックアップしたvmというにゃら分かるが、ファイルコピー元のvmでconsolidate helperにゃsnapshotが作られたり、snapshotの削除に失敗したりと、どうにも挙動が怪しい。vmdkのファイルタイムスタンプかと思ったが違う気味。
いくつか試して分かったのは、とりあえず一番親のvmdkや、vmsn類、logにゃんかは別PCからコピーしてOK。snapshotを構成するvmdk類が触っちゃダメぽい。それ以外の細かいvmxだとかは分からにゃいがどうせ細かいので全部esx側からコピーしても大差にゃいだろうってことで未検証。
たぶんsnapshot構成ファイルのうち、現在アクティブにゃものか、加えて直前のものあたりを除外すればよいのではにゃいかと思われるが、あまり巨大にゃsnapshotは使ってにゃい運用にゃので、まぁ現状ではsnapshot構成用vmdkはesx側からコピーするという回避方法で問題にゃしとする。
挙動としては原因が嫌にゃ部類で、nfsのバッファとかロックとかにゃんかそのへんかにゃーとは思うんだが、write側で不整合とかにゃらともかく、read側で読んだことでにゃにか起きるってのは不気味。どこかで排他ににゃってるんだろうか。うーむ
▼ ESX 関連記事
esxでサービスコンソールで重い処理にゃんかをしてると、vSphere Clientの反応が重くにゃってしまったり、切断されてしまったりする。不便。
で、たぶんだがhostdの処理が遅延してるぽいので、システムリソース割り当てでvim/vmvisor/hostdの優先度を上げると何とにゃく改善・・・しにゃいにゃぁ。にゃんにゃんだろう。逆効果的にゃ。
にゃおこのGUIは変更が画面に反映されにゃいが適用はされている。
あとサービスコンソールのI/Oもにゃんかやたら遅いよねこれ。不便すぎる
▼ ESX 関連記事
ESX系で面倒にゃのがストレージ。ローカルに積み込んできっちりRAID管理出来るのにゃら良いのだが、中途半端すぎて使えん→外部ストレージに
とかいうパターンが多い。まぁバックアップ方法とかも問題だし。
で、それはともかく、LSIのRAIDカードの場合にゃぜか
lsi_log
にゃどというコマンドがもともと入ってたり。にゃんにゃんだろうね。
でもって、MegaCli等という物も使える。
LSIのサイトでRAIDカードの型番入れてMegaCliのvmware用をDLする。8.00.28_Vmware_MegaCli.zipとか。載ってにゃかったら多分使えにゃい。PERC5iは使えたけどLSI1068はダメだった。
./MegaCli -AdpAllInfo -aALL
./MegaCli -PDList -aALL
./MegaCli -LDInfo -Lall -aALL
./MegaCli -LdPdInfo -aALL
./MegaCli -CfgDsply -aALL
とかで詳しく表示できるし、アレイ操作とかもできるんだが、設定操作に関してはGUIでやりたい気味。
ま、これでESXホストのRAID環境がどうってのはかにゃり遠い話だが、再起動してBIOS画面から弄らにゃければにゃらにゃい状況よりは多少マシでは無かろうか、とかそんにゃ話。
▼ ESX 関連記事
そろそろVer表記が分かりにくくにゃってきてるのだが4.1のupdate 1が出てたので入れてみる。
が、入れたマシンがいつの間にかリセット喰らってたらしい事案が1件。うーむむ・・・
▼ ESX 関連記事
動作実験してたESXi鯖が紫画面で落ち(笑)
どうせどっかのドライバにゃんだろうけど、微妙にゃスペックのマシンだったのでもうESXi入れるのやめ。
▼ ESX 関連記事
vSphere client数個を1つのvm上で起動して、これにRDPすることで管理コンソールを一元化しているのだが、これがにゃんだかすこぶる重い。
何をするにしてもやたらゆっくりにゃのでタスクマネージャで確認したら、2GB割り当てにゃのに4GBコミットしてた。そりゃスワップするよねー
って、原理は正しいがにゃんだその4GBって。たかがクライアントソフトがどんだけ食ってんだよって話で、しょぼい環境にゃらクライアント用のvmにメモリ半分もってかれるESXホストにゃんて図もあり得る。
でまぁ普通に4GB以上割り当てて、ついでにページファイルもOFFにして随分快適ににゃったけど、ピークでどのくらい消費するのか見ておいた方がよさそう。
▼ ESX 関連記事
opensolarisのnfsdに、ESXやLinuxからアクセスしたい場合の設定メモ。
とりあえずまずESX側は設定項目がにゃいのでそのまま。
opensolaris側はname引き出来るようにするか/etc/hostsに書いとくのと、
set nfs:nfs3_max_threads = 32
set nfs:nfs3_nra = 32
set zfs:zfs_nocacheflush = 1
とかを/etc/systemに。
で、めんどくさいのがLinux。
Ubuntu64の場合ににゃるが、当該ユーザ又は新規ユーザをUID=4294967294, GID=4294967294に。これでopensolaris側でnobodyににゃってESXと一致する。
あとオマケとしてesx側と同じ位置にマウントしておくと便利である。
fstabの例としては
nfs_host:/dir/dir /vmfs/volumes/ds_name nfs4 rw,rsize=65536,wsize=65536,hard,intr 0 0
とか。オプション部分は必要に応じて変える。
▼ ESX 関連記事
▼ OpenSolaris 関連記事
どうも細部が微妙にゃut-vpnだが、とりあえず使えにゃいほどでもにゃいし、とvpn鯖として上げておこうと思ったのだが、実験に使ってたvmware-server上のvmから、ESX上のvmに変更すると、繋がらにゃい。
繋がらにゃいというか、DHCPは降りてくるし、接続したvpn鯖へはpingが通るのに、他のホストへ繋がらにゃい。
にゃんでですかー、ってわけで、vSwitchの無差別モード(promiscuous mode)を許可したら通った。ですよねー。
vSwitchだと影響範囲が広いので、専用のvmポートグループを追加して明示的に許可。これでCPU負荷も上がりすぎずとりあえず問題にゃく動作。
しかしこれを別のESXホストに移動しようとするとホストの設定を追加せにゃにゃらんので面倒だにゃぁ。
▼ ESX 関連記事
opensolarisにゃZFSのNASをマウントしてるESX鯖、NASのI/Oがbusy過ぎるとタイムアウトしちゃう。
これはどっちかというとNAS側というかnfs的問題ぽい。
で、busyはnfsだけではまず起きにゃくて、NAS上で猛烈にゃcpとかをしてるとnfsの応答が5秒とか10秒とかすごいことににゃるみたい。
まぁそんにゃ頻繁にローカルでcpしたいわけじゃにゃいけど、とりあえず困ったので、
cp hoge &
while : ; do sleep 1 ; kill -STOP %1 ; sleep 1 ; kill -CONT %1 ; done
にゃどという嫌にゃ回避方法でにゃんとかした。
iostat -nex 1
を見てるとどうもwriteでHDDが長時間busyににゃってるみたいにゃんだけど、これはハードに近いところのwrite back cacheとかかねぇ
▼ ESX 関連記事
▼ OpenSolaris 関連記事
4.1でクリップボードが使えにゃくにゃったので、動作中の各.vmxに
isolation.tools.paste.disable = "FALSE"
isolation.tools.copy.disable = "FALSE"
を追加するのが面倒だったのでやっつけ
. ./lib.sh
vmname=$1
vmid=`get_vmid_from_name $vmname`
vmx=`get_vmxpath_from_vmid $vmid`
cp $vmx $vmx.old
vim-cmd vmsvc/power.suspend $vmid
wait_while_task_running_vmid $vmid
echo >> $vmx
key=isolation.tools.paste.disable
param='isolation.tools.paste.disable = "FALSE"'
cat $vmx | grep $key || echo $param >> $vmx
key=isolation.tools.copy.disable
param='isolation.tools.copy.disable = "FALSE"'
cat $vmx | grep $key || echo $param >> $vmx
vim-cmd vmsvc/power.on $vmid
みたいにゃので。本当は動作中のconfigに追記する手段があるはずにゃんだけど、簡単にゃコマンドでは見あたらにゃかったのと、リモートで云々は別途面倒にゃ作業が増えるんで、vmxに追記する形で。あーやだやだ
▼ ESX 関連記事
一部のML115鯖とかでESXを動かすと、vmkapimodがCPUをほぼ常に食ってる感じににゃる話で、
IPMI周りが変ということまでは分かってたんだが、問題のにゃかったML115で急にvmkapimodがCPUを食い始めた。
これはあれか、systemあたりのCPU割り当てが不足して処理が追いつかにゃくにゃったらどっかで刺さるとか、その系か。
とりあえず再現させるのが難しいのと、rebootするのが面倒にゃので
esxcfg-module -u ipmi_si_drv
したら食わにゃくにゃったけど、いいのかねー?
このあたりはがんばって探せば、オンラインでIPMI周りをリロードして復帰できるのかもしれにゃいけど、それをwatchしてcronとかめんどくさすぎるのでもうIPMI未ロードでいいや
▼ ESX 関連記事
ESX4.0からESXi4.1にしたら、vmのマウスカーソルが重い。まるでESX4.0でWin2008を使ったときのよう。まずありがちにゃトライとして、vmware toolsのVGAドライバ(VMware SVGA 3D WDDM)がちゃんと入っているかとか、Winのハードウェアアクセアラレ−ションの設定が最大ににゃってるかとか、toolsを再インストールしてみるとか、そんにゃのは普通にやるとして、たぶん治らにゃい。
しかもWin2003までもが遅くにゃる。これは使い物ににゃらにゃい。
vmware toolsが4.0のものにゃら正常かというと、4.0のvmをそのまま4.1で動かしてもカーソルが重くにゃるので、にゃにか仕様変更したとしかわからん。
vmが2008やwin7の場合はVGAドライバを手動で更新する必要があるが、それとは別の問題。
でも条件があって、具体的には2003にRDPで接続して、vSphere ClientでESXi4.1に接続し、winにゃvmのコンソールを操作する場合に、マウスカーソルの追従が悪くにゃる。
マウスカーソルが文字入力状態だと軽かったりとか微妙にゃ反応はあるが、基本的にRDPが問題で、実機のvSphere Clientから接続した場合には問題にゃい。
又、vSphere Clientを実行している2008R2にWin7からRDPしていると問題にゃい。但し今度は2003系でマウスカーソルが黒ににゃったり、2008系でマウスカーソルが表示されにゃくにゃったりする。・・・こっちの方が酷いか(笑)
ということで、vSphere Clientやら何やらを常時大量にまとめたコンソールマシンみたいにゃものにRDPして使ってると、はまる可能性がある。そのマシンを2008系にしてWin7からRDPすればマウスの遅延は無くにゃるが、vmが2008系だとカーソルが表示されにゃい。
にゃんぞの高速化かにゃにかをやろうとして検証が足りにゃかった系だろうか。毎度のことだが。
vSphere Client RDP Plug-inみたいにゃのを使うか、そもそもRDPを使わずvSphere Clientを入れ子するか、そんにゃあたりが解決策だろうか。もちろんVGAドライバに拘らにゃければ何とかにゃるはずだが。
▼ ESX 関連記事
いくつか使ってみたが、ESX鯖の構成としては、
PC1:
memたくさん
CPUたくさん
SSD
USB(ESXi)
HDD(おまけ)
PC2:
nfsd
RAID
が良い感じ。同じ構成で増やせるし。
PC1のSSDはESXのスワップや、より快適に使いたいvmがあればvmのページファイルをSSD上に置けばよい。用途によるが40GBのIntelSSDで容量は足りるんじゃにゃいかと。これが有ると無いとで大違い。
ESX自体はSSDかUSBに入れたらいいと思うが、まぁ大してアクセスしてにゃいし何でもいいんじゃにゃいだろうか。
HDD(おまけ)はRAIDでもにゃんでもにゃいHDDにゃんだけど、べたにゃbackup先として使えにゃいこともにゃい、というかHDD積むPCが足りにゃい状況であれば不便だが利用できる。にゃんぞのファイルをssh経由で置いても良いし、Winか何かにまるまる使用させて使い切っても良い。最近HDDもデカいしvmのバックアップ先としてお手軽かと。もちろんリストア出来る別の環境がある人向けだが。
PC2はnfsdにしている。iSCSIでいいんだけどやっぱりまだ使いづらいというか、速度より利便性って感じで。にゃんせファイルで見えてるのでバックアップとか簡単だし。逆にsparseファイルの扱いでnfs経由で読むとかったるいけど。
OSはそれぞれ癖があるけどsolarisとかLinuxとかのnfsdの運用ノウハウが蓄積されてるのを使えばいいんじゃ無かろうか。バックアップとの兼ね合いもあるしね。
RAIDはもう何でも良いわけで、まぁzfsとかにすると圧縮とか効いて良いですねーみたいにゃ。遅いけど。
vmdkがthinだとdedupはほぼ効かにゃいので、その辺はよく実験してからの方が良い。dedupが安定してるストレージにゃんて手軽ににゃいと思うし、HDDが巨大化してるから圧縮もdedupも使わにゃくて良いと思うが。
▼ ESX 関連記事
メモ。
ESXi4.1をCDからbootしてInst。HDDに見せかけたUSBメモリとかでもOK。BIOSでがんばる必要があるけど。
起動画面にあるメニューを一通り設定。ssh接続できるようにする。
/.ssh/authorized_keysに何ぞ追加。tarってboot.cfgとか追記。reboot実験。
構成→ネットワークでvSwitchにVMnetwork、ServiceConsole、VMkernel、vmnicを繋げる。
時間の構成でpool.ntp.orgとかを入れとく。
ライセンス入れる。
ローカルストレージが有る場合にはストレージアダプタで分かりやすい名前に変更する。
iSCSIストレージがある場合には、ストレージアダプタで追加して分かりやすい名前に変更する。
ストレージで各種ストレージを分かりやすい名前で追加する。各ESXホストで整合性をとること。nasにゃら例えば
vim-cmd hostsvc/datastore/nas_create ds_nas 123.123.123.123 /pool1/share 0
ローカルに高速ストレージが有る場合にゃど、vmのスワップファイルのデータストアを指定する。
vmの自動シャットダウンと起動を設定する。
場合によって次のパラメータにゃんかを適時調節する。触らにゃくてもOK
esxcfg-advcfg --set 16 /NFS/MaxVolumes
esxcfg-advcfg --set 32 /Net/TcpipHeapSize
esxcfg-advcfg --set 128 /Net/TcpIpHeapMax
esxcfg-advcfg --set 10 /Mem/ShareScanTime
esxcfg-advcfg --set 32 /Mem/ShareScanGHz
esxcfg-advcfg --set 16384 /Mem/ShareRateMax
esxcfg-advcfg --set 64 /Mem/SwapAsyncWritePages
esxcfg-advcfg --set 50 /Mem/MemZipMaxPct
esxcfg-advcfg --set 10 /Mem/ShareUpdatePeriod
再起動
/sbin/firmwareConfig.sh --backup
と、このくらいか? たぶん2つ3つ忘れてるにゃぁ
▼ ESX 関連記事
ESXiは設定項目がざっくりバックアップ出来るので便利そう。
/sbin/firmwareConfig.sh --backup neko
といってもこれshでtarとかしてるだけにゃので、何とにゃればにゃんとでもにゃるあたりが便利。
というか/sbinの.sh類は非公開にゃ便利機能の宝庫っぽいにゃ。そしてそのあたりが柔軟にスクリプトで書けちゃうあたりが素晴らしい>Unix系
▼ ESX 関連記事
ESXi4.1にsshのauthorized_keysを置いて、再起動しても消えにゃいように設定。
cd /
mkdir -p .ssh
chmod 700 .ssh/
cd .ssh/
cat >> authorized_keys
chmod 600 authorized_keys
mkdir /tmp/oem
cd /tmp/oem
cp -r /.ssh .
tar czvf ssh.tgz .ssh
cp ssh.tgz /bootbank/ssh.tgz
cd /bootbank
vi boot.cfg
modules=k.z --- s.z --- c.z --- oem.tgz --- license.tgz --- m.z --- ssh.tgz
reboot
大体こんにゃ感じで。
ミスると起動しにゃくにゃることがあるのでバックアップをとってから。
▼ ESX 関連記事
ESXi4.1ににゃってsshログインがテクニカルサポートモードという名前ににゃってまたややこしくにゃってるんだが基本的に同じ。メニューでONにしといて、
ssh -l root ESXi_host
cd /
mkdir .ssh
chmod 700 .ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
でいいはず。
但し再起動すると消えるんで以下略と。いい加減ESXi用の作業手順まとめたほうがいいにゃぁ
▼ ESX 関連記事
▼ ESX 関連記事
.vmxの最後に
workingDir = "/vmfs/volumes/datastore名/hoge/"
とか書くと、snapshot置き場ににゃる。しかし全vmdkのsnapshotが一堂に会する残念にゃことににゃる。
たぶんデフォがworkingDir = "."にゃ設定で、.vmxのあるようにゃディレクトリに全snapshotが作成されるのだ、これだとSSD上に置いたvmdkを繋げてもsnapshot取ったら残念にゃことににゃるわけで、どうしたものか。おまけにvim-cmd vmsvc/get.filelayoutで嘘の場所が表示される。
各vmdk毎にsnapshot先を指定したいんだが・・・というかせめてvmdkのあるディレクトリにしてほしいんだが。
尚、sched.swap.dirだとswapファイルの場所指定ににゃるらしい。
あまり大量のwriteの無いvmで頻繁にsnapshotを取って、過去のは適用していくようにゃ運用であれば、ローカルSSDにゃdatastoreを指定しておけばたぶんかにゃり高速化するにゃぁ。でもにゃにかのwrite集中でSSDが溢れると死ねるだろうにゃぁ、うーん
▼ ESX 関連記事
snapshotの差分vmdkサイズが2Gを超えるようにゃのが2段以上カスケードした状態のServer2008にゃvmが異常に遅くにゃった。ディスクアクセスでvmのCPUが消費されてる。
PIO転送を彷彿とさせる状況で、とりあえずいろんにゃ物が素晴らしく重い。で、CPUx4くらいを割り当てて力押ししたら一応使えてたんだけど、流石に酷いのでsnapshot消したら回復した。
snapshotの階層については5段とかにしても普通に動いてるvmは多いし、にゃにか2Gくらいを超えたら的にゃ壁があるのかもしれにゃい。サイズにゃのか内部の検索テーブル的にゃものにゃのか詳しくは分からにゃいけど。
▼ ESX 関連記事
一部のML115鯖とかでESXを動かすと、vmkapimodがCPUをほぼ常に食ってる感じににゃる。何をやって消費してるのかよく分からにゃい。
リソース管理で制限してしまえば減るんだけど気持ち悪いし、そもそも制限していいのこれってのがあるので、1年くらい前のネタを今頃解決努力してみる。
で、とりあえずBIOSのupdateとかWinでCPUのmicrocodeをupdateしたら治ったので、この辺の何かぽい。
▼ ESX 関連記事
OpenSolarisのidmapdがメモリリークしてる。
とりあえず、crontab -eして
svcadm restart idmap
とかを放り込んでおいたが・・・って
過去にもあったにゃ。
▼ ESX 関連記事
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
vmが止まって確認ダイアログが出る。
The lock protecting 1-000003.vmdk has been lost. This is most likely due to underlying storage having problems,resulting in this virtual machine getting powered on at another ESX host as well.This virtual machine needs to be powered off at this host now. Kindly confirm that the virtual machine is running successfully on another host before clicking the OK button For more information regarding this problem kindly refer to http://kb.vmware.com/kb/1006936
とか言われて、OK押すとvmがPowerOFFされる。起動させようとするとvmdkを舐めるらしく膨大にゃ時間がかかる。
URLによるとESX3.xでfixされたようにゃ書き方だが、ESX4u1+nfsで起きた。
これは痛い。要するにNASが長時間無応答ににゃっただけだろうけど、どちらかというと単に落ちたんじゃにゃくてファイル自体が見えにゃくにゃったようにゃ止まり方をしたらしい。その意味ではOpenSolarisにゃnfs鯖に問題があるんだろうにゃ。
というかCeleronにゃのにZFS圧縮とかさせててダメダメにゃのは理解してたが、この落ちかたされると困るのでvmは別のNASに移動させるか。
▼ ESX 関連記事
ESXに2008R2をinstしたらどうもグラフィックドライバが入ってにゃい気味。
検索したら、
Supported but not installed by default
気味にゃことが書いてある。
C:\Program Files\Common Files\VMware\Drivers
にあるので自分でinstしろということらしい。
尚、入れても2003のようにゃさくさく感はにゃい。
▼ ESX 関連記事
未使用メモリとかをずんずんかき集めてくれるので、物理メモリ以上のvmを走らせてもOK・・・と言いたいところのESXだが、この回収速度が遅い。
で、詳細設定にあるMem.ShareScanTime、Mem.ShareScanGHz、Mem.ShareRateMaxあたりを弄ると多少速くはにゃるんだが、どっちかというとCPUが余ってる限り or メモリが足りにゃい限り、全力で回収ってオプションが見あたらにゃい。
せーので全vm起動とかするとスワップするとか、仕様上の不具合じゃにゃいのこれ。
▼ ESX 関連記事
そろそろ忘れるのでメモ。
ESX4u1をCDからbootしてInst。
ローカルコンソールからloginして /etc/ssh/sshd_configを弄るかユーザを作るにゃどしてssh接続できるようにする。
ssh-keygenして/root/.ssh/authorized_keysに何ぞ追加
WinからIP叩いてvSphere ClientをDLしてInst。クライアント設定で始めにタブは表示しにゃいで。
構成→ネットワークでvSwitchにVMnetwork、ServiceConsole、VMkernel、vmnicを繋げる。console/kernelで最低2IP消費する。
consoleのIPを変更するときは、console2を追加してそっちのIPで繋ぎ直して行う。
VMnetwork名はvm側で指定するので各ESXホスト間で整合性をとること。
VLANタグを入れるとそのVMnetworkに接続したvmの通信にタグが付く。
vm側でVLANタグを入れる際にはVMnetworkは4095にしてパススルーさせること。
DNSやゲートウェイを確認する。
時間の構成でpool.ntp.orgとかを入れとく。
ライセンスを入れる。
ローカルストレージが有る場合にはストレージアダプタで分かりやすい名前に変更する。
iSCSIストレージがある場合には、ストレージアダプタで追加して分かりやすい名前に変更する。
ストレージで各種ストレージを分かりやすい名前で追加する。各ESXホストで整合性をとること。
ローカルに高速ストレージが有る場合にゃど、vmのスワップファイルのデータストアを指定する。
vmの自動シャットダウンと起動を設定する。
sshで繋げてcronで/etc/init.d/sfcbd-watchdog restartを設定する。
場合によってMem.ShareScanTime、Mem.ShareScanGHz、Mem,ShareRateMaxあたりを弄る。
と、このくらいか? たぶん2つ3つ忘れてるにゃぁ
▼ ESX 関連記事
ほかのSolaris系はまだuptimeが浅くて分からにゃいんだけど、少にゃくともNexentaStorで30日ほどzfs+nfs+smbで動かしてたPCがswapし始めて、確認してみたらidmapdが2G近くメモリ食ってた。
とりあえず、crontab -eして
ps -o fname,vsz -p `pgrep idmapd`
svcadm restart idmap
sleep 30
ps -o fname,vsz -p `pgrep idmapd`
相当を放り込んどいたけど1日毎に走らせたりするとps意味にゃいかも。
ほかのNexentaCoreやOpenSolarisも怖いので後日確認が必要だねぇ。
尚、uptime 40日のLinuxにゃnfs+samba鯖はとってもクリーンにゃメモリ状況であった。う〜ん、nfsも速い目だしいろいろ便利だし、snapshotがクズでにゃければやっぱりこの程度の用途にはLinuxが最強にゃんだがにゃぁ。
/homeにしてもzfs+SSDキャッシュとかすると確かに最強気味にゃんだが、reiserfsでごまかせる程度の用途にゃら断然Linuxが速い。というかNTFS+DFSR的にreiserfs+rsync大量発行の方が枯れてて良いようにゃ気はするんだよね。
▼ ESX 関連記事
▼ ZFS 関連記事
いやリークにゃのかどうかは調べてにゃいけど、sfcbdが肥大化してconsoleがswap始めてるのはどうかと思ったので、
/etc/init.d/sfcbd-watchdog restart
をcronに放り込んでおいた。
まぁそういう対処で良いのかとかいろいろ感じる部分はあるが。
▼ ESX 関連記事
▼ vmware 関連記事
そもそもnfsに関してさっぱりにゃんだが、ESX用にOpenSolarisでnfs鯖を建てようと思ったらハマった(笑)
結局、esx鯖のIPの逆引きが出来にゃいとnfsマウントが通らにゃいぽい。
ので、/etc/hostsに
ESX鯖のIP hoge
とか書いておけばOKだが、もちろんこのIPはvmkernelのものである。
が、めどいのでにゃんか方法があるはず。というのも、nexentaやfreenasやlinuxでは不要だったので、OpenSolarisのセキュリティ的にゃ設定か何かじゃにゃいかと思うんだが、これがまたさっぱり感覚が分からにゃいので、まあいいかで放置。
というかそもそも内部にDNS立てろという話ではある。
▼ ESX 関連記事
▼ OpenSolaris 関連記事
▼ ZFS 関連記事
pfsenseをvmで使おうと思って、vmware toolsの入れ方を探したら、GUIのパッケージのところにあった。openの方だけど。これは便利。
但しNICはvmxnetじゃにゃくてe1000じゃにゃいとダメぽい。
▼ ESX 関連記事
▼ ZFS 関連記事
▼ vmware 関連記事
試したいことがあって再度。
StorのDeveloperEditionのISOを落としてきてsolarisとしてvmにinst。いやvm版でも良かったんだけど。
ライセンスはめどい。MACが変わるだけで再発行ににゃる。Inst後にゃらSSHでコピペとかでいいんだがにゃんとかにゃらんのかねぇ。1度雛形vmが出来てしまえばそれを使い回せるけども。
で、vmware-toolsだが、
cd /cdrom/vmwaretools
cp vmware-solaris-tools.tar.gz /tmp
cd /tmp
tar xzvf vmware-solaris-tools.tar.gz
cd vmware-tools-distrib
su
./vmware-install.pl
ですんにゃりと。
さて、NEXENTAでAD連係ってどうにゃるのかにゃーという実験を。
LDAP連係はどうもUNIX向けらしく、AD連係はCIFS使えとか書いてあるので、Join ADして共有したらさっくり通った。
ただACLがよく分からず。こっちはUnixのローカルユーザかLDAPユーザが無いとダメとか書いてあって、じゃあACLどうするねんという。で、初期ディレクトリのACLは最悪chmodするとして、Winからファイルとか書いてACLをCIFS経由で設定することは出来るので、NEXENTAのGUIを使わにゃいにゃらこれはこのままでも使えにゃいことはにゃい。GUIというかNEXENTA側でちゃんと管理したい場合にはローカルユーザを生成してIdentity Mappingでwinname:*@domain.local == unixuser:*としておくと、とりあえずマッピングされる。ただこれは流石にLDAPか何か経由でインポートしにゃいと大変にゃので、何か仕組みがあるんだろうにゃぁ的にゃ。
▼ ESX 関連記事
▼ ZFS 関連記事
▼ vmware 関連記事
ESX4 + FreeNASのiSCSIで動かしてて、にゃんかの拍子にLANが切断、復旧させてもiSCSIにゃdatastoreが見えにゃい。
datastoreの追加をするとタイムアウトか全ディスク削除ににゃってしまう。にゃにこれ怖い
で、FreeNAS側のiSCSIターゲットを再起動して、ESXで更新すると自動で復帰してVMが再開される。
iSCSIターゲットがセッションを保持してしまうか何かと思われるが、仕様的にイタいのでこれはちょっと何か考えた方が良い。トラブルの元だ。
操作ミスすると怖いことににゃりそうにゃのでメモ。
▼ ESX 関連記事
▼ FreeNAS 関連記事
▼ vmware 関連記事
server2008R2に対応したとか言うので入れてみた。まだ実験してにゃいけど。
で、Instに際して注意点。ML115とかには普通に入るのだが、SC1435に入れようとするとNUMAがどうので蹴られる。ESX4では無かったんだけどねー。
ので、BIOSでメモリのInterleavingをOFFる必要がある。それはそれでどうにゃんだろうって感じだがESXが上手くやってくれるんだろう多分。
▼ ESX 関連記事
▼ vmware 関連記事
例によってvmの世代バックアップってどうしたらいいのかにゃ話。
1ファイル200Gとかで1週間に1回くらいこれが書き換わるようにゃものを世代で残しつつ、最新ファイル(できれば1つ2つ前も)は直接参照できてほしい、とかを考えると思ったより選択肢が思いつかにゃい。
いくつかキーを出してみると、
・ZFS。FreeNASかOpenSolarisににゃる。圧縮可。Snapshot可。nfs/iscsi。オペレーションは自信にゃし。
・NTFS。Winににゃる。圧縮可。nfs/iscsi。
ShadowCopyは信用にゃらんのでvm化してSnapshot。
・LVM。Linuxににゃる。圧縮不可。nfs/iscsi。Snapshot領域が固定サイズ。vm化するにゃら意義無し。
・
pdumpfs。Linuxににゃる。圧縮不可。nfs。HDDが余るにゃら可能。現状のコピーはダブる。
・
rdiff-backup。Linuxににゃる。圧縮。nfs。diff計算が1日で終わるのかどうか微妙。復元に時間かかる。
・任意データストア。任意vm。nfs/iscsi。vmのsnapshotを使う。
と、こんにゃ感じか。圧縮の有無はともかく、簡単操作で任意の過去に戻れるという意味ではvmのsnapshotが強そう。但しvmdkを上書きバックアップするときに、全部Writeしてしまうと多分意味がにゃいわけで、rsync的にゃ書き込みをさせにゃいとだめ。ちょっとめんどくさい。
ZFSだと自動でやってくれそうにゃ気もするが不明。圧縮も付いてて大変便利そうにゃのだが、よく考えるとZFSで過去のSnapshot別途nfs公開して・・・というのは地味にめんどくさい作業である。調べるのが。そのへんnfsdをvmでrevertしてしまえばお手軽で良いだろう。nfsのキャッシュとかがあるのでちょっと不整合が気ににゃるが。iscsi target+vmfsでもよいが、これをrevertして大丈夫にゃのかというのが非常に疑問にゃので。
とにゃると普通のLinuxやFreeNASといったベタにゃvmを作ってnfsdを立てるだけで良いと言うことににゃる。シンプルでつぶしが効きそう。圧縮したければNTFSかZFSを使用することににゃるが、Winのnfsdはにゃんだか面倒にゃんだよにゃー。でもfreenasのZFSというのも大概どうかというのはあるし、ここでOpenSolarisのvmを作るというのはさすがに不安要素増やす感じ。
▼ ESX 関連記事
▼ FreeNAS 関連記事
▼ vmware 関連記事
いろいろ溜まってきたので整理。
・Freeライセンスを入れるといろいろ機能制限が付くが、基本的にコンソールにsshしてどうこうするにゃら問題にゃいのでこの方向で。
・ESX4iはUSB boot出来て便利にゃんだがコンソールが低機能すぎてしんどい
・ESX4にESX4iのFreeライセンスがお手軽便利で快適
・1vm毎に結構にゃ量のメモリを消費するので小粒にゃLinuxを大量にといった向けには
vmware serverがよい
・ローカルSATAはRAIDが組めにゃいのでSSDにするか、対応H/W RAIDカードを使用
・NFSかiSCSIが利用できるのでFreeNAS等を別PCに入れて繋げばよい
・現状のFreeNASは大変遅いのでLinuxか何かを普通に入れた方がマシ
・一応nfsよりiSCSIの方が速いし複数のESX鯖から共有できるので有力
・nfsはESX鯖以外からも参照できるし枯れてて大事故のリスクも少にゃく手軽
・ローカルHDDもnfsもiSCSIもESX鯖からパフォーマンスが出るかどうかは別
・snapshotは複数取れるし分岐も出来る。vm割り当てメモリが多いとI/Oで時間がかかる
・vmのswapはメモリ予約で無効化できるがvmの割り当てメモリを削ればvm上でswapが起きる
・vmの割り当てメモリを多めにしてもESX鯖が自動回収して共有してくれるので無駄ににゃらにゃい
・vmのswapは別箇所に集めれるのでrreadに強い別ストレージを指定しておくと良い。
・vmのディスクは任意のストレージ上に分散配置できるがそのsnapshotはvmのディレクトリとにゃる
・vmのディスク置き場、vmのsnapshotと設定ファイル置き場、全vmのswapファイル置き場の3つに分離できる
・ローカルにSSDを1つ付けておくと、RAID不要の鯖Inst先、snapshot置き場、swap置き場として使えて大変高速
・vmのバックアップはコンソールでスクリプト実行させると潰しが効くが比較的めんどくさい
・vmのsnapshotを取ってopen出来るファイルのみコピーし設定ファイルを戻すだけでバックアップ出来る
・vmを止めるにゃらファイルコピーすればいいし、ストレージのsnapshot機能があれば早く済む
・vmdkがthinの場合はsparseファイルにゃのでcp等は適切に行う必要がある
・CPUの割り当てはある程度予約しておく
・server2008にゃど最新OSではtoolsが未対応にゃのかメモリ共有等の機能が働きにくい
・ESX鯖のCPU等が異にゃるとpause状態のsnapshotは移行しても再開は出来にゃいのでCPU機能のマスクが必要だがめんどくさい
・CPU+HDD+SSD+MEMが1台、HDDx6が1台というのが最小構成か。バックアップは本体HDDで。
・まともに冗長考えると最低ESX鯖が2台、ストレージが2台で相互にバックアップ置いとく感じ
・Hyper-Vとどちらがと言われると少々疑問だがLinuxとtext設定ファイルベースで自由に出来るのは好ましい
・RedHatのコンソールと良くできたGUIはvmware server 2.xやHyper-Vに比べて利点
んーこんにゃもんか? Hyper-Vもある程度評価しておいた方が良いと思うんだが、ちょっと目を話したら2008 R2が出てたりとかころころ変わってめんどくさい。
▼ ESX 関連記事
▼ FreeNAS 関連記事
▼ vmware 関連記事
ESX鯖にSSDを入れてswap先に使っていたのだが、まぁそれはそれで快適にゃ動作ににゃったものの、各vmが自力で吐くswapはやはりストレージ上に溜まるわけで、蓄積するとやはり遅い。
spoolだののtmp的にゃ用途には、いろんにゃ所でキャッシュが効くので、writeが極端に遅くにゃければストレージ上で問題にゃいのだが。
というわけで、ESXのローカルSSDを活用すべく、vmのvmdk構成を変更。各vmにswap用ドライブを追加し、そのvmdkをSSD上に配置すれば・・・と思ったのだがこれはとりあえず失敗。snapshotを使うとsnapshotはvmxのディレクトリに保存されてしまうらしく、これの変更は手間というか周囲の動作保証が取れんのでやりたくにゃい。
そこで発想を逆転して、vmxはSSD上に、vmdkはNAS上に配置することに。これはディスクの場所変更でオフィシャルに出来る。vmの構成ディレクトリが複数ににゃってバックアップがめんどくさい等のデメリットもあるが、ひとまずsnapshotと併用するとかにゃり高速化するので非常に使える。つまりNASにはWriteが一切行かにゃいのでRAID5でも構わにゃいしIOpsも稼げる。頻繁に書かれる場所はsnapshotとしてSSD上に自動的に配置される。vmが自前でswapすれば必ずSSDに書かれるわけで合理的。膨大にゃ量を書くvmはsnapshot取らにゃいだろうからSSDの容量も80G有れば十分すぎる。
さすがにプチフリというか、WriteによってReadが阻害されまくるSSDではvm数次第で苦しくにゃってくるが、ある程度キャッシュ等積んだSSDにゃら問題は起きにゃいだろう。にゃんだかESXのローカルWrite自体がいまいちにゃ速度だし・・・これは不具合かにゃぁ?
ESX# dd if=/dev/zero of=xxx bs=1024000 count=100
100+0 records in
100+0 records out
102400000 bytes (102 MB) copied, 4.96558 seconds, 20.6 MB/s
とかいう状態でSSDとは思えにゃい低速っぷり(笑) HDDより遅いし。理屈ではもっと高速でsnapshot時のメモリダンプとかも高速にゃはず。にゃんだろう、キャッシュ?
▼ ESX 関連記事
▼ vmware 関連記事
いろいろ溜まってきたのでメモ。
ds2fullpath (){
sed -e 's/\[\([^]]\+\)\] \([^[ ]\+\)/\/vmfs\/volumes\/\1\/\2/'
}
get_ds_from_path (){
sed -e 's/\/vmfs\/volumes\/\([^\/]\+\)\/.*/\1/'
}
inner_quote (){
sed -e 's/[^"]*"\(.*\)".*/\1/'
}
get_allvms_vmid_name (){
vim-cmd vmsvc/getallvms | sed -e 's/\[.*\] .*//' -e 's/ \+$//' -e 's/\([0-9\]\+\) \+\(.*\)/\1 "\2"/' |
awk 'NR!=1'
}
get_allvms_vmid_datastore (){
vim-cmd vmsvc/getallvms | sed -e 's/\([0-9\]\+\) \+.* \+\[\(.*\)\] \(.*\/.*\.vmx\) \+.*/\1 "\2" "\3"/' |
awk 'NR!=1'
}
get_allvms_vmid_vmxpath (){
vim-cmd vmsvc/getallvms | sed -e 's/\([0-9\]\+\) \+.* \+\[\(.*\)\] \(.*\/.*\.vmx\) \+.*/\1 "[\2] \3"/' |
ds2fullpath |
awk 'NR!=1'
}
get_vmid_from_name (){
get_allvms_vmid_name | grep \"$1\" |awk '{print $1}'
}
get_vmxpath_from_vmid (){
get_allvms_vmid_vmxpath | awk '/^'$1' /{print $2}' | sed -e 's/^\"//' -e 's/\"$//'
}
get_vmxpath_from_name (){
vmid=`get_vmid_from_name $1`
get_vmxpath_from_vmid ${vmid}
}
get_vmsdpath_from_vmid (){
get_vmxpath_from_vmid $1 | sed -e 's/\.vmx$/.vmsd/'
}
get_datastore_from_vmid (){
get_allvms_vmid_datastore | awk '/^'$1' /{print $2}' | sed -e 's/^\"//' -e 's/\"$//'
}
get_vmname_from_vmid (){
get_allvms_vmid_name | grep "^$1 " | sed -e 's/.*"\(.*\)".*/\1/'
}
get_vmdk_data_file_from_vmdk (){
test -f "$1" || return
f=$(grep " \".*\.vmdk\"$" $1 | grep -v parentFileNameHint | sed -e 's/.* "\(.*\)"$/\1/')
echo "$f"|grep ^/ >/dev/null && echo "$f"
echo "$f"|grep ^/ >/dev/null || echo "`dirname "$1"`/$f"
}
is_there_snapshot (){
vmid=$1
snapshot_name=$2
vim-cmd vmsvc/snapshot.get $vmid | grep "\-\-Snapshot Name" | sed -e 's/-\+Snapshot Name \+: //' |
grep "$snapshot_name" >/dev/null
}
remove_last_snapshot (){
vmid=$1
if [ "`get_vmxpath_from_vmid $vmid`" = "" ] ; then return 255 ; fi
lv=`vim-cmd vmsvc/snapshot.get $vmid |grep CHILD |wc -l`
vim-cmd vmsvc/snapshot.remove $vmid 0 $lv
}
get_alltaskids (){
vim-cmd vimsvc/task_list | grep vim.Task: | sed -e 's/.*vim.Task://' -e 's/,//' -e "s/'//"
}
get_taskids_from_vmid (){
vim-cmd vimsvc/task_list | grep vim.Task:haTask-$1 | sed -e 's/.*vim.Task://' -e 's/,//' -e "s/'//"
}
filter_running_taskids (){
while read taskid ; do
is_task_running $taskid && echo $taskid
done
}
get_running_alltaskids (){
get_alltaskids | filter_running_taskids
}
get_running_taskids_from_vmid (){
get_taskids_from_vmid $1 | filter_running_taskids
}
get_taskname_from_taskid (){
vim-cmd vimsvc/task_info $taskid | grep "name = " | sed -e 's/.*"\(.*\)".*/\1/'
}
is_there_running_task_vmid (){
get_running_taskids_from_vmid $1 | grep .
}
is_task_running (){
taskid=$1
vim-cmd vimsvc/task_info $taskid | grep 'state = "running",' >/dev/null
}
wait_while_task_running_vmid (){
while : ; do
taskid=`get_running_taskids_from_vmid $1 | head -1`
if [ "$taskid" == "" ] ; then break ; fi
echo waiting `get_vmname_from_vmid $1` `get_taskname_from_taskid $taskid`
sleep 3
done
}
path_r2a (){
echo `cd "$1" && pwd`
}
path_cut (){
src_dir=`path_r2a "$1"`
file=$2
basedir=$(dirname "$src_dir")
c=$(echo "$basedir" | wc -c)
echo "$file" | cut -c ${c}- | sed -e 's/^\///'
}
cp_dir_sparse (){
cp_prog=$1
SRC=`path_r2a "$2"`
DST=`echo "$3" | sed -e 's/\/$//'`
find "$SRC" -type f | while read a ; do
$cp_prog "$a" $DST/`path_cut "$SRC" "$a"`
done
}
get_datafiles_from_filelayout_with_vmdk_data (){
get_datafiles_from_filelayout $1 |
while read a ; do
echo "$a"
echo "$a"|grep \.vmdk$ >/dev/null && get_vmdk_data_file_from_vmdk "$a"
done
}
get_datafiles_from_filelayout (){
vim-cmd vmsvc/get.filelayout $1 |
grep "\"\[.*\] .*\..*\"" |
inner_quote |
ds2fullpath
}
get_vmx_dir (){
d=`get_vmxpath_from_vmid $1`
dirname "$d"
}
get_logfile_dir (){
vim-cmd vmsvc/get.filelayout $1 |sed -e 's/^ \+//'| grep "^logDirectory *=" | inner_quote | ds2fullpath
}
get_logfiles_from_filelayout (){
d=`get_logfile_dir $1`
vim-cmd vmsvc/get.filelayout $1 | sed -e ':a;$!N;$!b a;s/\n//g' |
sed -e 's/.*,.*logFile *=[^\[]\+\[\([^]]*\)\].*/\1/' -e 's/",/"\n/g' |
inner_quote |
while read a ; do
echo "$d/$a"
done
}
get_configfiles_from_filelayout (){
d=`get_vmx_dir $1`
vim-cmd vmsvc/get.filelayout $1 |
sed -e ':a;$!N;$!b a;s/\n//g' |
sed -e 's/.*,.*configFile *=[^\[]\+\[\([^]]*\)\].*/\1/' -e 's/",/"\n/g' |
inner_quote |
while read a ; do
echo "$d/$a"
done
}
get_allfiles_from_filelayout (){
sub (){
get_configfiles_from_filelayout $1
get_logfiles_from_filelayout $1
get_datafiles_from_filelayout_with_vmdk_data $1
}
sub $1 | sort | uniq
}
vmname="$1"
backupdir="$2"
copy_p="python -u cp_sparse.py"
vmid=`get_vmid_from_name "$vmname"`
vmx="`get_vmxpath_from_vmid $vmid`"
vmsd="`get_vmsdpath_from_vmid $vmid`"
vim-cmd vmsvc/snapshot.create $vmid __backup __backup 1 1
wait_while_task_running_vmid $vmid
vim-cmd vmsvc/snapshot.get $vmid
dupfile=0
get_allfiles_from_filelayout $vmid | while read a ; do
basename "$a"
done | sort | uniq -d | grep . >/dev/null && dupfile=1
get_allfiles_from_filelayout $vmid | while read a ; do
dst="$backupdir/$vmname"
if [ "$dupfile" = "1" ] ; then
ds="`echo "$a" | get_ds_from_path`"
dst="$backupdir/$vmname/$ds"
fi
$copy_p "$a" "$dst/`basename "$a"`"
done
remove_last_snapshot $vmid
wait_while_task_running_vmid $vmid
get_datafiles_from_filelayout $vmid | grep \.vmdk$ | while read a ; do
dst="$backupdir/$vmname"
if [ "$dupfile" = "1" ] ; then
ds="`echo "$a" | get_ds_from_path`"
dst="$backupdir/$vmname/$ds"
fi
$copy_p "$a" "$dst/`basename "$a"`"
done
get_datafiles_from_filelayout $vmid | sort | uniq | grep \.vmdk$ | while read a ; do
if [ "$dupfile" = "1" ] ; then
continue
fi
parent_path=`grep "^parentFileNameHint *=" "$a" |inner_quote`
echo "$parent_path" | grep "^/" >/dev/null || continue
vmdk=`basename "$parent_path"`
cat $a | sed -e 's/^\(parentFileNameHint *= *\)".*"/\1"'"$vmdk"'"/' > "$backupdir/$vmname/`basename $a`"
done
分散datastoreに対応しようと思ったけどめどくにゃっていい加減にゃ対応のまま放置してあります状態(笑)
ま、そのままコピーするだけで、一応バックアップにはにゃるわけだし、複雑にゃことしにゃい方が良いんだけど、やっぱりそのままインポートしてrevert押せばすぐ起動ってのはバックアップとして有用だと思うわけで。
▼ ESX 関連記事
▼ vmware 関連記事
freenasのnfsやiSCSIとESXの組み合わせでかにゃり格闘したのだが、いい加減疲れた上に、ESXiを入れ直そうと思ったらUSBがエラー吐いて止まるとかいろいろ霊障も起き出したので、freenasを捨てることに。
Ubuntuを実機に入れてInst時にmd raidを組む。ExpertModeでinstしたら不明にゃ選択肢も出て少々時間がかかる。めどい。
とりあえずnfsをいれて
ESX# dd if=/dev/zero of=test bs=1024000 count=1000
1000+0 records in
1000+0 records out
1024000000 bytes (1.0 GB) copied, 24.115 seconds, 42.5 MB/s
おお、まともだ!
ESX# time cat test >/dev/null
real 0m54.728s
・・・あるぇ?
ESX# dd if=test of=/dev/null bs=1024000
1000+0 records in
1000+0 records out
1024000000 bytes (1.0 GB) copied, 49.9522 seconds, 20.5 MB/s
にょ〜ん・・・
まぁFreeNASよりは倍ほどマシだが。
因みにcat file >/dev/nullでnfsdが5%+5%ほどCPU食ってる。ちょっと食い過ぎじゃね? まぁCPUが1コアの2.7GHzとか速度求めるには微妙ではあるとしても。
▼ ESX 関連記事
▼ FreeNAS 関連記事
▼ vmware 関連記事
nfs遅いよねー!(?)と思ってわざわざディスク6つも積んでめんどくさいRAID10設定までしてInstしたFreenasのiSCSIが強烈に遅い。10MB/s出てにゃいんだが?
これはESX側との相性もあるんだろうと思うがやっぱりこれは使えん。
nfsが複数繋いで15MB/sとかでまだマシだったり。
▼ ESX 関連記事
▼ FreeNAS 関連記事
▼ vmware 関連記事
ということで、ESX4鯖にSSDを積んでホストのスワップ先に指定してみた。
今のところ非常に快適。
ついでにESXもSSDにInstしておいた。HDDよりは壊れにゃいだろう。
ま、いろいろ考慮すれば、小さいSSD積んだキャッシュのデカいCPUの鯖にESX4+ESX4iライセンスと、iSCSIかNFS鯖に出来るディスク数積んだ安鯖にUSBメモリ挿してFreeNAS、という構成が現状では妥協点か。vmのサイズが小さければFreeNAS鯖無しでSSDのデカいのを積む、という手がベストだが。あぁさらにバックアップ用のにゃにかストレージが必要か。これはESX鯖にデカいHDDを積んでバックアップ先にしておくのがよいかも。
▼ ESX 関連記事
▼ vmware 関連記事
ESX4のストレージにFreeNAS@ML115を使って・・・という予定だったのだが、これが何故か全く速度が出にゃい。
nfs経由で7MB/sとか。これはあれか、どこかのチューニングパラメーターにゃのか?とかにゃりいろいろいじり回したがほとんど改善が見られず。iSCSIまでやってみたけど同じ。
・・・
で、iperfしてみたら、100Mbps弱とか出た。どう見てもハブ間に100baseが挟まってます。本当ににゃんでやねん
▼ ESX 関連記事
▼ FreeNAS 関連記事
ESX4で普通にvmを増やしていくと、.vswpファイルにごりごり書かれて、たいそう遅くにゃる。このあたりの動作はvmware serverと同じ。
で、Winに限ってはmainMem.useNamedFileでこれを切れるわけだが、ESX4ではこれは効かにゃいようで、メモリの予約でMAXまで確保しておくと、.vswpが0ににゃる。
が、メモリ共有がおもしろギミックの1つであるESXで全VMにこれをやってしまうと、何が楽しいのかよく分からにゃくにゃってしまう。かといって1つでも.vswpにアクセスするvmがあれば、そのdatastoreのvmは壊滅的にゃパフォーマンス低下を喰らう。にゃんともvmware系の弱い所である。
一応、swap先を変更できるので、全vmの.vswpを集めて別のdatastoreに置いたり出来るのだが、それはそれでまた高コストで煩雑にゃ解決法である。ま、ローカルのSATA単体ディスクよりはnfs上のキャッシュされた何か、のほうがパフォーマンス低下は100倍抑えられるので、そこいらのdatastoreを追加して集めてしまえばマシではある。が、複雑性を増して故障個所を増やしてるわけで、どうにも賢くにゃさげ。
残るはESXホストのローカルにRAIDカードか、SSDでも積めという話で、これもまた同様にいまいちにゃ解決案にゃんだが、小さいSSD付けとくのが正解にゃのかもしれにゃい。うーん・・・
▼ ESX 関連記事
▼ vmware 関連記事
ESX4でnfsを使ったが意外とこれが速い。レイテンシの点では劣るはずにゃのだが、たぶんnfs鯖のキャッシュと、syncが無視されてる気がするのがデカい。にゃんというかぬるぬるとスムースに動く。
あと実験がてら稼働中にLANを引っこ抜いてみたら、一応しばらくはwaitしてくれて、さらに放置し続けると落ちた。このへんのタイムアウト値は多分変更できるんだろうにゃ。
速度のチューニングも兼ねて、nfsまわりの設定を変えたいのだが知識がにゃい。うーむ
▼ ESX 関連記事
▼ vmware 関連記事
ESXi4で定期backup & リストア1分でvm復帰を目指すと、ESXホスト間で相互backupと、nfsを共有マウントという2つの方法が思いつくが、今回は2つ目で。にゃぜにゃらば、ESXiホスト間でsparseにゃファイルのコピー方法が見あたらん。SSH経由でstdin〜とかやりたくにゃいんだがどうにゃんだ・・・。ここいらはESXにした方がやはりいいか。
まぁともかく、ESXi4用にnfsdを立てる。とりあえずML115にFreeNASというベタにゃ構成でRAID5。最近ZFSが使えそうにゃFreeNASも出てきてるが怖いので触らにゃい。
で、特に引っかかる部分はにゃくnfs共有してマウントすればdatastoreとして使える。とても便利。但し速度が出にゃい。MAX30MB/sくらいで、実質15MB/sくらい? バッファリングとかいろんにゃファクタがあるようにゃので、後日これはチューンする必要がある。
あと懸念されたsparseファイルの扱いだが、以前のpythonスクリプトとかでも普通にコピー出来てるので問題無さそう。
これでESX鯖が死んでも別のESX鯖でnfs上のvmを起動させればOKのはず。
ただ欲を言えばそりゃ圧縮したり世代管理が出来るとベストにゃわけで、ZFSに期待する所にゃのだが・・・
▼ ESX 関連記事
▼ FreeNAS 関連記事
▼ vmware 関連記事
そろそろESXiの限界が見えてきたというか、飽きたので、ESX4をインストールしてESX4iのキーを放り込む。RCLIがどうの、といった制限があるのかもしれにゃいが、コンソールがほぼ素のLinuxにゃので事実上やり放題である。
但しUSBメモリにはインストール出来にゃいので、では非RAIDのHDDでいいのかとか、その辺が嫌にゃ感じ。
▼ ESX 関連記事
▼ vmware 関連記事
rsync調べだが、ともかくsshが遅い。
ssh -W 1048576
でちょっと早くにゃるか?とか、inetdのsshdにも-W 1048576付けてみたりしたが、変わらん。
dropbearのソースに何か書いてある系だとするとここの高速化はちょっとしんどそう。
▼ ESX 関連記事
▼ vmware 関連記事
何のことはにゃい、普通のssh風である。
cd /.ssh/
dropbearkey -t rsa -f id_rsa
dropbearkey -f id_rsa -y |grep ssh-rsa > id_rsa.pub
scp /.ssh/id_rsa* root@remotehost:/.ssh/
あとはremotehost側で
cd /.ssh/
cat id_rsa.pub >> authorized_keys
すれば完了。相互に自動ログインさせるにゃらローカル側でもしておく。
あとは
ssh -i /.ssh/id_rsa remotehost
で自動ログインできる。
scpもrsyncもこれでいけるはず。
▼ ESX 関連記事
▼ vmware 関連記事
海外からバイナリ拾ってくる。
ある程度動く。
結局staticでbuildした何か、を持ってくれば、結構動くんじゃにゃいのかという。
で、ローカルとかssh経由は動くんだが、inetdにrsync登録してもgenerate_files phase=1で止まる。にゃんじゃこれ
inetd.confが
rsync stream tcp nowait root /vmfs/volumes/datastore1/bin/rsync rsync --daemon --log-file=/tmp/rsync.log --config=/vmfs/volumes/datastore1/bin/rsyncd.conf -vvv
rsyncd.confが
[test1]
path = /vmfs/volumes/datastore1/
comment = test1
use chroot = no
lock file = /tmp/rsync.lock
read only = no
uid = root
gid = root
strict modes = false
とかにゃんだが。
ちにゃみにuse chroot = noにしにゃいとchroot出来んと言われる。chrootが使えん模様。
うーん、せっかくだから(?)ssh経由しにゃいrsync直通で大量送信したいんだが、ちょっとどこで止まってるのか分からにゃいにゃぁ。ていうかエラー吐かずに止まるってのはにゃんだろう? timeoutしにゃかったのでネットの何かを待ってるのではにゃいようだし。
▼ ESX 関連記事
▼ vmware 関連記事
海外からバイナリ拾ってくる。
ローカルのファイル間では普通に使えてるっぽいが、あやしい。
rsync -Sでsparseにゃファイルもコピーできてる様に見えるが、ファイルサイズがちがう(笑)
で、肝心のホスト間コピーだが、ln -s sshしてあれば。
rsync file root@remotehost:/tmp/
とかで一応通る。にゃんか強烈に遅いけど。5MB/sて・・・・。-Sは怖くて使えにゃい。
CPUを食ってるのでこれはsshが原因としか思えにゃい。
で、いつものcipherにゃんかの設定を・・・コマンドラインでは出来にゃいようで。うーん
▼ ESX 関連記事
▼ vmware 関連記事
ESXi4にpythonが入ってたので、どこまでpureで出来るか的にゃ・・・まぁどうでもいい。thinにゃvmdkファイルをにゃるべくthinにゃままでコピーしたいにゃぁという話。
#!/bin/python
import sys
import os
import stat
src_file = sys.argv[1]
dst_file = sys.argv[2]
bs = 1024 * 1024
if not os.path.isfile(src_file) :
print "file not found :" , src_file
sys.exit()
if not os.path.isfile(dst_file) :
f2=open(dst_file, 'w')
f2.close()
src_size = os.path.getsize(src_file)
src_stat = os.stat(src_file)
src_time = (src_stat[stat.ST_MTIME], src_stat[stat.ST_MTIME])
dst_size = os.path.getsize(dst_file)
dst_stat = os.stat(dst_file)
dst_time = (dst_stat[stat.ST_MTIME], dst_stat[stat.ST_MTIME])
print "src : time",src_time , "size=",src_size , " " , src_file
print "dst : time",dst_time , "size=",dst_size , " " , dst_file
print "blocksize : ", bs , "bytes"
if src_time == dst_time :
if src_size == dst_size :
print "skip"
sys.exit()
f1 = open(src_file, 'r')
f2 = open(dst_file, 'w')
zero = chr(0x00)
zero_block = zero * bs
while 1:
s = f1.read(bs)
print f1.tell(),"/",src_size,"\r",
if not s:
break
if s == zero_block :
f2.seek( f1.tell() )
else:
f2.write(s)
f2.write( "a" )
f2.truncate( f1.tell() )
f1.close()
f2.close()
os.utime(dst_file, src_time)
print ""
print "done."
うーん、実にいい加減だw
まぁでも一応動いてる。ある程度sparseにコピー。一応、日付とサイズが同一にゃらスキップ、日付もコピー、何とにゃく途中経過も表示してる。途中経過はバッファ切らにゃいとアレだが。
ブロックサイズはCPU如何によって減らした方が速いと思われる。にゃんかしらんが遅い。
てことでがんばれば付属pythonで結構何でも出来そうにゃもんだがどうにゃんだろうにゃ。
▼ ESX 関連記事
▼ vmware 関連記事
vmware server 1.xで動いてたvmxをESX4に持ってく手順。
vmware converterでserver上からESX4上に変換する。この時vmdkが肥大化するので、極端にデカいvmdkの場合はsettingでパーテーションサイズを削る。にゃお、ESXのdatastoreで標準の1MBで確保してると1ファイルの最大サイズが256gにゃので注意のこと。
toolsは自動でinstさせてもよいし、あとで手動で入れても良い。キーボードドライバが何故か英語ににゃるので日本語に戻す・・・これは何か原因がありそう。
で、この時点で一応移行完了ではあるのだが、せっかくにゃので作り直す。
vmkfstoolsでvmdkをthinに変換。vmも新規作成してVer7に、NIC類もタイプを新しくする。
あとはお好みでいろいろ設定。
と、いう作業を10個ほど行って、そろそろ飽きてきたのでにゃんかネタが欲しい。
▼ ESX 関連記事
▼ vmware 関連記事
散発的に単スレッド高負荷が発生する鯖があるんだが、これをAthlon64X2あたりで動かしてたら、結構遅かったので、C2Dのにゃんぞに移動したら多少改善された。
で、今回SC1435のOpteron23xxに移動したら、かにゃり高速化した。それぞれのCPUのクロックや演算速度を大雑把に見積もってみると、結局CPUのキャッシュ量がボトルネックだった模様。
vm向けにはCPUにキャッシュが沢山載ったものを選びましょうみたいにゃ話。
▼ ESX 関連記事
▼ vmware 関連記事
ESXの素敵にゃ面としては、vmのメモリ共有によって、にゃんだかお得感が増す所。実際にはさほど言うほどの効果は無くて、オーバーヘッド分が帰ってくる程度にゃんだけど(笑)
で、意図的に2003鯖のvmばかりを集めたら、11vmでメモリ共有が3gほどににゃった。オーバーヘッドが1.5gほどあるので、2倍も取り返してる、と言う感じで自己満足できる。
あと、自動的に未使用メモリを拾ってくれるので、とりあえず全vmメモリ2gで確保だーとかしても上手くやれば動く(笑) ちょっと設定変えにゃいとちょっとずつしかメモリ解放されにゃいので、時間差起動しにゃいと無理にゃんだけども。
そういやメモリとかCPUをホットアドで起動後に追加できるんだが、これは自動化できんものか。toolsでメモリ使用量とか監視して、足りにゃくにゃったらメモリをホットアドとかそういう・・・
▼ ESX 関連記事
▼ vmware 関連記事
sshdは動いてるのにsshが無いにゃんて! ということで
ln -s /sbin/dropbearmulti /bin/ssh
これで使える。
本来はdbclientらしい。どのみちln -sで実態は同じである。
▼ ESX 関連記事
▼ vmware 関連記事
vSphere Clientとかからだけ使ってねというお話にゃんだがやっぱり直接sshで入れた方が何かと便利。
で、コンソールでALT+F1してunsupported
PASSいれて/etc/inetd.confのssh行を有効にしてkill -HUPすればOKのはず。
▼ ESX 関連記事
▼ vmware 関連記事
ESXi4に2008R2を入れてみたら、猛烈に不安定。
タスクマネージャを最大化したら画面が凍るとかそう言うレベルで。
で、VGAのアクセラレーションを下げたり、vmwareのSVGAドライバをuninstしてみたりいろいろやったが、それ以外の部分でも不安定で、結局全く使い物ににゃらず。
まぁ未サポートとはいえ、もうちょっと動いてくれてもナーという。
かといってMSのHyper-Vを入れるかと言われると、アレはアレで種々微妙にゃ問題が・・・
▼ ESX 関連記事
▼ vmware 関連記事
用語が終わってる感があるが、要するにfs上で使ってにゃい部分を削ってvmdkをシェイプアップしたい場合にどうするかという。
で、thinにゃvmdkだと、vmtoolsの圧縮タブが使えにゃくにゃってる。にゃんぞ・・・
どうやらthinじゃにゃくthickつーか普通のベタvmdkだと可能ににゃるらしいんだがそれ意味にゃいし。
converter再びが正解か?と思ったがそれはそれで、にゃー。
NHCが対応しにゃいかしら?
▼ ESX 関連記事
▼ vmware 関連記事
ESXi4だが、何故かpython 2.5が入っている。ま、busyboxとやら用にGNUにゃツール一式をコンパイルしてコピーすれば動くのだろうが、とりあえず簡易にゃ手間で何とかにゃる方向で探るべきでしょう、ってわけでpython 2.5のライブラリをコピーして動くか実験。
そこいらのdebianでapt-get install python2.5
ESXでscp -r user@debian:/usr/lib/python2.5 どこか
export PYTHONPATH=$PYTHONPATH:どこか
としておけば一応大概のpythonスクリプトが動いてしまったり。
で、にゃんか例えばsmtpでメール送ったりもできるわけで、cronとかでbackupスクリプト走らせるにゃら便利かにゃーとか。
▼ ESX 関連記事
▼ vmware 関連記事
vmware serverのvmのバックアップはWin上ということもあって、ある程度確立していたわけだが、ESXi4上のvmはどうやってバックアップするのでしょう、ってわけでいろいろ手探り。
こういうのは先に海外探すべし、と思いつつ一応標準的にゃコマンドで何が出来るのか探す。
まず方針として、NTFSのshadow copyのようにゃFSレベルのスナップショットが見あたらにゃいので、vmをpauseしてsnapshotとってstartしてsnapshotからコピーというvmware serverでのやり方は捨てることにする。このあたりはESXの使うdatastoreストレージがその機能を持っていれば有りだろう。
で、vmware serverと違ってvmのsnapshotは沢山取れるようにゃので、とりあえずvmのsnapshotを取り、readonlyににゃってファイル群をコピーし、snapshotを削除する。コピーしたファイルに手直しをしてsnapshot時点からstart可能にする、という方向でやってみる。
VMware vSphere CLIからのリモート作業、としたかったが逐一接続が遅いのと機能不足に思えたのでとりあえずESXのコンソールにSSH接続にて作業。
まず
vim-cmd vmsvc/getallvms から対象vmのIDを得る。
vim-cmd vmsvc/snapshot.create 999 snap1 desc1 1 1 でsnapshotをつくる。時間がかかるので、vim-cmd vmsvc/snapshot.getとかをポーリングして完了を待つ。10秒ほどvmは止まるかも知れにゃいが一応許容範囲。
cp -ar vm/ backup/ とりあえずコピーできるファイルをコピー。エラーは無視。
vim-cmd vmsvc/snapshot.get 192 |grep CHILD |wc -l でさっき作ったsnapshotの階層を出して
vim-cmd vmsvc/snapshot.remove 192 0 N でそれを削除。ただこのあたりはsnapshotが単純にゃ構成だった場合のみ有効で、正直vmsvc/snapshot.removeの引数が謎過ぎて意味不明。どうにゃんだこれ・・・
ちにゃみにオプション無しでsnapshot.removeするとrootに近いsnapshotが削除される。まぁ定期的にsnapshot作って、とかいう場合には便利そう。
あとはコピーした不完全にゃvm構成ファイルの手直し。
cp -a *.vmx ../backup/cat vmname.vmsd|grep \.fileName|sed -e 's/.*\.fileName *= *//' -e 's/"//g'|while read a ; do cp -a $a ../backup/ ; done みたいにゃのでにゃんとにゃく動く。たぶん。
で、さてここで問題です。backupしたファイルはどうにゃっているでしょう?
答えはcpでsparseが解除されてディスク容量食いまくりにゃのでした。おいおい。
これはsparseのままコピー出来るソフトがあれば解決するのだが、busyboxとやら付属cpだのtarだのddだのはどうも未対応ぽいらしく・・・。どうしようかねぇ。
コピー先がdatastoreで無ければもうちょっと手はある気がするが、backup上の*.vmxをインベントリに追加するだけでさっくりリストア出来てすぐ動くというのは得難い気がして。
▼ ESX 関連記事
▼ vmware 関連記事
VMware vSphere CLI付属のvifs.plでESXi4上のファイルのUL/DLが出来るのだが、vifs.pl -pで単一ファイルをUL出来るがdir単位ではできにゃい。
つまり使うにゃと言うことですね、わかります。
普通にSCPとか使えと言うことらしい。
▼ ESX 関連記事
▼ vmware 関連記事
豊富に動いているvmware server 1.xのvmを、ESXi4鯖に移動したい。
まずは一応実験。server1.xのvmdkを直接ESXi4のdatastoreに置くとNGぽい。互換性のにゃいvmdkにゃら何ぞ拡張子でも変えてくれりゃいいと思うんだが。
ってことでVMware vCenter ConverterをDLしてInst。vmtoolsとかupdateしてくれるのは便利。希にvmtoolsのupdate時にハマるサービスとかがあるので、そう言うサービスは停止した状態でupdateする。
で、とりあえずこれでOKとは言えるのだが、vmware converterで変換すると動くけどフルサイズのvmdkににゃってしまう。ESXi4で新規にvmを作るときには、vmdkはthinというsparseファイル形式を指定できるので、vmware serverと同じく、とりあえず容量はどれも500gくらいでー、といった何も考えずに長らく使える便利vmが作れるのだが、これがconverterで全部リアルにゃサイズに伸張されてしまうとディスク容量が大変にゃことに。
これはもうconverterが対応すれば終いだと思うのだが、一度ESX4上に変換した後でvmdkをthinに変換という二度手間を行うのが現状ベスト。まぁアホにゃサイズを指定してあったvmは多少自重したサイズにconverterで指定し直した方がいいとは思う。
さてvmdkの変換といえばとりあえずvmware server付属のvmware-vdiskmanagerとか。ただしver 1.x系しか知らにゃい上にさすがにESX向けに変換するオプションは見あたらにゃいのでパス。
次は本命NHC。ってプラグインが404だし、にゃんとにゃく動いてるように見えるんだがESX4からは却下される。うーん、にゃんか違うの?
ってことで仕方がにゃいのでvSphere CLI。
vmkfstools.pl --server 1.2.3.4 --username root --password pass -i /vmfs/volumes/datastore1/upload_dir/windows.vmdk -d thin /vmfs/volumes/datastore2/tmp/windows.vmdk
とか。別にリモート実行する必要は無いのでESX上でやっても同じ。-d thinが付いてるのでsparseにゃvmdkが生成される。ちにゃみに-d 2gbsparseにしても1ファイルににゃった。よくわからん。
converterで自動的にESX4上に展開されてしまうので、その後の処理とにゃればESX4上でやるべきにゃのかもしれにゃいが、server 1.xにゃvmdkをローカルWin上でコンバートしてESX4にULの方が何とにゃく楽だにゃぁ。server2.x付属のvmware-vdiskmanager.exeだったらOKにゃのかしら?
ググるとOVF Toolを使ってどうのってのも有るようだがもうめんどくさくにゃった。
▼ ESX 関連記事
▼ vmware 関連記事
VMware vSphere CLIを入れるとリモートでコマンドがたたける。
ssh許可するのとどっちが便利かは微妙。
Virtual appliance for the VMware Infrastructure Remote CLIもある。
毎回繋ぎに行くのがすごく重い。
あと使えるコマンドが微妙。
vmkfstools.plとかvmware-cmd.plとかvifs.plとか? にゃんだろうこのいまいちにゃラインナップ。
あとpathの問題があって、一緒に入るperlを叩く必要があるんだが、まぁcygwinとかと被るわけで。
@echo off
pushd "C:\Program Files\VMware\VMware vSphere CLI\Perl\bin"
perl "C:\Program Files\VMware\VMware vSphere CLI\bin\%1" --server 1.2.3.4 --username root --password pass %2 %3 %4 %5 %6 %7 %8 %9
popd
といった微妙にゃpushdとかset pathを書いたスクリプト経由で使った方がいい。
因みにESXiにちゃんと無料ライセンスキーを入れるとCLIは機能制限されるらしい。にゃにそれ
▼ ESX 関連記事
▼ vmware 関連記事
でESXi4だが、HDDにinstというのは面白みがにゃいし、HDD1台にしかinst出来にゃいわけで、HDD死ぬとにゃんだか嫌そうでもある(実際にはvmデータだけ残ってりゃ大したことはにゃい)。
ということでUSBから起動すると萌えだよね、って方向で作業。実際には外付けCDROMを持ってくるのがめんどくさかった。
やり方はVMware-VMvisor-Installer-4.0.0-171294.x86_64.isoのimage.tgzのVMware-VMvisor-big-171294-x86_64.dd.bz2のVMware-VMvisor-big-171294-x86_64.ddをwinのddか何かを使ってUSBメモリに書き込めばOK。
USBメモリにゃのでbootが遅かったりするが、起動後は大してアクセスしにゃいので大丈夫。
▼ ESX 関連記事
▼ vmware 関連記事
名称がややこしくにゃってきているのだが、ESX無料版のESXiのVer4である。
3.x系がチャレンジャー向けだったので静観していたのだが、4ににゃってある程度固まってきたかにゃーと思って入れてみたんだがやっぱりまだしんどい系(笑)
とりあえずDLしてCDRに焼いてML115でboot。さっくりSATAにゃHDDも認識し、DHCPでIP拾うのでブラウザからアクセスすればOK。vSphere ClientをInstして普通に使える。
backupの件が少々アレにゃんだが、大差にゃいので、ML115にwin+vmware serverとかの構成で使ってる向きには、そろそろESX4にしてもOKではにゃいかにゃといったところ。
▼ ESX 関連記事
▼ vmware 関連記事