技術ブログ
弊社のx86系プラットフォーム検証環境はOracle VMをベースに構築しています。
上のエントリで書いたとおり、DELL PowerEdge T320という超お値打ちなサーバを見つけ、新規に購入したので、これを機に社内検証用Oracle VM環境 を 3.1.xから 3.2.2に移行しました。(下画面は Oracle VM Server 3.2.2で取得したxentop -fの実行結果。Xen 4.1.30ベースであることがわかります)
Oracle VM環境をバージョンアップする方法として、マニュアル等で紹介されているバージョンアップ手順に従う方法と、新規に環境をゼロから構築して既存のVMを展開する方法の2つがあります。今回は以下の理由から、新規に環境をゼロから構築して既存のVMを展開する方法を使用することにしました。(過去のバージョンアップでも同様の手順を踏んでいます。)
Oracle VM 環境を構築されたことがある方であれば、お分かりかと思いますが、Oracle VM Server, Oracle VM Managerのインストール、設定はさほど面倒なものではありません。このため、問題は既存のVMを新しい環境に展開する点になります。弊社検証環境では、既存のVMをtar.gzで圧縮してバックアップしているため、これを展開し、新しい環境に併せて若干修正することで完了します。基本的には以下の作業が必要になります。
上記の作業は比較的単純なものですが、すべてのVMに対して実施するのは面倒ですし、ミスを誘発する可能性もあります。実際、弊社検証環境には現在 45 のVMが存在しています。サポート業務を行う関係上、多くのバージョン、バリエーションの環境を保持しておく必要があるため、これだけ多くのVMがある形になっています。
[root@csov32s1 log]# vmlist |wc -l 45 [root@csov32s1 log]# vmlist /OVS/1/l63x64b/vm.cfg <= Oracle Database シングル (Oracle Linux 6.3) /OVS/1/RAC_la205re/vm.cfg.1 <= Oracle Real Application Cluster 10.2.0.5 /OVS/1/RAC_la205re/vm.cfg.2 /OVS/1/RAC_lb106rw/vm.cfg.1 <= Oracle Real Application Cluster 11.1.0.6 /OVS/1/RAC_lb106rw/vm.cfg.2 /OVS/1/RAC_lb107re/vm.cfg.1 <= Oracle Real Application Cluster 11.1.0.7 /OVS/1/RAC_lb107re/vm.cfg.2 /OVS/1/RAC_lb201re/vm.cfg.1 <= Oracle Real Application Cluster 11.2.0.1 /OVS/1/RAC_lb201re/vm.cfg.2 /OVS/1/RAC_lb201ru/vm.cfg.1 <= Oracle Real Application Cluster 11.2.0.1 /OVS/1/RAC_lb201ru/vm.cfg.2 /OVS/1/RAC_lb202ru/vm.cfg.1 <= Oracle Real Application Cluster 11.2.0.2 /OVS/1/RAC_lb202ru/vm.cfg.2 /OVS/1/RAC_lb203ru/vm.cfg.1 <= Oracle Real Application Cluster 11.2.0.3 /OVS/1/RAC_lb203ru/vm.cfg.2 /OVS/2/l54x64a/vm.cfg <= Oracle Database シングル (Oracle Linux 5.4) /OVS/2/l54x64b/vm.cfg <= Oracle Database シングル (Oracle Linux 5.4) /OVS/2/l63x64a/vm.cfg <= Oracle Database シングル (Oracle Linux 6.3) /OVS/2/lb201rst/vm.cfg <= Oracle Restart 11.2.0.1 /OVS/2/lb202rst/vm.cfg <= Oracle Restart 11.2.0.2 /OVS/2/RAC_l54sdbx/vm.cfg.1 <= Oracle Real Application Cluster サンドボックス環境 /OVS/2/RAC_l54sdbx/vm.cfg.2 /OVS/2/RAC_l54sdbx/vm.cfg.3 /OVS/2/RAC_l54sdbx/vm.cfg.4 /OVS/2/RAC_la204ru/vm.cfg.1 <= Oracle Real Application Cluster 10.2.0.4 /OVS/2/RAC_la204ru/vm.cfg.2 /OVS/2/RAC_lb203on/vm.cfg.1 <= Oracle RAC One Node 11.2.0.3 /OVS/2/RAC_lb203on/vm.cfg.2 /OVS/2/RAC_lb203on/vm.cfg.3 /OVS/2/RAC_lb203on/vm.cfg.4 /OVS/3/AVDF_lc10f/vm.cfg.1 <= Oracle Database Firewall 12.1 /OVS/3/AVDF_lc10f/vm.cfg.2 /OVS/3/AVDF_lc10f/vm.cfg.3 /OVS/3/AVDF_lc10f/vm.cfg.4 /OVS/3/c58xxx1/vm.cfg /OVS/3/c58my1/vm.cfg <= MySQL /OVS/3/c58my2/vm.cfg <= MySQL /OVS/3/l54dg1/vm.cfg <= Oracle DataGuard /OVS/3/la205gr1/vm.cfg <= Oracle Enterprise Manager Grid Control 10.2.0.5 /OVS/3/la205gr2/vm.cfg /OVS/3/lc101cc1/vm.cfg <= Oracle Enterprise Manager Cloud Control 12.1.0.1 /OVS/3/lc102cc1/vm.cfg <= Oracle Enterprise Manager Cloud Control 12.1.0.2 /OVS/3/xxx_xxf342/vm.cfg.0 /OVS/3/xxx_xxf342/vm.cfg.1 /OVS/3/xxx_xxf342/vm.cfg.2
移行作業のなかで面倒なのは「VM構成ファイル vm.cfg に含まれる 環境依存情報の修正」する作業なので、 vm.cfgをテンプレート化し、環境依存情報をコマンド1つでinjectできるようにしています。具体的には、以下のようなテンプレートを作成しておき、環境固有の変数値でテンプレート展開して、vm.cfgを作成するようにしています。
[root@csov32s1 log]# cat /OVS/1/RAC_la205re/vm.cfg.IN.1 name = '${VMMODIFIER}${VMMAINNAME}${VMNUM}' uuid = '${UUID}' vcpus = 1 memory = 2048 disk = [ 'file:${VMROOT}/${VMMAINNAME}${VMNUM}_System.img,xvda,w', : 'file:${VMROOT}/\${VMMAINNAME}_10G_spare2.img,xvdy,w!', 'file:${VMROOT}/\${VMMAINNAME}_10G_spare3.img,xvdz,w!', ] vif = [ 'mac=xx:xx:xx:xx:${HEXMAC}:00,bridge=${BRIDGE_INTRA}', 'mac=xx:xx:xx:xx:${HEXMAC}:01,bridge=${BRIDGE_VMPRIV1}', 'mac=xx:xx:xx:xx:${HEXMAC}:02,bridge=${BRIDGE_VMPUB2}', 'mac=xx:xx:xx:xx:${HEXMAC}:03,bridge=${BRIDGE_VMPUB3}', 'mac=xx:xx:xx:xx:${HEXMAC}:04,bridge=${BRIDGE_VMPUB1}', ] vif_other_config = [] vfb = ['type=vnc, vncunused=0, vnclisten=0.0.0.0, vncdisplay=${VNCPORT},keymap=ja'] bootloader = '/usr/bin/pygrub' on_reboot = 'restart' on_poweroff = 'destroy' on_crash = 'restart' [root@csov32s1 log]# vmupdatecfg /OVS/1/RAC_la205re/vm.cfg.IN.1 [root@csov32s1 log]# cat /OVS/1/RAC_la205re/vm.cfg.1 name = 'VM066_la205re1' uuid = '6008a060-0b56-485b-beed-07b0b474689e' vcpus = 1 memory = 2048 disk = [ 'file:/OVS/1/RAC_la205re/la205re1_System.img,xvda,w', 'file:/OVS/1/RAC_la205re/la205re1_Swap.img,xvdb,w', :
このような作業が比較的短時間で、比較的ミスが少なくできるのは、コマンドラインによる操作とスクリプトによる省力化のおかげです。(やっぱり GUI は好きになれません)