2010年10月18日月曜日

RedHat Cluster Suite を使った2node Oracle クラスタ


このエントリーをはてなブックマークに追加



(この文書は未完成)

RHEL 標準のクラスタソフトである、RedHat Cluster Suite(RHCS)を使って、Active-StandbyなOracleクラスタサーバを構築する。
CentOSでもほとんど同じ手順でクラスタ構築が可能。

CentOSサーバー


価格:3,150円(税込、送料別)
  
KVM徹底入門


価格:3,444円(税込、送料別)

Table of Contents
=================
1 参考ドキュメント
2 作業の流れと進捗チェックリスト
3 事前準備
    3.1 IPアドレスの決定
    3.2 ストレージパラメータの決定
    3.3 Oracleパラメータの決定
4 RedHat Enterprise Linuxの設定
    4.1 OSインストール
    4.2 最新パッチの適用
    4.3 ネットワークの二重化
        4.3.1 /etc/modprobe.conf
        4.3.2 ifcfg-eth0
        4.3.3 ifcfg-eth1
        4.3.4 ifcfg-bond0
5 共有ストレージの設定
    5.1 RAID/LUNの作成
    5.2 ホストへのマッピング設定
        5.2.1 もし二つのノードからのデバイスの見え方が違ったら
            5.2.1.1 ストレージの場合
            5.2.1.2 ネットワークの場合
    5.3 ストレージの結線
    5.4 ストレージパスの二重化
    5.5 ファイルシステムの作成
        5.5.1 iSCSIをマウントする例
        5.5.2 認識確認
        5.5.3 ファイルシステムの作成
    5.6 両ノードからのマウント確認
        5.6.1 rhcs-oracle1から
        5.6.2 rhcs-oracle2から
6 RHCSの基本設定
    6.1 クラスタ化されるノードの設定
        6.1.1 yum が使えない場合。
    6.2 クラスタ管理サーバを設定
        6.2.1 yum が使えない場合
        6.2.2 管理画面へのアクセス
    6.3 クラスタノードを管理サーバへ参加
------------------------------------- ここで力尽きてる
    6.4 Fencingの設定
    6.5 Quorumディスクの設定
7 RHCSのリソースとグループの設定
    7.1 リソース 仮想IPの設定
    7.2 リソース 共有ディスクの設定
    7.3 グループ 依存関係の定義
    7.4 グループ 起動と停止の確認
8 単体SPFテスト
    8.1 OS起動・停止
    8.2 手動フェイルオーバー
    8.3 手動フェイルバック
    8.4 ネットワーク切断
    8.5 ストレージパス切断
9 Oracle設定
    9.1 インストール
    9.2 パッチ適用
    9.3 データベースの作成
    9.4 リスナーの作成
    9.5 起動・停止スクリプトの作成
    9.6 設定ファイルを両ノードのコピー
    9.7 両ノードでデータベースとリスナーが起動する事を確認
10 RHCSへのOracle組込み
    10.1 Oracleリソースの作成
    10.2 依存関係の定義
    10.3 起動・停止・フェイルオーバーテスト
11 結合SPFテスト
    11.1 ネットワーク障害
    11.2 ストレージ障害
    11.3 OS障害
    11.4 データベース障害
    11.5 リスナー障害




1 参考ドキュメント
^^^^^^^^^^^^^^^^^^^
 http://www.centos.org/docs/5/html/Cluster_Administration/index.html
 http://www.jp.redhat.com/cluster_suite/

