(この文書は未完成)
RHEL 標準のクラスタソフトである、RedHat Cluster Suite(RHCS)を使って、Active-StandbyなOracleクラスタサーバを構築する。
CentOSでもほとんど同じ手順でクラスタ構築が可能。
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 リスナー障害
~~~~~~~~~~~~~~~~~~