アットウィキロゴ
RAC(Oracle Real Application Clusters)について、あまり知識がない初心者がチャレンジした跡。

##工事中##


VMWareの設定

前提

VMWareのバージョン

VMWare Workstation 5.5.5

ゲストOSの構成

100.168.116.25 ubl1.utsugi.com(1号機) 外部通信用
192.168.139.25 ubl1i.utsugi.com(1号機) 内部通信用
100.168.116.35 ubl1v.utsugi.com(1号機) Oracle用VIP用
100.168.116.26 ubl2.utsugi.com(2号機) 外部通信用
192.168.139.26 ubl2i.utsugi.com(2号機) 内部通信用
100.168.116.36 ubl2v.utsugi.com(2号機) Oracle用VIP用

※外部通信用に、以下のアドレスを指定すると、CVU使用時、またはVIP構成時に失敗するらしい。
クラスA 10.0.0.0
クラスB 172.16.0.0 - 172.31.0.0
クラスC 192.168.0.0 - 192.168.255.0

共有ディスクは、1号機(ubl1)側でNFSマウントで共有することで代替する。

イーサネットの追加

1号機で次を実施する。

「仮想マシンの設定」より「追加」を押して「ハードウェア追加ウィザード」を起動し、「イーサネットアダプタ」を選択する。
プライベート用のLANを組むため、「ホストオンリー」を選択する。

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (vm_network.jpg)


2号機に対しても同じ設定を行う。

ハードディスクの追加

こちらはubl1のみ。

「ハードウェア追加ウィザード」を起動し、「ハードディスク」を選択する。IDEとSCSIがあるが、SCSIを選択した。サイズはお好みで。


インストール前準備

1号機(ubl1)で実施した内容を元に記述。特に断りがない限り、2号機も同様に行う。

ネットワークの設定(内部通信用)

ifconfig -aでNICの確認[root]

OSを起動して、rootユーザでログイン。
ifconfig -a
を実施し、NICが認識されていることを確認する。

eth0      Link encap:Ethernet  HWaddr 00:0C:29:20:B3:27
          inet addr:100.168.116.25  Bcast:100.168.116.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe20:b327/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:940 errors:0 dropped:0 overruns:0 frame:0
          TX packets:936 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:443621 (433.2 KiB)  TX bytes:112204 (109.5 KiB)
          Interrupt:185 Base address:0x1400

eth1      Link encap:Ethernet  HWaddr 00:0C:29:20:B3:31
          inet addr:192.168.139.25  Bcast:192.168.139.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe20:b331/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1633 (1.5 KiB)  TX bytes:630 (630.0 b)
          Interrupt:169 Base address:0x1480
※上記は「eth1」のIPアドレスの設定まで終えた状態の表示。

/etc/sysconfig/network-scriptsで設定[root]

/etc/sysconfig/network-scriptsで、2つめifcfg-eth1を作成する。ifcfg-eth0をベースに修正するのが簡単だろう。

DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.139.255
IPADDR=192.168.139.25
NETMASK=255.255.255.0
NETWORK=192.168.139.0
ONBOOT=yes
TYPE=Ethernet

設定できたら、/etc/init.d/network restart でネットワークを再起動。その後、ifconfig で設定されたことを確認する。

ハードディスクの設定

OSインストール後にハードディスクを追加する人の手順。ちなみに、OSインストール時点に既にハードディスクを追加していれば、インストールの中で設定できたと思う。

※この章の内容は、作業後に記憶を辿って書いたため、あくまで参考までに。

  • dmesage で、追加したハードディスクが認識されていることを確認。
  • fdisk <デバイス名> を実行。fdiskの使い方、他サイトを参考に。1号機のfdiskでパーティション状態を表示させたものは次の通り。
コマンド (m でヘルプ): p

Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2610    20964793+  83  Linux
  • mke2fs コマンドでext3 のファイルシステムを作成。
  • fstabに追加。1号機のものは次のようになっている。
/dev/sdb1               /mnt/sdb                ext3    defaults        1 2


ntpd(/etc/ntp.conf)の設定[root]