2 作業の流れと進捗チェックリスト
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  作業は以下の流れで進んでいく。
  全体の概要についてはここでは解説しないので、参考ドキュメントをよく読んでおくこと。

  1. [ ] 事前準備
     1) [ ] IPアドレスの決定
     2) [ ] ストレージパラメータの決定
     3) [ ] Oracleパラメータの決定
  2. [ ] RedHat Enterprise Linuxの設定
     1) [ ] OSインストール
     2) [ ] 最新パッチの適用
     3) [ ] ネットワークの二重化
  3. [ ] 共有ストレージの設定
     1) [ ] RAID/LUNの作成
     2) [ ] ホストへのマッピング設定
     3) [ ] ストレージの結線
     4) [ ] ストレージパスの二重化
     5) [ ] ファイルシステムの作成
     6) [ ] 両ノードからのマウント確認
  4. [ ] RHCSの基本設定
     1) [ ] クラスタ化されるノードの設定
     2) [ ] クラスタ管理サーバを設定
     3) [ ] クラスタノードを管理サーバへ参加
     4) [ ] Fencingの設定
     5) [ ] Quorumディスクの設定
  5. [ ] RHCSのリソースとグループの設定
     1) [ ] リソース 仮想IPの設定
     2) [ ] リソース 共有ディスクの設定
     3) [ ] グループ 依存関係の定義
     4) [ ] グループ 起動と停止の確認
  6. [ ] 単体SPFテスト
     1) [ ] OS起動・停止
     2) [ ] 手動フェイルオーバー
     3) [ ] 手動フェイルバック
     4) [ ] ネットワーク切断
     5) [ ] ストレージパス切断
  7. [ ] Oracle設定
     1) [ ] インストール
     2) [ ] パッチ適用
     3) [ ] データベースの作成
     4) [ ] リスナーの作成
     5) [ ] 起動・停止スクリプトの作成
     6) [ ] 設定ファイルを両ノードのコピー
     7) [ ] 両ノードでデータベースとリスナーが起動する事を確認
  8. [ ] RHCSへのOracle組込み
     1) [ ] Oracleリソースの作成
     2) [ ] 依存関係の定義
     3) [ ] 起動・停止・フェイルオーバーテスト
  9. [ ] 結合SPFテスト
     1) [ ] ネットワーク障害
     2) [ ] ストレージ障害
     3) [ ] OS障害
     4) [ ] データベース障害
     5) [ ] リスナー障害

3 事前準備
^^^^^^^^^^^

3.1 IPアドレスの決定
~~~~~~~~~~~~~~~~~~~~~
   RHCSを構築するには複数のIPアドレスが必要になる。
   + 各ノードの物理NICに割り当てられるアドレス
   + サービス提供用に使う仮想IPアドレス

3.2 ストレージパラメータの決定
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ストレージに関して以下の領域を準備する。
   + サービス用の共有データ格納領域
   + Quorum用のディスク領域

3.3 Oracleパラメータの決定
~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Oracleの設定は両ノードで全て共有、もしくは完全に同一である必要がある。
   それを踏まえて、特に物理構造に影響を与える設定パラメータを決定すること。

4 RedHat Enterprise Linuxの設定
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ここでは検証マシンとして、KVMの仮想マシンを使っている。
  特に特別な設定は行っていない。


4.1 OSインストール
~~~~~~~~~~~~~~~~~~~
   + RHELの場合、Advanced Platformのサブスクリプションを入手しておく必要がある。
   + CentOSの場合は不要。
   + インストールパッケージはデフォルト。
   + SELinux、iptables、kdumpは無効にして設定しているが、本番で使う場合は環境にあったセキュリティを導入すること。
   + ネットワークホスト名は以下を設定
     - rhcs-oracle1.sol-net.jp 192.168.1.130
     - rhcs-oracle2.sol-net.jp 192.168.1.131

4.2 最新パッチの適用
~~~~~~~~~~~~~~~~~~~~~
   必須ではないが既知のバグが治っている最新版にしておくのが良い。

