[VM, Database] Deploying Oracle RAC DB 11gR2 on LDoms Virtualization

はじめに

このエントリは、Sun CMT サーバー(ZFS使用)上のLogical Domain(LDom)に、Solaris 10をインストールし、Oracle database 11gR2 (11.2.0.2)のReal Application Cluster (RAC)をインストール、構成する手順をまとめたものです。LDomをご存じない方は、 "Beginners Guide to Oracle VM Server for SPARC: Understanding and Deploying Logical Domains" というドキュメントをご覧下さい。

なお、他に以下の情報を参考にしました。
  1. Oracle Real Application Clusters
    http://www.oracle.com/technetwork/database/clustering/overview/index.html
  2. Oracle Database Online Documentation for 11gR2
    http://www.oracle.com/pls/db112/portal.portal_db?selected=11&frame=#solaris_installation_guides
  3. Supported Virtualization and Partitioning Technologies for Oracle Database and RAC Product Releases
    http://www.oracle.com/technetwork/database/virtualizationmatrix-172995.html 

目標

仮想化環境としてLogical Domainsを使い、Solaris 10 CMT Server上でOracle RAC DB 11gR2 (11.2.0.2) をインストール、構成します。以下のように2ノードのRACをセットアップします。
  1. 2個のT2000サーバー
  2. 1個のSE3320 SCSI ディスクアレイ(T2000が使用。 Oracle ASM でストレージを管理)

準備

  1. クラスタ"SCAN" アドレスを取得します (Single Client Access Name (SCAN)).
    • nslookup opnrac01-cluster-scan の結果、クラスタリスナーと同一のサブネット上に少なくとも3個のIPアドレスがラウンドロビンで検索できること。
      例) 10.45.74.6, 10.45.74.7, 10.45.74.8
    • このシナリオで、GNSが構成されていないこと
  2. 物理ホスト、LDomホストのホスト名とIPアドレス、Virtual IP、プライベートIPアドレスを取得します。
物理ホストIPLDomホストIPVirtual IP (VIP)クラスタ Private IP
10.35.74.2410.45.74.1410.45.74.1010.10.10.10
10.35.74.2510.45.74.1510.45.74.1110.10.10.11

T2000
ネットワーク構成
IPアドレスの割り当て利用サブネット
e1000g0Server Host IPControl DomainLAN
e1000g1LDom Host IPGuest DomainSame as Cluster SCAN, VIP on LAN
e1000g2Cluster Private IPGuest DomainPrivate
e1000g3TBDTBD

[注意]
  • 上記のIPアドレスは架空のアドレスです
  • ストレージアレイの構成はこの資料の範囲外です
  • T2000サーバの構成はこの資料の範囲外です

手順

LDomのコントロールドメインを構成する
"Beginners Guide to Oracle VM Server for SPARC: Understanding and Deploying Logical Domains" の31~41ページの手順に従って、LDomのコントロールドメインを構成します。

LDomはT2000サーバーに構成されていることを確認しましょう。
# ldm -V

Logical Domain Manager (v 1.2)
        Hypervisor control protocol v 1.3
        Using Hypervisor MD v 1.1