ノード間で時刻のズレがある場合、インストールに失敗する可能性があるため、ntp.confで時刻同期の設定する。インターネットマルチフィード(MFEED) 時刻情報提供サービス for Public(http://www.jst.mfeed.ad.jp/)を利用した。

server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

VMWare対策

VMWare上のLinuxの場合、どんどん時刻がずれてしまう可能性がある。この対策として、「/boot/grub/grub.conf」にカーネル起動オプションとして、以下を記述する。
clock=pit nosmp noapic nolapic

grub.conf の記述例は、次のようになる。

title Enterprise (2.6.9-55.0.0.0.2.ELsmp)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.9-55.0.0.0.2.ELsmp ro root=LABEL=/ rhgb quiet clock=pit nosmp noapic nolapic
        initrd /boot/initrd-2.6.9-55.0.0.0.2.ELsmp.img
title Enterprise-up (2.6.9-55.0.0.0.2.EL)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.9-55.0.0.0.2.EL ro root=LABEL=/ rhgb quiet clock=pit nosmp noapic nolapic
        initrd /boot/initrd-2.6.9-55.0.0.0.2.EL.img

/etc/hostsの設定[root]

1号機は次のように記述。
127.0.0.1               ubl1.utsugi.com ubl1 localhost.localdomain localhost

100.168.116.25           ubl1.utsugi.com ubl1
100.168.116.26           ubl2.utsugi.com ubl2

#Private for InterConnect
192.168.139.25          ubl1i.utsugi.com ubl1i
192.168.139.26          ubl2i.utsugi.com ubl2i

外部通信、内部通信における1号機、2号機の定義を記載している。

swapの拡大[root]

「Oracle Database インストレーション・ガイド 10gリリース2(10.2)for Linux x86」によるとswapの最小要件は次の通り。

RAM スワップ領域
1024~2048 MB RAMのサイズの1.5倍
2049~8192 MB RAMのサイズと同じ
8192 MB超 RAMのサイズの0.75倍

ubl1サーバーのswap状態は次の通り。

[root@ubl1 ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/sda2                               partition       2096472 0       -1

VMWareの設定でRAMは1200MBとしていおり、swapは2GBであるため要件はクリアしているが、500MBさらにswapを拡張してみる。

[root@ubl1 ~]# cd /tmp
[root@ubl1 tmp]# dd if=/dev/zero of=/tmp/swap bs=1024k count=500
読み込んだブロック数は 500+0
書き込んだブロック数は 500+0
[root@ubl1 tmp]# mkswap swap
Setting up swapspace version 1, size = 524283 kB
[root@ubl1 tmp]# swapon swap
[root@ubl1 tmp]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/sda2                               partition       2096472 0       -1
/tmp/swap                               file            511992  0       -2

OS再起動後も自動でswapに割り当ててもらうように /etc/fstab に以下を追記しておく。
/tmp/swap               swap                    swap    default         0 0

NFSの設定[root]

共有ディスクがないので、1号機側のディスクをNFSマウントして共有する。

NFSサーバー側の設定(1号機のみ)


1号機のハードディスクを追加したディレクトリを共有する。
/mnt/sdb

/etc/exports ファイルに以下を記述する。このときに指定するIPアドレスはRACの内部通信側、つまり 192.168.xxx.xxx とする。
/mnt/sdb    192.168.0.0/255.255.0.0(rw)

/etc/init.d/nfs restart を実行する。

NFSクライアント側の設定(1号機、2号機両方)

RACのインストールマニュアルによると「共有記憶域にNFSを使用している場合は、NFSバッファ・サイズ・パラメータ(rsizeおよびwsize)の値を16384以上に設定する必要があります。推奨は32768です。」とのこと。今回は16384で設定してみる。

2号機に、/etc/fstab に以下を記述する。OS起動時に自動でmountする。
ubl1i:/mnt/sdb      /mnt/data               nfs     rsize=16384,wsize=16384,hard     default         0 0

手動でマウントする場合は、次のコマンドを実行する。
mount -t nfs -o rsize=16384,wsize=16384 ubl1i:/mnt/sdb /mnt/data

※1号機の場合、fstab内にディスクのマウントなどが存在し、処理の順序的にNFSクライアントをOS起動時に自動で設定するのは無理そうなのであきらめた。そのため、1号機は、手動でマウントすることにした。

グループ・ユーザの作成[root]

rootユーザでoracle用のユーザやグループを作成する。

oinstallグループ
groupadd -g 2000 oinstall
dbaグループ
groupadd -g 2001 dba
oracleユーザ
useradd -d /home/oracle -g oinstall -G dba -m -s /bin/bash -u 2000 oracle
passwd oracle  <--適当に設定してね

また、nobodyユーザが必要なので、存在していなければ作成する。
/usr/sbin/useradd nobody

※グループID、ユーザIDは環境に合わせて指定。


カーネル・パラメータの構成[root]

/etc/sysctl.confを編集。以下を付け加える。
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144

oracleユーザーに対するシェル制限の設定

  • /etc/security/limits.conf
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536

  • /etc/pam.d/login
session    required     /lib/security/pam_limits.so

  • /etc/profile or /etc/csh.login
※oracleユーザーのデフォルト・シェルに応じて、デフォルトのシェル起動ファイルを次のように変更

Bourne、BashまたはKornシェルの場合
/etc/profile
if [ $USER = "oracle" ]; then
        if [ $SHELL = "/bin/ksh" ]; then
              ulimit -p 16384
              ulimit -n 65536
        else
              ulimit -u 16384 -n 65536
        fi
fi           

Cシェル(cshまたはtcsh)の場合
/etc/csh.login
if ( $USER == "oracle" ) then
        limit maxproc 16384
        limit descriptors 65536
endif

ここで一端、OSを再起動をしておく。

jdk1.4の入手[root]

Database 10g R2にパッチは、OPatch 10.2のバージョンのためJDK1.4が必要。そのため予めJDK1.4を入手しておく。


SSHの構成[oracle]

Oracle Real Application Clustersをインストールして使用する前に、すべてのクラスタ・ノードでoracleユーザー用のセキュア・シェル(SSH)を構成する必要がある。

RSA鍵およびDSA鍵の作成

oracleでログインする。もし、homeディレクトリに .ssh ディレクトリがなければ作成して適切な権限に設定しておく。
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

そして、「/usr/bin/ssh-keygen -t rsa」「/usr/bin/ssh-keygen -t dsa」をそれぞれ実行してく。以下は、1号機で実際に実行した結果。

[oracle@ubl1 .ssh]$ /usr/bin/ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
b7:b5:57:d4:d4:3c:cb:80:7a:c5:96:2a:91:91:5a:e9 [email protected]
[oracle@ubl1 .ssh]$ /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
48:03:dd:01:e1:cb:84:36:cf:ed:48:39:98:fd:b6:5a [email protected]
[oracle@ubl1 .ssh]$ ls
id_dsa  id_dsa.pub  id_rsa  id_rsa.pub

これを2号機でも実施する。

認証鍵ファイルへの鍵の追加

  • 1号機
認証鍵ファイル(~/.ssh/authorized_keys)が存在していなければ、作成する。
touch ~/.ssh/authorized_keys
cd ~/.ssh/

そして、以下を実行する。

[oracle@ubl1 .ssh]$ ssh ubl1 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
oracle@ubl1's password:
[oracle@ubl1 .ssh]$ ssh ubl1 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys
[oracle@ubl1 .ssh]$ ssh ubl2 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
oracle@ubl2's password:
[oracle@ubl1 .ssh]$ ssh ubl2 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys
oracle@ubl2's password:

作成したauthorized_keysファイルを、2号機にscp等を利用して転送する。

[oracle@ubl1 .ssh]$ scp authorized_keys ubl2:/home/oracle/.ssh
oracle@ubl2's password:
authorized_keys                              100% 1688     1.7KB/s   00:00

また、authorized_keys の権限を変更しておく。
[oracle@ubl1 .ssh]$ chmod 600 authorized_keys

  • 2号機
/home/oracle/.ssh/authorized_keys があるので、権限を変更しておく。
[oracle@ubl2 .ssh]$ chmod 600 authorized_keys

クラスタ・メンバー・ノードでのSSHユーザー等価関係の有効化

パス・フレーズを求めるプロンプトが表示されることなくsshおよびscpコマンドをOracle Universal Installerで使用できるようにする。
  • 1号機、2号機の両方
以下のコマンドを実施する。
exec /usr/bin/ssh-agent $SHELL
/usr/bin/ssh-add

その後、「ssh <servername> date」を実行して、パスワードが尋ねられず実行できたら成功。
[oracle@ubl1 .ssh]$ ssh ubl1 date
2007年 11月  1日 木曜日 16:32:57 JST
[oracle@ubl1 .ssh]$ ssh ubl2 date
2007年 11月  1日 木曜日 16:52:04 JST

cvuqdiskパッケージのインストール[root]

Red HatまたはSUSE Linux系のOSを使用している場合は、オペレーティング・システムのcvuqdiskパッケージをダウンロードしてインストールする必要があり。

RACのメディアにcvsqdiskパッケージが入っているので、これを使用する。

rpm -i cvuqdisk-1.0.1-1.rpm

CVUを使用したネットワーク設定の検証[oracle]

oracleユーザーで「runcluvfy.sh」を使用してコマンドを入力して、クラスタが構成されているすべてのノード間のノードの接続性を検証してみる。
/mountpoint/crs/Disk1/cluvfy/runcluvfy.sh comp nodecon -n node_list [-verbose]

今回は、node_listは、1号機(ubl1)、2号機(ubl2)のため、次のコマンドを実行。結果は成功した。
[oracle@ubl1 cluvfy]$ ./runcluvfy.sh comp nodecon -n ubl1,ubl2 -verbose

ノード接続性を検証中

ノード接続性をチェック中...


ノード"ubl2"のインタフェース情報
  インタフェース名                        IPアドレス                          サブネット    
  ------------------------------  ------------------------------  ----------------
  eth0                            100.168.116.26                  100.168.116.0
  eth1                            192.168.139.26                  192.168.139.0


ノード"ubl1"のインタフェース情報
  インタフェース名                        IPアドレス                          サブネット    
  ------------------------------  ------------------------------  ----------------
  eth0                            100.168.116.25                  100.168.116.0
  eth1                            192.168.139.25                  192.168.139.0


チェック: サブネット"100.168.116.0"のノード接続性
  ソース                             宛先                              接続しましたか       
  ------------------------------  ------------------------------  ----------------
  ubl2:eth0                       ubl1:eth0                       はい
結果: ノードubl2,ubl1を持つサブネット"100.168.116.0"のノード接続性チェックに合格しました。

チェック: サブネット"192.168.139.0"のノード接続性
  ソース                             宛先                              接続しましたか       
  ------------------------------  ------------------------------  ----------------
  ubl2:eth1                       ubl1:eth1                       はい
結果: ノードubl2,ubl1を持つサブネット"192.168.139.0"のノード接続性チェックに合格しました。

サブネット"100.168.116.0"のVIPに適したインタフェース:
ubl2 eth0:100.168.116.26
ubl1 eth0:100.168.116.25

サブネット"192.168.139.0"のプライベート・インターコネクトに適したインタフェース:
ubl2 eth1:192.168.139.26
ubl1 eth1:192.168.139.25

結果: ノード接続性チェックに合格しました。


ノード接続性の検証に成功しました。


インストールディレクトリの作成[root]

次のようなディレクトリ構成とする。

Oracle Base /opt/oracle/app
Oracle Clusterware Home /opt/oracle/crs/product/10.2/crs
Oracle Database Home /opt/oracle/app/product/10.2/db

以下は、1号機での実行した例である。
  • Oracle Clusterware Home
[root@ubl1 opt]# mkdir -p /opt/oracle/crs/product/10.2/crs
[root@ubl1 opt]# chown -R root:oinstall /opt/oracle/crs/

  • Oracle Database Home
[root@ubl1 opt]# mkdir -p /opt/oracle/app/product/10.2/db
[root@ubl1 opt]# chown -R oracle:oinstall /opt/oracle/app/

2号機でも同様に実施する。

環境変数ファイルの作成[oracle]

1号機、2号機で実施。

  • CRS用環境設定ファイル(.crs_profile)

umask 022
stty intr ^C

ORACLE_BASE=/opt/oracle/app;export ORACLE_BASE
ORA_CRS_HOME=/opt/oracle/crs/product/10.2/crs;export ORA_CRS_HOME
ORACLE_HOME=$ORA_CRS_HOME;export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH;export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH;export LD_LIBRARY_PATH

  • DB用環境設定ファイル
umask 022
stty intr ^C

ORACLE_BASE=/opt/oracle/app;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2/db;export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH;export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
最終更新:2007年11月22日 19:29