4.3 ネットワークの二重化
~~~~~~~~~~~~~~~~~~~~~~~~~
   Bondingで二重化する。Typeはネットワーク構成に合わせて選択する。
   特にハードビートが流れる経路は必ず二重化しておく。

   【参考】
   Bonding ドライバー利用ガイド for RHEL5
   [http://www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-000C97B9]


4.3.1 /etc/modprobe.conf
=========================
    -------------------------
    alias eth0 virtio_net
    alias eth1 virtio_net
    alias bond0 bonding
    -------------------------

4.3.2 ifcfg-eth0
=================
    -------------------------
    DEVICE=eth0
    MASTER=bond0
    SLAVE=yes
    BOOTPROTO=none
    HWADDR=54:52:00:2B:6F:32
    -------------------------

4.3.3 ifcfg-eth1
=================
    -------------------------
    DEVICE=eth1
    MASTER=bond0
    SLAVE=yes
    BOOTPROTO=none
    HWADDR=54:52:00:0F:60:1F
    -------------------------

4.3.4 ifcfg-bond0
==================
    -------------------------
    DEVICE=bond0
    IPADDR=192.168.1.130
    NETMASK=255.255.255.0
    NETWORK=192.168.1.0
    BROADCAST=192.168.1.255
    ONBOOT=yes
    BOOTPROTO=static
    BONDING_OPT="mode=1 primary=eth0 miimon=100 updelay=5000"
    -------------------------

5 共有ストレージの設定
^^^^^^^^^^^^^^^^^^^^^^^
  例ではSolaris/ZFSのiSCSIを使っている。

  > zfs create -V 100M spool/iscsi/rhcs01
  > zfs create -V  10G spool/iscsi/rhcs02
  > zfs set shareiscsi=on spool/iscsi/rhcs01
  > zfs set shareiscsi=on spool/iscsi/rhcs02
  > iscsitadm list target
    Target: spool/iscsi/rhcs01
      iSCSI Name: iqn.1986-03.com.sun:02:1fc07211-6417-e04c-9ec7-93f3aa8f8979
      Connections: 0
    Target: spool/iscsi/rhcs02
      iSCSI Name: iqn.1986-03.com.sun:02:b703aa01-1a60-6841-c81d-b3d19beafb9c
      Connections: 0

   iSCSIに関する設定は以下を参考
   - RedHat における iSCSI 設定とマルチパス
   - RedHat Enterprise Linux iSCSIコマンドまとめ

  現在のインストールパッケージだとiSCSIが使えないので、下記を追加する。
  # rpm -ihv iscsi-initiator-utils-6.2.0.871-0.16.el5.i386.rpm
  # /etc/init.d/iscsi start

5.1 RAID/LUNの作成
~~~~~~~~~~~~~~~~~~~
   特に制限は無い。この時はまだストレージとサーバは接続しない。

5.2 ホストへのマッピング設定
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   2台のホストから等価にアクセスできるように設定する。
   必須では無い。dm-multipathやudevを挟むことで、物理層を隠せるが、
   一緒にしておいた方が無難。

5.2.1 もし二つのノードからのデバイスの見え方が違ったら
=======================================================

5.2.1.1 ストレージの場合
-------------------------
     - dm-multipathのエイリアスを使う
     - udevで明示的に名前を指定する
     - ラベルを使ってマウントする
     - modprobe.confで読み込まれるデバイス順序を指定する。

5.2.1.2 ネットワークの場合
---------------------------
     - modprobe.confで読み込まれるデバイス順序を指定する。
     - ifcfg-XXXXの中でMACアドレスを指定する。

5.3 ストレージの結線
~~~~~~~~~~~~~~~~~~~~~
   シングルポイントを作らないように結線すること。

5.4 ストレージパスの二重化
~~~~~~~~~~~~~~~~~~~~~~~~~~~
   dm-multipathを使って二重化する。
   こちらを参照
   - マルチパスI/Oの設定(RedHat)
   - RedHat における iSCSI 設定とマルチパス

5.5 ファイルシステムの作成
~~~~~~~~~~~~~~~~~~~~~~~~~~~
   片ノードからマウントしてフォーマットする。ここではext3を使っている。
   マウントに関する情報は fstab には記載してはいけない。
   GFSを使いたい場合は、クラスタ設定後に行う必要がある。
   クォーラムはフォーマットしなくてよい。

5.5.1 iSCSIをマウントする例
============================
    # iscsiadm --mode discovery --type sendtargets --portal 192.168.1.10
    # iscsiadm -m node
    192.168.1.10:3260,1 iqn.1986-03.com.sun:02:b703aa01-1a60-6841-c81d-b3d19beafb9c
    192.168.1.10:3260,1 iqn.1986-03.com.sun:02:1fc07211-6417-e04c-9ec7-93f3aa8f8979

    # iscsiadm -m node --login
    Logging in to [iface: default, target: iqn.1986-03.com.sun:02:b703aa01-1a60-6841-c81d-b3d19beafb9c, portal: 192.168.1.10,3260]
    Logging in to [iface: default, target: iqn.1986-03.com.sun:02:1fc07211-6417-e04c-9ec7-93f3aa8f8979, portal: 192.168.1.10,3260]
    Login to [iface: default, target: iqn.1986-03.com.sun:02:b703aa01-1a60-6841-c81d-b3d19beafb9c, portal: 192.168.1.10,3260]: successful
    Login to [iface: default, target: iqn.1986-03.com.sun:02:1fc07211-6417-e04c-9ec7-93f3aa8f8979, portal: 192.168.1.10,3260]: successful

5.5.2 認識確認
===============
    # fdisk -l

    Disk /dev/vda: 41.9 GB, 41943040000 bytes
    255 heads, 63 sectors/track, 5099 cylinders
    Units = シリンダ数 of 16065 * 512 = 8225280 bytes

    デバイス Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5099    40853295   8e  Linux LVM

    Disk /dev/sda: 10.7 GB, 10737418240 bytes
    64 heads, 32 sectors/track, 10240 cylinders
    Units = シリンダ数 of 2048 * 512 = 1048576 bytes

    ディスク /dev/sda は正常な領域テーブルを含んでいません

    Disk /dev/sdb: 104 MB, 104857600 bytes
    4 heads, 50 sectors/track, 1024 cylinders
    Units = シリンダ数 of 200 * 512 = 102400 bytes

    ディスク /dev/sdb は正常な領域テーブルを含んでいません

5.5.3 ファイルシステムの作成
=============================
    パーティションを作成し、フォーマットする。

    # fdisk /dev/sda

    --- 抜粋 ---
    デバイス Boot      Start         End      Blocks   Id  System
    /dev/sda1               1       10240    10485744   83  Linux

    # mkfs.ext3 /dev/sda1
    mke2fs 1.39 (29-May-2006)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    1310720 inodes, 2621436 blocks
    131071 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=2684354560
    80 block groups
    32768 blocks per group, 32768 fragments per group
    16384 inodes per group
    Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done

    This filesystem will be automatically checked every 27 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.

5.6 両ノードからのマウント確認
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   最初にマウントした側をアンマウントして、反対側のノードからマウントできることを確認する。

5.6.1 rhcs-oracle1から
=======================
    # mkdir /oradata
    # mount -t ext3 /dev/sda1 /oradata
    # touch /oradata/test
    # umount /oradata

5.6.2 rhcs-oracle2から
=======================
    # mount -t ext3 /dev/sdb1 /oradata
    # ls -alF /oradata
    合計 28
    drwxr-xr-x  3 root root  4096 10月 17 21:26 ./
    drwxr-xr-x 25 root root  4096 10月 17 21:38 ../
    drwx------  2 root root 16384 10月 17 21:22 lost+found/
    -rw-r--r--  1 root root     0 10月 17 21:26 test
    # umount /oradata

6 RHCSの基本設定
^^^^^^^^^^^^^^^^^

6.1 クラスタ化されるノードの設定
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   両ノードで以下のパッケージをインストールする。
   RHEL/CentOS共通
   # yum install ricci
   # reboot
   多数のカーネルモジュールやサービスがインストールされるので、再起動した方が良い。

6.1.1 yum が使えない場合。
===========================
    下記のパッケージを個別にインストールする。
    # rpm -ihv Server/perl-XML-LibXML-Common-0.13-8.2.2.i386.rpm
    # rpm -ihv Server/perl-XML-NamespaceSupport-1.09-1.2.1.noarch.rpm
    # rpm -ihv Server/perl-XML-SAX-0.14-8.noarch.rpm
    # rpm -ihv Server/perl-XML-LibXML-1.58-6.i386.rpm
    # rpm -ihv Server/perl-Net-Telnet-3.03-5.noarch.rpm
    # rpm -ihv Server/openais-0.80.6-16.el5.i386.rpm
    # rpm -ihv Server/pexpect-2.3-3.el5.noarch.rpm
    # rpm -ihv Server/cman-2.0.115-34.el5.i386.rpm
    # rpm -ihv Server/oddjob-libs-0.27-9.el5.i386.rpm Server/oddjob-0.27-9.el5.i386.rpm
    # rpm -ihv Cluster/modcluster-0.12.1-2.el5.i386.rpm
    # rpm -ihv Cluster/ricci-0.12.2-12.el5.i386.rpm
    # rpm -ihv Server/sg3_utils-libs-1.25-4.el5.i386.rpm
    # rpm -ihv Server/sg3_utils-1.25-4.el5.i386.rpm
    # rpm -ihv Cluster/rgmanager-2.0.52-6.el5.i386.rpm
    # rpm -ihv ClusterStorage/lvm2-cluster-2.02.56-7.el5.i386.rpm
    # rpm -ihv ClusterStorage/cmirror-1.1.39-8.el5.i386.rpm
    # rpm -ihv ClusterStorage/kmod-cmirror-0.1.22-3.el5.i686.rpm     <- 自分のカーネルにあったもの
    # rpm -ihv ClusterStorage/kmod-gfs-0.1.34-12.el5.i686.rpm        <- 自分のカーネルにあったもの
    # rpm -ihv Server/gfs2-utils-0.1.62-20.el5.i386.rpm
    # rpm -ihv ClusterStorage/gfs-utils-0.1.20-7.el5.i386.rpm

6.2 クラスタ管理サーバを設定
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Standby側のノードで設定する。管理機能は同居でも分離でも良い。

   # yum install luci

6.2.1 yum が使えない場合
=========================
    以下を個別にインストールする。
    # rpm -ihv Server/tix-8.4.0-11.fc6.i386.rpm
    # rpm -ihv Server/tkinter-2.4.3-27.el5.i386.rpm
    # rpm -ihv Server/python-imaging-1.1.5-5.el5.i386.rpm
    # rpm -ihv Cluster/luci-0.12.2-12.el5.i386.rpm

    管理サーバの初期化
    # luci_admin init
    # service luci restart

6.2.2 管理画面へのアクセス
===========================
    サービスを再起動したときに表示されるアドレスへブラウザでアクセスする。



6.3 クラスタノードを管理サーバへ参加
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   管理サーバから、各ノードをクラスタへ参加させる。

   進行中

   正常終了


   ここらで力尽きた。ここからはGUIで設定になるので、そんなに難しくない。
   スクリーンショットを切り取るの面倒だ。。。

6.4 Fencingの設定
~~~~~~~~~~~~~~~~~~
   障害が発生したノードのI/Oを強制的に設定する仕組み。
   データ保全にかかわる重要な項目なので、環境に合わせて必ず設定すること。
   (動かすだけなら設定しなくても良い)

6.5 Quorumディスクの設定
~~~~~~~~~~~~~~~~~~~~~~~~~
   RHCSは障害時のリソース管理に各ノードからの投票方式(vote)を用いている。
   2ノードの場合、1:1で投票数が等しくなってしまうため、
   クォーラムディスクを第三の投票者として設定し、
   クォーラムの所有権を取得したノードに投票が行われるように設定する必要がある。

7 RHCSのリソースとグループの設定
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

7.1 リソース 仮想IPの設定
~~~~~~~~~~~~~~~~~~~~~~~~~~

7.2 リソース 共有ディスクの設定
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

7.3 グループ 依存関係の定義
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

7.4 グループ 起動と停止の確認
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

8 単体SPFテスト
^^^^^^^^^^^^^^^^

8.1 OS起動・停止
~~~~~~~~~~~~~~~~~

8.2 手動フェイルオーバー
~~~~~~~~~~~~~~~~~~~~~~~~~

8.3 手動フェイルバック
~~~~~~~~~~~~~~~~~~~~~~~

8.4 ネットワーク切断
~~~~~~~~~~~~~~~~~~~~~

8.5 ストレージパス切断
~~~~~~~~~~~~~~~~~~~~~~~

9 Oracle設定
^^^^^^^^^^^^^

9.1 インストール
~~~~~~~~~~~~~~~~~

9.2 パッチ適用
~~~~~~~~~~~~~~~

9.3 データベースの作成
~~~~~~~~~~~~~~~~~~~~~~~

9.4 リスナーの作成
~~~~~~~~~~~~~~~~~~~

9.5 起動・停止スクリプトの作成
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

9.6 設定ファイルを両ノードのコピー
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

9.7 両ノードでデータベースとリスナーが起動する事を確認
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

10 RHCSへのOracle組込み
^^^^^^^^^^^^^^^^^^^^^^^^

10.1 Oracleリソースの作成
~~~~~~~~~~~~~~~~~~~~~~~~~~

10.2 依存関係の定義
~~~~~~~~~~~~~~~~~~~~

10.3 起動・停止・フェイルオーバーテスト
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

11 結合SPFテスト
^^^^^^^^^^^^^^^^^

11.1 ネットワーク障害
~~~~~~~~~~~~~~~~~~~~~~

11.2 ストレージ障害
~~~~~~~~~~~~~~~~~~~~

11.3 OS障害
~~~~~~~~~~~~

11.4 データベース障害
~~~~~~~~~~~~~~~~~~~~~~

11.5 リスナー障害
~~~~~~~~~~~~~~~~~~