System PROM:
        Hypervisor      v. 1.7.3.       @(#)Hypervisor 1.7.3.c 2010/07/09 15:14
        OpenBoot        v. 4.30.4.      @(#)OBP 4.30.4.b 2010/07/09 13:48
ネットワーク構成計画テーブルに従い、LDomのe1000g1とe1000g2を準備します。
# /opt/SUNWldm/bin/ldm add-vsw net-dev=e1000g1 primary-vsw1 primary
# /opt/SUNWldm/bin/ldm add-vsw net-dev=e1000g2 primary-vsw2 primary

コントロールドメインは新しいゲストドメインを受け入れる準備ができました。サービスが有効であることを確認します。
# ldm list-services primary
VCC
    NAME             LDOM         PORT-RANGE
    primary-vcc0     primary      5000-5100

VSW
    NAME             LDOM         MAC               NET-DEV   DEVICE     DEFAULT-VLAN-ID PVID VID    MTU   MODE
    primary-vsw0     primary     00:14:4f:fa:06:ae e1000g0   switch@0   1   1                       1500
    primary-vsw1     primary     00:14:4f:fa:77:19 e1000g1   switch@1   1   1                       1500
    primary-vsw2     primary     00:14:4f:fa:ff:4f e1000g2   switch@2   1   1                       1500

VDS
    NAME             LDOM         VOLUME       OPTIONS      MPGROUP    DEVICE    
primary-vds0     primary       vol1boot                                /ldoms/opnaus14ldm/ldom.vdisk
                                 vol1shared                             /dev/rdsk/c2t0d0s4
ゲストドメイン(LDom)を構成する
これは、最初のT2000サーバー上のRACノードをホストするドメインです。別のT2000サーバー上に類似のドメインを作成します。
ldm create opn1ldm

ldm set-vcpu 8 opn1ldm
ldm set-memory 8G opn1ldm

ldm add-vnet vnet1 primary-vsw1 opn1ldm
ldm add-vnet vnet2 primary-vsw2 opn1ldm

zfs create dpool/ldoms/opn1ldm
#
# Make sure the LDom's virtual disk for root device is more than 20GB for Solaris, RAC and Oracle DB binaries.
#
mkfile -nv 40G /ldoms/opn1ldm/rvol1.vdisk
ldm add-vdsdev /ldoms/opn1ldm/rvol1.vdisk  vol1boot@primary-vds0
ldm add-vdisk vdisk1 vol1boot@primary-vds0 opn1ldm
#
# This shared disk is managed by ASM from both LDom nodes
#
ldm add-vdsdev /dev/rdsk/c2t0d0s4 vol1shared@primary-vds0
ldm add-vdisk sd1 vol1shared@primary-vds0 opn1ldm

ldm set-variable auto-boot\?=true opn1ldm
#
# Because we have 2 devices, we want to make sure that vdisk1 is the boot device. 
# In the JumpStart Template for this domain, make sure the zfs disk is set properly.
# e.g. base_config_profile_zfs_disk="c0d0s0"
#
ldm set-variable boot-device=vdisk1 opn1ldm

ldm bind opn1ldm
ldm start opn1ldm
LDomの構成が完了したら、状態を確認しましょう。
# ldm ls
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  SP      4     4G       2.0%  3d 19h 13m
opn1ldm          active     -n----  5000    8     4G        15%  1h 36m
LDomのコンソールポート番号は5000ですので、メモしておきましょう。このポートはゲストドメインの仮想コンソールにアクセスする際に使用します。LDomの詳細情報は以下のコマンドで取得できます。MACアドレスはJumpStart サーバーの構成時に使いますので、メモしておきます。
# ldm ls -l opn1ldm
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
opn1ldm          active     -n----  5000    8     4G       6.7%  1h 40m
MAC
    00:14:4f:f9:ee:8c
HOSTID
    0x84f9ee8c
CONTROL
    failure-policy=ignore
DEPENDENCY
    master=
VCPU
    VID    PID    UTIL STRAND
    0      4      4.2%   100%
    1      5      4.0%   100%
    2      6      3.9%   100%
    3      7      7.8%   100%
    4      8      3.7%   100%
    5      9      8.4%   100%
    6      10     4.1%   100%
    7      11     4.0%   100%
MEMORY
    RA               PA               SIZE
    0x8000000        0x108000000      4G
VARIABLES
    boot-device=disk:a sd1:a vdisk1
NETWORK
    NAME             SERVICE                   DEVICE     MAC               MODE   PVID VID      MTU
    vnet1            primary-vsw1@primary      network@0  00:14:4f:f8:a1:56      1             1500
    vnet2            primary-vsw2@primary      network@1  00:14:4f:f8:45:4c      1             1500
DISK
    NAME             VOLUME                    TOUT DEVICE  SERVER         MPGROUP
    vdisk1           vol1boot@primary-vds0          disk@0  primary
    sd1              vol1shared@primary-vds0        disk@1  primary
VCONS
    NAME             SERVICE                   PORT
    opn1ldm          primary-vcc0@primary      5000
2回繰り返す
この資料はRAC2ノードシナリオを元にしていますので、LDomの作成および構成が各ノードあたり2回発生します。しかし、RACおよびDBのrunInstallerやrunclunfyスクリプトの実行は1回だけ実施します。この1回の実行でで意義されたノードの確認や構成を全て実施します。

ゲストドメイン(LDom)を起動する
ゲストドメインを作成したら、Solaris OSをインストールする必要があります。やり方は色々あります。
  1. DVDからSolaris OSをインストール
  2. JumpStartサーバーからSolaris OSをインストール
  3. 事前構成済みのSolarisイメージをbつのLDomから複製する
今回は、JumpStartサーバーからSolaris OSをインストールします。
コントロールドメインからコンソールポートを使い、LDomの仮想コンソールにtelnetコマンドでアクセスします。
# telnet localhost 5000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connecting to console "opn1ldm" in group "opn1ldm" ....
Press ~? for control options ..
{0} ok
[注意]JumpStartサーバーの構成は、このドキュメントの範囲外です。詳細の情報が必要な場合は、次のJumpStart Enterprise ToolKit(JET) Wikiをご覧下さい。

Jumpstart Enterprise Toolkit
http://wikis.sun.com/display/JET/Home

("ok"プロンプトでご存知の)Open Boot Prompt (OBP)からコマンドを入力して、JumpStartサーバーから起動するようにします。
{0} ok boot vnet1 - install -w
Solarisシステムが立ち上がったら、コントロールドメインからzfsスナップショットコマンドを使ってバックアップしておきます。
# zfs snapshot /ldoms/opn1ldm@BaseSolaris10u9
ヒント: このZFSスナップショットは、LDomイメージを複製したり、復旧する際に利用できます。

全てのネットワーク構成が正しく動作していることを確認しましょう。

利用可能なデバイスを調べます。
# dladm show-dev
vsw0            link: up        speed: 1000  Mbps       duplex: full
vsw1            link: up        speed: 1000  Mbps       duplex: full
vsw2            link: up        speed: 100   Mbps       duplex: full
e1000g0         link: up        speed: 1000  Mbps       duplex: full
e1000g1         link: up        speed: 1000  Mbps       duplex: full
e1000g2         link: up        speed: 100   Mbps       duplex: full
e1000g3         link: unknown   speed: 0     Mbps       duplex: half
ネットワークインターフェースを確認します。
# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
vsw0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
        inet 10.35.74.24 netmask ffffff00 broadcast 10.35.74.255
        ether 0:14:4f:fa:06:ae 
nslookupコマンドを3回叩き、Cluster SCANの確認と、それぞれ異なる3個のIPアドレスにラウンドロビンで振られることを確認します。
# nslookup opnrac01-cluster-scan
NTPを使ってネットワークの時間が同期していることを確認します。
# ntpq -p
     remote           refid      st t when poll reach   delay   offset    disp
==============================================================================
*austin8-rtr-3- root.us.oracle.co  6 u 1003 1024  377     2.27    0.708    1.11

RACインストールのためにLDomを構成する
ベースとなるSolaris 10のインストール後、RACが要求するシステムパラメータ、カーネルパラメータを設定する必要があります。

/homeの自動マウントを解除する
GridとOracleユーザーのホームディレクトリはローカルの/homeに作成されますので、/homeを自動マウントされないように設定します。
# svcs autofs
disabled       13:48:39 svc:/system/filesystem/autofs:default

# vi /etc/auto_master
#/home         auto_home       -nobrowse      <<<< この行をコメントにする
# svcadm enable system/filesystem/autofs

グループ、ユーザーを作成し、リソース制御を設定する
groupadd oinstall
groupadd dba
groupadd asmadmin
groupadd asmdba
groupadd asmoper
#
# Solaris 10 Project based Resource Control instead of the use of /etc/system
# No reboot required.  User just need to log back in to inherit changes
#
projadd group.dba
projmod -sK "project.max-shm-memory=(privileged,4G,deny)" group.dba
projmod -sK "project.max-sem-ids=(privileged,100,deny)" group.dba
projmod -sK "project.max-shm-ids=(privileged,100,deny)" group.dba
projmod -sK "project.max-sem-nsems=(privileged,256,deny)" group.dba
projmod -sK "process.max-file-descriptor=(privileged,65536,deny)" group.dba
projects -l group.dba
echo "*** Make sure you have commented out /home in /etc/auto_master ****"
useradd -g oinstall -G dba,asmadmin,asmdba,asmoper -d /home/grid -s /bin/bash -K project=group.dba -m grid
useradd -g oinstall -G dba,asmdba -d /home/oracle -s /bin/bash -K project=group.dba -m oracle
passwd oracle
# Enter password for oracle user

passwd grid
# Enter password for grid user 
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory/
mkdir -p /u01/11.2.0/grid
chown -R grid:oinstall /u01/11.2.0/grid
chmod -R 775 /u01/11.2.0/grid
mkdir -p /u01/app/oracle
mkdir /u01/app/oracle/cfgtoollogs
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1
chmod -R 775 /u01/app/oracle/product/11.2.0/db_1/
chown grid:asmadmin /dev/rdsk/c2t0d0s4
chmod 660 /dev/rdsk/c2t0d0s4

クラスタのプライベートネットワーク用にネットマスクを設定する
# vi /etc/netmasks
10.10.10.0      255.255.255.0       # <<< この行を追加
LDomのネットワークインターフェースを構成する
# ifconfig -a
# vi /etc/hosts
### プライベートホストのエントリを追加
#
# Private Network for RAC Heartbeat
#
10.10.10.10     opn1ldm-priv
10.10.10.11     opn2ldm-priv

# echo "opn1ldm-priv" > /etc/hostname.vnet2
# ifconfig vnet2 plumb
# ifconfig vnet2 11.11.11.10 netmask 255.255.255.0 up
SSHのタイムアウトを設定する
# vi /etc/ssh/ssd_config
#### LoginGraceTimeを探し、値を600から0に変更する
LoginGraceTime 0
Oracle推奨のTCP/UDP設定を構成する
/etc/init.d/nddconfig を作成し、以下のエントリを追加します。
#!/bin/sh
/usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000
/usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500
/usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000
/usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500
/usr/sbin/ndd -set /dev/udp udp_xmit_hiwat 65536
/usr/sbin/ndd -set /dev/udp udp_recv_hiwat 65536 
LDomを再起動してもnddの設定を保存するように、ファイルのシンボリックリンクを作成します。.
# ln -s /etc/init.d/nddconfig /etc/rc2.d/S31nddconfig
NTPを設定する
クラスタノードの時間を同期するためにNTPを設定します。/etc/inet/ntp.conf にNTPサーバーのIPアドレスを含む、以下のエントリを追加します。
# Some of the devices have tuning parameters, called "fudge" factors,
# that can be set on the server line.  See the ntpd documentation.
restrict default ignore
restrict 127.0.0.1
broadcastdelay 0.008
authenticate no
fudge 127.127.1.0 stratum 10
fudge 127.127.1.0 # localhost timeserver
driftfile /var/ntp/ntp.drift
# statsdir /var/ntp/ntpstats/
# filegen peerstats file peerstats type day enable
# filegen loopstats file loopstats type day enable
# filegen clockstats file clockstats type day enable
restrict 10.135.247.1 nomodify notrap
server 10.135.247.1
# Oracle RAC requirements
disable pll
slewalways yes
# End Oracle RAC requirements
NTPサービスをSMF経由で有効にします。
# svcadm enable network/ntp
DNS構成の確認
$ cat /etc/resolv.conf
nameserver 192.168.54.86
nameserver 192.168.54.89
search us.oracle.com, oraclecorp.com
domainとsearchエントリに複数存在することが理由で、runInstallerで問題が発生するようであれば、どちらかのエントリだけを残して下さい。

[解決策]
domainもしくはsearchのどちらかを全てのクラスタノード中のresolv.confから削除して下さい。通常はsearchを残すほうがよいですが、状況に応じて対応して下さい。
resolv.confは全てのノードで一致することが重要ですので、全ノードのファイルから同じ行を削除して下さい。

SSHログインのセットアップ
SSHを手でセットアップする手順です。そうでない場合は、runInstaller.sh スクリプトが手順を自動的に管理します。
# su - grid

grid: ssh-keygen -t rsa   (Press <RETURN> to take default values.  Run this on both nodes)
grid: cd ~/.ssh
grid: cat > authorized_keys
(copy the key from id_rsa.pub LDom1 to LDom2 and vice versa)
(also copy the key of its own on the same machine i.e. the authorized_keys)
grid: ssh date  (to test it out from both nodes.. no more password prompting)
oracleユーザーで同じことをします。

RACのインストール


RACをインストールする前に、クラスタの確認コマンドを使って状態を確認しておくことをお勧めします。
${GRID_BINARIES}/runcluvfy.sh stage -pre crsinst -n opn1ldm,opn2ldm -r 11gR2 -verbose 
GridインストーラのSSHが間違ったディレクトリ (/usr/local/bin)を指す問題
次のような回避策を適用します。

あるコマンドがパスセットの間違いによって失敗する場合、以下のようにファイルをローカルにコピーし、編集してrunInstallerに渡すことができます。

1) インストーラのtarからファイルを取り出し、ローカルディレクトリにコピーします。
$ cp Disk1/stage/properties /tmp/properties

2) /tmp/properties/ssPaths_sol.properties中のSSH公開鍵の場所と、ssh-keygenバイナリの場所を、正しいパスに更新します。
$ cat /tmp/ssPaths_sol.properties
...
SSH_HOST_KEY_LOC=/etc/ssh
SSH_KEYGEN_PATH=/usr/bin/ssh-keygen
...

