Articles
DBA: Linux
Jakub Wartak著 低価格でありながら完全に機能する拡張されたOracle RACの実装を、仮想化環境で構築する方法について説明します。 このガイドに記載されている情報については、オラクルによる検証またはサポートはおこなわれていません。これらの情報は、ご自身の責任において、学習目的でのみご使用ください。 2008年10月更新 目次
このガイドは、Oracle ACEのJeffrey Hunterによるガイド『 Build Your Own Oracle RAC 11g Cluster on Oracle Enterprise Linux and iSCSI』から着想を得て、著者自身の許可を得たうえでそれを基盤に作成したものです。 LinuxでのOracle RACのインストールに疑問がある場合は、このガイドを一読し、ここでの前提条件となっているOracle RACに関する予備知識を事前に得ておくことを推奨します。
|
||||||||||||||||||||||||||||||||||||||||||
一般的に、Oracle Real Application Clusters(Oracle RAC)のデプロイメント・アーキテクチャでは、単一ノードまたは複数ノードの障害からの迅速なリカバリが可能です。 ただし通常のシナリオでは、Oracle RACのノードはすべて単一のデータセンターに配置されているため、データセンターの障害が致命的なものとなる傾向があります。 このようなシナリオで障害時リカバリを実現するためのソリューションとして、ローカルのデータセンターと、スタンバイ・システムが実行されているバックアップ用のデータセンター(通常、単一のOracleデータベースまたは別のOracle RACクラスタ)との間でOracle Data Guardを設定するという方法が挙げられます。
Oracle Data Guardを使用すれば、この問題を解決することができますが、この場合はスタンバイのシステムおよびアレイ全体がパッシブ・ノードになります。パッシブ・ノードでは、コンピューティング能力をトランザクションのために利用することができないため、結果としてこのソリューションは非常に高額なものとなってしまいます。 (スタンバイのOracle Data Guardシステムは、読取り専用の問合せで使用することができるだけでなく、Oracle Database 11gでOracle Active Data Guardを常時読取り専用モードで実行することも可能ですが、この構成におけるアプリケーションは、読取り専用のノードがあることを認識した処理である必要があります。)
ここで、(局部的な)障害時のリカバリを実現する別のソリューションがあります。これは、拡張RACと呼ばれています。 このアーキテクチャでは、一部のRACノードが"サイトAlpha(アルファ)"で機能し、残りのノードは"サイトBeta(ベータ)"で動きます。 この両方のサイトのノードがアクティブであるため、すべてのコンピューティング・リソースを完全に使用することが可能となります。 図1に示されているように、各サイトには、それぞれ固有のストレージ・エリア・ネットワーク(SAN)があります。両方のデータセンター(データセンターAおよびデータセンターB)のシステムは、同じ単一のOracle RACクラスタのメンバーであるため、インターコネクトを介したデータ交換のスピードは速くなければならず、もう一方のサイトのストレージへのアクセスも可能でなければなりません。 (つまり、データセンターAのノードRAC1は、データセンターBのSANアレイへの書込みをおこない、さらにデータセンターBのRAC2ノードとの通信もおこないます。)
このガイドでは、単一のx86-64ビットPC上でOracle VM 2.1の仮想化を使用して、低コストかつ完全機能であるOracle 拡張RACの構築を、学習のみを目的としておこないます。 (詳細なトポロジについては、図2を参照してください。) Oracle RACでは、読取りまたは書込みの際にインターコネクトでの待機時間とI/O待機時間の影響を受けやすいため、待機時間が主要な制約要素となります。そのため、ここではIPネットワークでLinuxのQoSを利用し、インターコネクトとストレージ用イーサネットのトラフィックに対する遅延時間を人為的に発生させます。
拡張RACを構築できれば、コストの削減も可能となりますが、さらに以下のいずれかの前提条件と一致している場合には、企業のアプリケーションの可用性の大幅な向上にもつながります。
また理論的には、拡張RACではストレージ・アレイが停止してもクラスタでリクエストの処理が停止することはないため、地球上でもっとも信頼性の高いストレージ・アレイを備える必要はありません。
このガイドに記載されている構成では、2つのOracle Enterprise Linux 5.1システム上で、Oracle Database 11g Release 1をRAC構成で実行します。 Oracle RACノードのストレージには、OpenFiler上で実行されている2つのiSCSIストレージ・サーバーを利用します。 また、この構成では、Oracle Automatic Storage Management(Oracle ASM)によって提供される機能や、Oracle Database 10g以降のホスト/データベースを基盤としたミラー化機能も使用します。
図2
理想的には、拡張RACを実装するには、より高いパフォーマンスを実現できる実際のハードウェアを使用するべきですが、これは研究およびトレーニングのみを目的としたアーキテクチャであるため、この程度の妥協は許容範囲内です。 Oracle VM Serverで必要となるのは単一のコンピュータのみですが、仮想化システムを管理するためのシンプルなWebコンソールであるOracle VM Managerをインストールするために、別のPCが必要となります。
推奨されるストレージとしては、執筆時点では、まだファイバ・チャネル・プロトコル(FCP)が有力ですが、Oracle Database 11gでは、Oracle Direct NFSなどのパフォーマンス拡張とあわせ、データファイル用NFS共有ストレージに対するサポートが導入されています。 このガイドでは、実行するインストールの性質から、実際のFCPのコンセプトを損なわないようにするためのストレージ・オプションとして、より簡単なiSCSIアプローチをそのまま使用します。 拡張RACのシナリオでは、データセンターAとデータセンターB以外の場所に、3番目の投票ディスクを配置して、完全なフォルト・トレラントを備えたアーキテクチャを実現する必要がある点に注意してください。
このガイドで説明するディスク・ミラー化の構成は、I/Oのマルチパス化や冗長なインターコネクトもないため、本番環境でのシナリオには適していません。 また、このガイドでは完全なOracle RAC 11g評価システムを正常にインストールするための詳細な手順を説明していますが、これはオラクルの公式ドキュメントの代わりとなるものではありません。 実行にあたっては、このガイド以外に以下のオラクルのドキュメントを参照し、Oracle RAC 11gの別の構成オプション、インストール、および管理について完全に理解しておいてください。
説明を始める前に、次の点について再度お断りしておきます。 このガイドは学習のみを目的としたもので、本番環境での配置についてはサポート対象ではなく、考慮もしていません。 また、このガイドの使用中に生じた問題について、Oracle Supportでは対応しません。
拡張RACを構築するには、次のソフトウェアをダウンロードする必要があります。詳細な手順については以下に示します。
この2つは無償の製品です。 登録後、 Select a Product Packで「 Oracle VM」を選択し、 Product architectureで「 x86 64 bit」を選択してから、「 Go」をクリックします。 「 Oracle VM 2.1 Media Pack」をマークして「 Continue」をクリックします。 画面に以下の2つが表示されます。
事前に用意しておいたダウンロード用のディレクトリに、上記2つのファイルをダウンロードします。 この2つの*.zipファイルを解凍すると、2つのISOファイルが表示されます。これらのファイルは、任意のCD書込みソフトウェアを使用してCDに記録することができます。
(ヒント:この2つのISOをワークステーションにダウンロードし、そのワークステーションにOracleVM-Manager-2.1.isoをインストールする場合は、OracleVM-Manager-2.1.isoをインストール目的でCDに記録する必要はありません。 Linuxで以下のコマンドを使用すると、/mnt/cdromにCDのループバック・マウントをおこなうことができます。)
mount -o loop,ro OracleVM-Manager-2.1.iso /mnt/cdrom"Oracle Enterprise Linux 5.1 Update 1 "Small" Template(PV_x86_64)
ここでインストール・メディアCDまたはDVDを使用してLinuxシステムを最初からインストールしない場合は、オラクル提供のVM Linuxテンプレートを使用します。 VM Linuxテンプレートは、実行可能なシステム全体のディスク・イメージが含まれたバイナリ・ファイルです。 Oracle VMにより提供される環境は一般的なものであるため、ドライバを確実に揃えるためにシステムごとにインストールを実行する必要はなく、テンプレートから各Linuxインスタンスのクローンを作成し、それを起動することができます。 オラクルでは、Oracle Database用に事前構成されたテンプレートを提供しています。
サインインをして契約に同意したあと、 Product Packピックリストから「 Oracle VM Templates」を、 Platformピックリストから「 x86_64」を選択し、「Go」をクリックします。 「 Oracle VM Templates for Oracle Enterprise Linux 5 Media Pack for x86_64(64 bit)」リンクをクリックして、「 Oracle Enterprise Linux 5 Update 2 template - PV Small x86_64(64 bit)」のダウンロードを選択します。
準仮想化(PV)システムとハードウェア仮想化(HVM)システムとのおもな違いは、LinuxのカーネルとOracle VM Serverのカーネル(Xenハイパーバイザ)間のインタラクションの性質にあります。 HVMシステムは、Xenの機能を活用するための特別なフックが搭載されていない標準のx86またはx86_64システムで、Xenが組み込まれていない標準のPC上で実行できます。 一方、PVシステムは、Xen上で実行されているという事実を認識するもので、ハードウェアとやりとりをおこなう代わりに直接Xenと通信をおこなうため、HVMを使用する場合のように実際のハードウェアをエミュレートする必要はありません。
Oracle Database 11gおよびOracle Clusterware for Linux x86 64-bitダウンロードの必要があるファイルは、次の2つです。
ダウンロード・ページを開いたら、openfiler-2.2-x86.img.gz(~160MB)を探してください。 ここではバージョン2.2を使用しますが、バージョン2.3もチェックすることをお勧めします。バージョン2.3を使用すると、iSCSIスナップショットのLUNマッピングやiSCSIの動的ボリュームサイズ変更などの役立つ機能が追加されます(ただし、このガイドでは使用テストをおこなっていません)。
Oracle VM ServerのブータブルCDを作成したら、スワッピングなしで複数のLinuxインスタンスを処理できるだけのCPUとRAMを備えたPCに、作成したCDを挿入します。 以下の手順に従ってOracle VMをインストールします。
上記の設定を終えたら、インストール・プロセスが終了するのを待ちます。 終了すると、CDトレイが自動的にイジェクトされます。 リブート後、Oracle VM Serverがインストールされていることを確認できます。 Oracle VM Serverには、以下の場所からrootユーザーとしてログインできます。
|
[root@quadovm ~]# xm info | grep mem |
Oracle VM Managerのインストールは非常に簡単です。 Oracle VM ManagerがマウントされているISO CDを使用して、インストーラ・プログラムを起動します。
| [root@xeno ~]# cd /mnt/cdrom [root@xeno cdrom]# sh runInstaller.sh [..] Welcome to Oracle VM Manager Please enter the choice: [1|2]
|
ここでは"1"を選択して、インストールを続行します。 インストール先のワークステーションに、Oracle VM Manager用として約2GBの空き領域があることを確認してください。 インストールは、以下のように非常に単純です。
|
上記の"localuser"を、メール配信用のローカルのユーザー名に置き換えてください。 指示に従って、http://127.0.0.1:8888/OVSに移動し、Oracle VM Managerにアクセスします。 リブート後は、/etc/init.d/oracle-xeスクリプトのあとに、/etc/init.d/oc4jスクリプトを使用することで、Oracle VM Managerを開始および停止することができます。
まず最初に、1つ以上の物理サーバーが含まれる論理的な独立領域である"スプール"を新規に作成し、そのマスターとしてOracle VM Server(quadvm)をOracle VM Managerで登録する必要があります。
この処理をおこなうため、「 Servers Pools」タブから「 Create Server Pool」に移動して、quadvm Oracle VM Serverについての情報を入力し、スプールにspool1などのように分かりやすい名前をつけます(quadvm Oracle VM ServerをPool Master、Virtual Machine Server、およびUtility Masterとして設定します)。
図3
次の画面で、「 admin」ユーザーを選択します。
図4
画面の表示内容すべてをチェックし、新規スプールが作成されていることを確認します。
図5
図6
前述のとおり、テンプレート・イメージのコピーをおこなうと、仮想化によるシステムのクローン作成が可能となります。 以下は、その方法です。
テンプレートのアップロードまず、Oracle VMテンプレートとOpenFilerを、Oracle VM Serverに転送する必要があります。
[vnull@xeno OracleVM]$
scp -r OVM_EL5U1_X86_64_PVM_4GB root@10.99.1.2:/root/
root@10.99.1.2's password:
vm.cfg 100% 318 0.3KB/s 00:00
system.img 100% 6144MB 8.8MB/s 11:41
README 100% 158 0.2KB/s 00:00
[vnull@xeno OracleVM]$ cd ~/ISO
[vnull@xeno ISO]$
scp openfiler-2.2-x86_64.img.gz root@10.99.1.2:/root
root@10.99.1.2's password:
openfiler-2.2-x86_64.img.gz 100% 175MB 10.9MB/s 00:16
[vnull@xeno ISO]$
|
次に、Oracle VMテンプレートを、Oracle VM Serverのサブエージェントによる自動検出が可能な特別なディレクトリに移動します。
[root@quadovm ~]#
ls -al OVM_EL5U1_X86_64_PVM_4GB/
total 6297632
drwxr-xr-x 2 root root 4096 May 6 14:04 .
drwxr-x--- 4 root root 4096 May 6 13:52 ..
-rw-r--r-- 1 root root 158 May 6 14:04 README
-rwxr-xr-x 1 root root 6442450945 May 6 14:04 system.img
-rw-r--r-- 1 root root 318 May 6 13:52 vm.cfg
[root@quadovm ~]#
mv OVM_EL5U1_X86_64_PVM_4GB /OVS/seed_pool/
[root@quadovm ~]#
|
「 Resources」へ移動し、「 Import」をクリックします。 「 Internal Virtual Machine Template」を選択します。
図7
テンプレートの詳細を記述します(テンプレート名OVM_EL5U1_X86_64_PVM_4GBが自動検出されます。検出されない場合は、一度ログアウトしてから再度ログインしてください)。
図8
インポート・アクションを確認します。
図9
テンプレートが表示されています。ここでは、表示されているテンプレートを選択し、「 Approve」ボタンをクリックします。
図10
一度ログアウトしてログインしなおしてから、「 Virtual Machines」→「 Create Virtual Machine」の順に移動し、「 Create Virtual Machine based on Virtual Machine template」を選択します。
図11
「 spool1」サーバー・プールを選択します。
図12
Sourceタブで、新しく追加したテンプレートを選択します(このテンプレートのみが表示されます)。
図13
Virtual Machine Infoタブで、任意の仮想マシン名(ここではrac1)とパスワードを入力し、さらにインタフェースを1つだけ入力します。
図14
サマリー画面の内容すべてを再確認し、「 Confirm」をクリックします。
図15
メインのVirtual Machines画面に、新しく作成したrac1仮想マシンがステータス Creatingで表示されます。 このとき、Oracle VMにより新規システムへのテンプレートのコピーがおこなわれています。
図16
上記のステップを"rac2"ノードに対して繰り返します。 この段階で、Oracle RACのインストールが可能なLinuxシステムが2つあることになります。 次に、これらのシステムをカスタマイズし、Oracleソフトウェアのインストール用としてより多くのメモリと領域が割り当てられるように再設定する必要があります。
「 Virtual Machines」に移動し、「 rac1」または「 rac2」をクリックします。 General Informationで、「 Edit」に移動します。 RAMを、1,024MBから2,048MBに変更します。
図17
「 Virtual Disk」タブに移動し、「 Create New Virtual Disk」をクリックします。 ここで、システム1への追加ディスクに必要な領域を指定します。 以下の値を使用します。
Virtual Disk Name:oracle_software
Virtual Disk Size(MB):8,192
作成が完了すると、 仮想ディスクのステータス画面に、8GBのディスクが作成されたことが表示されます。
図18
次に、iSCSIストレージ機器(OpenFiler)を構築します。 このステップは、Oracle VM Managerを使用せずに手動で実行する必要があります。OpenFilersの管理は、Oracle VM Managerのコンソールではおこないません。
[root@quadovm ~]#
cd /OVS/running_pool/
[root@quadovm running_pool]#
ls
132_rac1 134_rac2
[root@quadovm running_pool]#
mkdir 60_iscsi1 62_iscsi2
[root@quadovm running_pool]#
gzip -d /root/openfiler-2.2-x86_64.img.gz
[root@quadovm running_pool]#
cp /root/openfiler-2.2-x86_64.img 60_iscsi1/
[root@quadovm running_pool]#
cp /root/openfiler-2.2-x86_64.img 62_iscsi2/
|
これまで見てきたとおり、OpenFilerのXen製品は単一のイメージ・ファイルとしてダウンロードできますが、Xenで仮想マシンをブートするにはカーネルおよびinitrdイメージが必要となります。そして、このカーネルとinitrdイメージはダウンロードするイメージ・ファイル内にあります。 卵が先か鶏が先かといった様相となっているこの問題を解決するには、提供されているイメージからinitrdとカーネルのイメージを抽出し、dom0において、そのうちの最初の512バイト分(MBR – マスター・ブート・レコード)をスキップする必要があります。 そのあと、内部ファイルシステムのループバック・マウントをおこない、必要な部分をコピーします。
[root@quadovm running_pool]#
losetup -o 512 /dev/loop4 /root/openfiler-2.2-x86_64.img
[root@quadovm running_pool]#
mount -o ro /dev/loop4 /mnt
[root@quadovm running_pool]#
cp /mnt/boot/initrd* /mnt/boot/vmlinuz* 60_iscsi1/
[root@quadovm running_pool]#
cp /mnt/boot/initrd* /mnt/boot/vmlinuz* 62_iscsi2/
[root@quadovm running_pool]#
umount /mnt
[root@quadovm running_pool]#
losetup -d /dev/loop4
|
システム、カーネル、およびinitrdのイメージが準備できたら、今度はiSCSI LUNを保存するための専用ディスクが必要となります。 これは、単にゼロで埋めた大規模なファイルを作成することで実行できます。このファイルは、そのあと実際のディスクとしてOpenFiler仮想マシンで使用されます。
[root@quadovm running_pool]#
dd if=/dev/zero of=60_iscsi1/volume1.img bs=1M count=12000
12000+0 records in
12000+0 records out
12582912000 bytes (13 GB) copied, 83.3836 seconds, 151 MB/s
[root@quadovm running_pool]#
[root@quadovm running_pool]#
dd if=/dev/zero of=62_iscsi2/volume1.img bs=1M count=12000
12000+0 records in
12000+0 records out
12582912000 bytes (13 GB) copied, 88.5499 seconds, 142 MB/s
[root@quadovm running_pool]#
|
残すステップはあと1つ、すなわちXen構成ファイルの作成です。 (2番目のSSHセッションを使用して、以下のステップを2回実行します。その際、必要に応じて60_iscsi1を62_iscsi2に置き換えてください。)
[root@quadovm running_pool]#
cd 60_iscsi1
[root@quadovm 60_iscsi1]#
cat > vm.cfg
name = "iscsi1"
kernel = "/OVS/running_pool/60_iscsi1/vmlinuz-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU"
ramdisk = "/OVS/running_pool/60_iscsi1/initrd-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU.img"
disk = [
'tap:aio:/OVS/running_pool/60_iscsi1/openfiler-2.2-x86_64.img,xvda,w',
'tap:aio:/OVS/running_pool/60_iscsi1/volume1.img,xvdb,w'
]
root = "/dev/xvda1 ro"
vif = ['bridge=xenbr0','bridge=sanbr0']
memory = 768
<CTRL+D>
[root@quadovm 60_iscsi1]#
xm create -c vm.cfg
Using config file "./vm.cfg".
Started domain iscsi1
Bootdata ok (command line is root=/dev/xvda1 ro )
Linux version 2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU
(conary.rpath.com@rpl:1-xen) (gcc version 3.4.4) #1 SMP Wed Dec 6 02:05:30 EST 2006
[..]
Registering block device major 202
xvda: xvda1
xvdb: unknown partition table
[..]
Welcome to Openfiler NAS/SAN Appliance 2.2
Press 'I' to enter interactive startup.
[..many errors please ignore them..]
|
上記のスクリプトから、いくつかの点を見てとることができます。
オラクルが提供しているXenイメージは事前に構成されていないため、このステップは各自で実行する必要があります。 iscsi1にrootとしてログインしてから、新規OpenFiler iscsi1 VMテンプレートのネットワークを再構成します。 まず、/etc/hosts、/etc/resolv.conf、およびsysconfigイーサネット構成ファイルの設定をおこないます。 最後に、仮想マシンを再起動することなく、すべてのネットワークを再起動して新規の設定を有効にします。
Openfiler NAS/SAN Appliance
Powered by rPath Linux
To administer this appliance, please use a web browser
from another system to navigate to
|
インタフェースのIPアドレスを検証します。
[root@localhost sysconfig]#
ip a ls
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:14:53:73 brd ff:ff:ff:ff:ff:ff
inet 10.99.1.101/24 brd 10.99.1.255 scope global eth0
inet6 fe80::216:3eff:fe14:5373/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:68:4f:c7 brd ff:ff:ff:ff:ff:ff
inet 10.98.1.101/24 brd 10.98.1.255 scope global eth1
inet6 fe80::216:3eff:fe68:4fc7/64 scope link
valid_lft forever preferred_lft forever
4: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
[root@localhost sysconfig]#
[root@localhost sysconfig]#
ip ro ls | grep ^default
default via 10.99.1.1 dev eth0
[root@localhost sysconfig]#
[root@localhost sysconfig]#
ping -c 1 iscsi1
PING iscsi1 (10.99.1.101) 56(84) bytes of data.
64 bytes from iscsi1 (10.99.1.101): icmp_seq=0 ttl=64 time=0.019 ms
|
iscsi1にログインしなおし、混乱を避けるためにコマンド・プロンプトを変更して新しいホスト名が表示されるようにします。
次に、OpenFilerにはrootパスワード・セットがないため、root用のパスワードを変更する必要があります。
[root@iscsi1 ~]#
passwd
Changing password for user root.
New UNIX password:
BAD PASSWORD: it's WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@iscsi1 ~]#
|
iscsi2 OpenFilerテンプレートで、別のSSHセッションを使用して同じ処理をおこないます。rootとしてログインし、iscsi1と同じ手順を実行します。
[root@quadovm ~]#
cd /OVS/running_pool/62_iscsi2/
[root@quadovm 62_iscsi2]#
cat > vm.cfg
name = "iscsi2"
kernel = "/OVS/running_pool/62_iscsi2/vmlinuz-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU"
ramdisk = "/OVS/running_pool/62_iscsi2/initrd-2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU.img"
disk = [
'tap:aio:/OVS/running_pool/62_iscsi2/openfiler-2.2-x86_64.img,xvda,w',
'tap:aio:/OVS/running_pool/62_iscsi2/volume1.img,xvdb,w'
]
root = "/dev/xvda1 ro"
vif = ['bridge=xenbr0','bridge=sanbr0']
<CTRL+D>
[root@quadovm 62_iscsi2]#
[root@quadovm 62_iscsi2]#
xm create -c vm.cfg
Using config file "./vm.cfg".
Started domain iscsi2
Bootdata ok (command line is root=/dev/xvda1 ro )
Linux version 2.6.16.29-0.11.smp.gcc3.4.x86_64.xen.domU
(conary.rpath.com@rpl:1-xen) (gcc version 3.4.4) #1 SMP Wed Dec 6 02:05:30 EST 2006
[..]
INIT: version 2.85 booting
Welcome to Openfiler NAS/SAN Appliance 2.2
Press 'I' to enter interactive startup.
[..]
|
IPネットワークの検証をおこないます。
[root@localhost sysconfig]#
ip a ls
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:3c:bd:4a brd ff:ff:ff:ff:ff:ff
inet 10.99.1.102/24 brd 10.99.1.255 scope global eth0
inet6 fe80::216:3eff:fe3c:bd4a/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:15:b7:51 brd ff:ff:ff:ff:ff:ff
inet 10.98.1.102/24 brd 10.98.1.255 scope global eth1
inet6 fe80::216:3eff:fe15:b751/64 scope link
valid_lft forever preferred_lft forever
4: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
[root@localhost sysconfig]#
ip ro ls | grep ^def
default via 10.99.1.1 dev eth0
[root@localhost sysconfig]#
passwd
Changing password for user root.
New UNIX password:
BAD PASSWORD: it's WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
|
余計な混乱を避けるため、ログインしなおします。 これで、ネットワーク・ブラウザで以下をポイントすることができます。
注:各iSCSIストレージ機器に対し、このステップを2回ずつ実行してください。
まず、ライセンスへの同意が求められます。そのあと、以下の資格証明を使用してログインすることができます。
ヒント:OpenFilerのrootパスワードは、Webインタフェースのパスワードと同じものではありませんが、管理上の負担を軽減するために、同一のパスワードを使用することもできます。
図19
「 Volumes」タブから「 Physical Storage Mgmt.」に移動し、「 /dev/xvdb」(手動で作成した、2番目に表示されている12GBのデータファイル)をクリックします。
図20
「 Volume Group Mgmt.」に移動し、タイプ"Physical volume"(LVM用)で大規模なx86パーティションを1つ作成します。
図21
再度「 Volume Group Mgmt.」に移動し、/dev/xvdb1物理ボリューム(LVMの用語では"PV")のみが含まれた"racdata1"または"racdata2"という名前のボリューム・グループを作成します。
図22
作成後、1つのボリューム・グループが表示されます。 「 Create New Volumes」タブに移動します。
図23
ここで、以下の3つのiSCSI LUNを作成する必要があります。
図24
上記のLUNの作成後、"racdata1"または"racdata2"という名前のストレージ割当て用のボリューム・グループを示すグラフを確認することができます。
図25
「 Services」→「 Enable/Disable」の順に移動し、 iSCSI targetを有効化します。
図26
「 General」→「 Local Networks」の順に移動し、 Network Access Configurationで"san1"を作成して、10.98.1.0/24ネットワーク(ここで使用しているSANネットワーク)からのiSCSI接続が可能となるように設定します。
図27
iSCSI LUNに切り替えて(「 Volumes」→「 List of existing volumes」)、すべてのiSCSI LUNを編集します。 "iSCSI host access"という名前のセクションで、該当のiSCSI LUNに対してsan1ネットワークからのアクセスが可能であることを確認します。 「 update」をクリックして保存します。
これ以後は、2つのiSCSIシステムで、Oracle RACで使用可能なLUNのエクスポートをおこなうことができます。
拡張RACのためのRAC仮想マシンの再構成ここではeth0以外には物理的なイーサネット・アダプタがなく、Oracle VMでは物理インタフェースなしでブリッジを作成することはないため、物理的なイーサネット・アダプタのエミュレートを手動でおこなう必要があります。 具体的には、iSCSIトラフィック用のSANネットワークと、Oracle RACのキャッシュ・フュージョン用インターコネクト・ネットワークを追加します。
イーサネット・ブリッジを追加する場合は、下に示されている行を/etc/rc.d/rc.localに追加します。 (Oracle VMを再起動したくない場合は、以下のコマンドを手動で実行する必要があります。)
[root@quadovm ~]
# cat >> /etc/rc.d/rc.local
brctl addbr sanbr0 brctl addbr ibr0 ip link set dev sanbr0 up ip link set dev ibr0 up
<CTRL+D>
[root@quadovm ~]#
|
次に、パフォーマンス上の理由から、SANブリッジとインターコネクト・ブリッジで常にMTUが9000となるように設定する必要があります。 (Xenによりnetfrontおよびnetbackの2つのネットワーク仮想化ドライバが同期されるまでは、MTUの設定を延期する必要があるため、これは厄介な作業です。)
|
次に、viでファイル/etc/xen/scripts/vif-bridgeを編集し、"success"行の直後に太字で表示されている行を追加します。
log debug "Successful vif-bridge $command for $vif, bridge $bridge."
if [ "$command" = "online" ]
then
success
(/root/fixbrmtu.sh "$bridge") &
fi
|
Oracle VMでrootとしてログオンした状態で、/OVS/running_pool/に切り替えてrac1およびrac2のvm.cfgを編集し、vif行を以下のように変更します。
vif = ['bridge=xenbr0', 'bridge=ibr0', 'bridge=sanbr0'] |
要約すると、RAC仮想マシンのブリッジへの接続は以下のようになります。
注:追加のインタフェースは、Oracle VM Managerでは表示されません。
次に、rac1およびrac2の仮想マシンを起動します。
[root@quadovm 134_rac2]#
xm create vm.cfg
Using config file "./vm.cfg".
Started domain 134_rac2
[root@quadovm 134_rac2]#
|
実行している仮想システムを確認します。すべて問題がなければ、以下のように表示されます。
[root@quadovm ~]#
xm list
Name ID Mem VCPUs State Time(s)
132_rac1 7 2048 1 -b---- 12.8
134_rac2 8 2048 1 r----- 7.2
Domain-0 0 512 4 r----- 287.6
iscsi1 5 768 1 -b---- 4.8
iscsi2 6 768 1 -b---- 4.8
[root@quadovm ~]#
|
デフォルトでは、Oracle VMテンプレートは、以下の資格証明で設定されています。
rac1ノードを再構成するために、ローカルのコンソールを使用して接続します。
[root@quadovm ~]#
xm console 132_rac1
rtc: IRQ 8 is not free.
i8042.c: No controller found.
|
ネットワーク構成ユーティリティを実行します。
[root@localhost ~]#
export TERM=linux
[root@localhost ~]#
system-config-network-tui
|
system-config-network-tuiisを使用すると、簡単にネットワークを設定できます。 パブリック・インタフェース(およびOracle VM外で表示可能なIPネットワークによる管理インタフェース)を設定するには、"eth0"を選択し、IPアドレス、ネットマスク、ゲートウェイなどの設定をおこないます。
図28
図29
"eth0"の設定が正常に完了したら、次に"eth1"(インターコネクト)の設定をおこなうことができます。 「 <New device>」を選択してから「 Ethernet」を選択し、使用するIPネットワークを指定すると、新規インタフェースを作成できます。 eth2(SAN)に対しても、このステップを繰り返します。
図30
図31
図32
終了したら、DNSリゾルバ、ホスト名、およびMTU変更の設定をおこなってネットワーク構成を完了します。
[root@localhost ~]#
echo 'nameserver 10.99.1.1' > /etc/resolv.conf
[root@localhost ~]#
cat > /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rac1
<CTRL+D>
[root@localhost ~]#
echo “MTU=9000” >> /etc/sysconfig/network-scripts/ifcfg-eth1
[root@localhost ~]#
echo “MTU=9000” >> /etc/sysconfig/network-scripts/ifcfg-eth2
[root@localhost ~]#
service network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
Bringing up interface eth1: [ OK ]
Bringing up interface eth2: [ OK ]
[root@localhost ~]#
|
以下を/etc/hostsファイルとして保存します。
127.0.0.1 localhost.localdomain localhost
|
使用しているシステムに合わせたタイムゾーンを設定します(この例ではポーランドのタイムゾーンを使用)。
[root@localhost ~]#
ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
|
一度ログアウトしてからrac1に再ログインすると、シェルが"root@rac1"を示します。 ここで、ゲートウェイに対する接続性についても確認します。 また、適切なIPアドレスを使用してrac2で同じ操作を実行してください。
デフォルトでは、Oracle VMテンプレートには、iSCSIイニシエータ・ユーティリティのユーザースペース用の部分は用意されていません。 このユーザースペースは、Oracle Enterprise Linux ISOイメージから取得することもできますが、このイメージは数ギガバイトあります。取得プロセスを迅速化したい場合は、 こちらからワークステーションにダウンロードしてください。
次に、iSCSIイニシエータのコピーを、両方のRACノードに(ワークステーションから)アップロードします。
[vnull@xeno RPMS_el51]$
scp iscsi-initiator-utils*.rpm root@10.99.1.91:.
root@10.99.1.91's password:
iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm 100% 528KB 528.2KB/s 00:00
[vnull@xeno RPMS_el51]$
scp iscsi-initiator-utils*.rpm root@10.99.1.92:.
root@10.99.1.92's password:
iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm 100% 528KB 528.2KB/s 00:00
[vnull@xeno RPMS_el51]$
|
次に、iSCSIイニシエータをインストールし、基本的な構成で設定をおこなって使用できるようにします(設定は各RACノードで実行し、rac2の設定時には、InitiatorAliasを変更します)。
[root@rac1 ~]#
rpm -Uhv iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm
Preparing... ########################################### [100%]
1:iscsi-initiator-utils ########################################### [100%]
[root@rac1 ~]#
rm iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm
rm: remove regular file `iscsi-initiator-utils-6.2.0.865-0.8.el5.x86_64.rpm'?
y
[root@rac1 ~]#
[root@rac1 ~]#
echo "InitiatorAlias=rac1" >> /etc/iscsi/initiatorname.iscsi
[root@rac1 ~]#
service iscsid start
Turning off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
[root@rac1 ~]#
chkconfig iscsid on
[root@rac1 ~]#
chkconfig iscsi on
|
各RACノードで、不必要なサービスを無効化します。
[root@rac1 ~]#
chkconfig --level 0123456 bluetooth off
[root@rac1 ~]#
chkconfig --level 0123456 cups off
[root@rac1 ~]#
chkconfig --level 0123456 ip6tables off
[root@rac1 ~]#
chkconfig --level 0123456 iptables off
[root@rac1 ~]#
chkconfig --level 0123456 o2cb off
[root@rac1 ~]#
chkconfig --level 0123456 o2cb off
[root@rac1 ~]#
chkconfig --level 0123456 ocfs2 off
[root@rac1 ~]#
chkconfig --level 0123456 sendmail off
[root@rac1 ~]#
reboot
|
Oracleソフトウェアのマウント・ポイント(/u01)に対し、ローカルの追加ハードディスク上にパーティションを用意します(両方のRACノードで実行してください)。
[root@rac1 ~]#
fdisk /dev/hdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
|
動的デバイス管理を設定し、iSCSI SANに適切なネーミングを作成します。これには、まず最初に各RACノードで以下を実行し、/etc/udev/rules.d/55-openiscsi.rulesfileを作成します。
[root@rac1 ~]#
cat > /etc/udev/rules.d/55-openiscsi.rules
# /etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",
SYMLINK+="iscsi/%c{1}/lun%c{2}/part%n", OWNER="oracle", MODE="0640", GROUP="disk"
<CTRL+D>
[root@rac1 ~]#
|
udevdにより、実際に存在するデバイス用のファイルのみが含まれた動的なデバイス・ディレクトリが作成されます。 udevdは、/devディレクトリのデバイス・ノード・ファイルの作成または削除をおこなうもので、システムに新しくデバイスがプラグインされたときにカーネルからueventを受け取ることにより動作します。 各イベントでは、ルール・ファイルが新規デバイスのプロパティと照合されます。 照合済みのルール・ファイルに基づいて、シンボリック・リンクの作成や、所有権およびアクセス権限の変更、外部プログラムの起動などを実行することができます。
以下を実行することにより作成されたiscsidev.shスクリプトが、このルール・ファイルによって新規SCSIデバイスごとに起動されます。
[root@rac2 ~]#
mkdir -p /etc/udev/scripts
[root@rac2 ~]#
cat > /etc/udev/scripts/iscsidev.sh
#!/bin/sh
#iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
LUN=`echo ${BUS} | cut -d":" -f4`
file="/sys/class/scsi_host/host${HOST}/device/session*/iscsi_session*/targetname"
target_name=`echo $(cat ${file}) | cut -d":" -f2`
|
このスクリプトにより、渡されたSCSIデバイスが本当にiSCSIであるかどうかが判断され、それについての情報がudevに返されます。 iSCSIイニシエータの構成が完了すると、iSCSIターゲットの検出を実行してストレージ・アレイに接続することができます(この手順は、各RACノードで実行してください)。
[root@rac1 ~]#
iscsiadm -m discovery -t sendtargets -p 10.98.1.101
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.asm1
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.ocr
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.voting
[root@rac1 ~]#
iscsiadm -m discovery -t sendtargets -p 10.98.1.102
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.asm1
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.ocr
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.voting
[root@rac1 ~]#
iscsiadm -m discovery -l
10.98.1.101:3260 via sendtargets
10.98.1.102:3260 via sendtargets
[root@rac2 ~]#
iscsiadm -m node | sort
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.asm1
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.ocr
10.98.1.101:3260,1 iqn.2006-01.com.openfiler:racdata1.voting
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.asm1
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.ocr
10.98.1.102:3260,1 iqn.2006-01.com.openfiler:racdata2.voting
[root@rac1 ~]#
|
次に、両方のRACノードで、ストレージにログインします。
[root@rac1 ~]#
iscsiadm -m node -L all
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.asm1, portal: 10.98.1.102,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.ocr, portal: 10.98.1.102,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.voting, portal: 10.98.1.101,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.ocr, portal: 10.98.1.101,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata1.asm1, portal: 10.98.1.101,3260]
Login session [iface: default, target: iqn.2006-01.com.openfiler:racdata2.voting, portal: 10.98.1.102,3260]
[root@rac1 ~]#
|
次に、iSCSI LUNのパーティションを作成する必要があります。 ここでは、検出されたすべてのiSCSIデバイスで、LUNごとに大規模なパーティションを1つ作成します。( 警告:これは、きわめて危険性の高いスクリプトです。実行すると、すべてのiSCSI LUNのパーティション表が消去されますので注意してください。)
以下のスクリプトを保存します。
#!/bin/sh
[ -d /dev/iscsi ] || exit 100
for LUN in `find /dev/iscsi -type l`; do
echo $LUN
dd if=/dev/zero of=$LUN bs=512 count=1
echo -en "0,\n;\n;\n;\n" | sfdisk -q $LUN
done
|
このスクリプトを実行可能ファイルに変更したあと、実行します(1つのノードだけでおこなってください)。
[root@rac2 ~]#
chmod 700 partit.sh
[root@rac2 ~]#
./partit.sh
[..lots of partitioning output..]
|
1番目のノードで、rac2で実行された変更を検出する必要があります。
[root@rac1 ~]# partprobe |
パーティションの検証は、あとで fdisk -lを使用して実行できます。
iSCSIのチューニング最適なパフォーマンスを確保するためには、iSCSIストレージのチューニングが必要となります。 iSCSIプロトコルはTCPに基づいているため、この操作では、おもにTCP/IPスタック・チューニングをおこなうこととなります。 OpenFiler(iscsi1およびiscsi2)で、/etc/init.d/iscsi-targetを編集して、MEM_SIZE変数を1073741824に設定します。これにより、iscsi1およびiscsi2におけるiSCSIターゲットの起動前に、TCPネットワークのバッファが適切に設定されます。
次に、古い/etc/ietd.confを/etc/ietd.conf.oldにバックアップしてから、以下を追加します。
MaxConnections 1 InitialR2T No ImmediateData Yes MaxRecvDataSegmentLength 16776192 MaxXmitDataSegmentLength 16776192 MaxBurstLength 16776192 FirstBurstLength 16776192 MaxOutstandingR2T 16 Wthreads 16 DataDigest None HeaderDigest None |
変更後、iscsi1とiscsi2をリブートします。
注:このファイルは、新規iSCSI LUNの追加、再構成、または削除を実行するたびに再生成されます。
次に、優れたiSCSIパフォーマンスを得られるように、RACノードを再構成する必要があります。 rac1ノードとrac2ノードで/etc/sysctl.confを編集し、以下のパラメータを適切な値に変更します。
net.core.rmem_max = 1073741824 net.core.wmem_max = 1073741824 net.ipv4.tcp_rmem = 1048576 16777216 1073741824 net.ipv4.tcp_wmem = 1048576 16770216 1073741824 net.ipv4.tcp_mem = 1048576 16770216 1073741824 |
/etc/iscsi/iscsid.conf(iSCSIイニシエータの構成)を、両方のRACノードで変更し、最後にリブートして変更を有効化します(iSCSIクライアントを再起動し、 sysctl -pを実行することもできます)。
[root@rac2 ~]#
cat > /etc/iscsi/iscsid.conf
node.startup = automatic
node.session.timeo.replacement_timeout = 120
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval = 10
node.conn[0].timeo.noop_out_timeout = 15
node.session.initial_login_retry_max = 4
node.session.cmds_max = 128
node.session.queue_depth = 128
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 16776192
node.session.iscsi.MaxBurstLength = 16776192
# the default is 131072
node.conn[0].iscsi.MaxRecvDataSegmentLength = 16776192
# the default is 32768
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 16776192
node.conn[0].iscsi.HeaderDigest = None
node.session.iscsi.FastAbort = No
<CTRL+D>
[root@rac2 ~]#
reboot
|
注:今回は、このステップとこの前のステップでOpenFilerに対しておこなった変更の結果、raw iSCSIの順次書込みにおいて最高のパフォーマンスを得ることができました(ここでは、ddコマンドで1MBのブロック・サイズを使用してiSCSI LUN上に直接書込み、テストをおこないました)。 実際に得られるパフォーマンスは、システム(使用しているハードウェア、ソフトウェア・バージョンやそのほかの要素)によって異なる可能性があります。