3) 次のオプションを付けて、再度インストーラ(runInstaller)を起動します。
# su - grid
$ ./runInstaller -J-Doracle.sysman.prov.PathsPropertiesLoc=/tmp/properties 
Gridインストール時のバグについて
"PRVF-5149 Error"が発生した場合は、以下の記載にあるように無視して下さい。
http://download.oracle.com/docs/cd/E16338_01/readmes.112/b56292/db_readme.htm#sthref505 (Nov 2010).
以下引用です。
Oracle Bug#10041397
Oracle Virtual Machine(Oracle VM)でのクラスタ用Oracle Grid Infrastructureのインストールで、仮想共有ディスクがOracle ASMデバイスとして使用される場合、Oracle ASMデバイスの前提条件チェックで、これらのデバイスが共有されてないことを示す警告が表示されます。次に例を示します。
PRVF-5149 : WARNING: Storage "/dev/xvde1" is not shared on all nodes
回避策: この警告は無視しても問題ありません。

データベースのインストール
su - oracle
runInstaller ...

でOKです。

まとめ

LDomはRAC環境に適しています。その理由をあげてみると…
  • 仮想環境
  • システムリソースを動的に再割り当て、解除するのが簡単
  • 物理サーバーを複数のLDomでパーティショニングして、セキュアで分離されたOS環境にてアプリケーションをホストできる
  • システムの利用率とスペース/ユーティリティの利用に合わせて最適化できる
  • LDomとZFSの組み合わせで、維持管理性が向上する
  • Agility gained -- i.e. can be migrated from one physical server to another
Solaris Containersもまたよい選択肢です。Solaris Containersについては、また別のエントリでご紹介する予定です。


原文はこちら。
http://blogs.oracle.com/sunabl/entry/deploying_oracle_rac_db_11

0 件のコメント:

コメントを投稿