しかし、フェールオーバ機能を用いたActive/Passiveアーキテクチャのシステムを保護する場合にはどうでしょう。他社のクラスタシステムを使うことを考慮されることが多いと思います。
Oracle Clusterwareテクノロジーは、Oracle DatabaseやOracle Unbreakable Linuxに追加費用は不要であることは多くの人がご存じのことですが、Oracle RACと関連づけてらっしゃることが多いため、ほとんどフェールオーバソリューションを構築する際に使われることがありません。
Oracle 11gR2 Grid Infrastructureの1コンポーネントであるOracle Clusterware 11gR2は、自動フェールオーバ構成を設定するための総合的なフレームワークを提供します。
実際に、ほとんどすべてのアプリケーション(簡単なxclockからもっとも複雑なアプリケーションサーバまで)をフェールオーバさせることができ、そして保護することができます。
Oracle Clusterwareは、単一サーバーをクラスタリングすることで、単一のシステムとして機能させるポータブル・クラスタ・システムです。また、 Oracle Clusterwareは、Oracle Real Application Clusters(RAC)に必要なインフラストラクチャを提供します。さらに、すべてのOracleアプリケーションや、クラスタ内にある他のあらゆる種類のアプリケーションを保護します。次の数行で、この目的を達成するための違う手順を提示しようと思っています。
動作する11gR2データベースを自動フェイルオーバー機能によって完全に保護する
読者がOracle Database 11gR2やOracle Grid Infrastructure 11gR2をLinux上にインストールすることに慣れており、(共有ストレージとして使っているので)ASMの構成も全く問題ないものと仮定します。もしそうでないなら、Oracleの製品ドキュメントをご覧ください。
Oracle VirtualBox環境でテストを実施しました。スクリプトはテスト済みで、問題なく動作していますが、スクリプト中の文字にTypoや間違いがある可能性もあります。
このエントリはClusterware Frameworkに関連する教育コースを置き換えるものではありません。Clusterwareの機能が非常に強力であることを知って頂きたいと思います。
注意:このエントリはPhilip Newlanのコメントを受けて改訂されています。
事前に準備しておくもの
- OSレベルが一致するLinuxが動作するハードウェア2台(OELCluster01、OELCluster02)
- 今回はOEL5u5とEnterprise Kernelを使用
- VirtualBox上に共有ストレージ(SAN)
- 今回はOpenfireを使ってSANをシミュレーショトしました。
- Oracle Database 11gR2 (11.2.0.1)
- Oracle Grod Infrastructure 11gR2 (11.2.0.1)
- asmlibを使って3個のASMディスクを作成(ASM_CRS、ASM_DTA、ASM_FRA)
- クラスタ用にGrid Infrastructureをインストール(OELCluste01、OELCluster02の2ノードがクラスタを構成)
- ASM_CRS:Voting DiskとOCRを格納
- SCANを使用
- 両ノードにOracle Databaseをスタンドアロン構成でインストール
- asmcaを使って両ノードにディスクグループをチェックおよびマウント
- dbcaを使ってプライマリノードにデータベースを作成し構成
- インスタンス名はDB11G
- pfileをもう一方のノードへコピー
- adumpディレクトリを他方のノードで作成
dbcaで作成後、Grid Infratructureで利用可能なOracle RestartテクノロジーがDBを自動的に保護しますので、クラッシュした場合(kill -9 smonなど)には(可能であれば)自動的に再起動します。
データベースリソースはCluster Registryに作成されていて、次のコマンドで監視することができます。このコマンドは ora.dba11g.db エントリを表示します。
crsctl status resource ora.dba11g.dbでは以下の手順でこのリソース定義を保存しておきましょう。
- mkdir -p /crs/11.2.0/HA_scripts
- chown oracle:oinstall /crs/11.2.0/HA_scripts
- crsctl status resource ora.db.11g.db -p > /crs/11.2.0/HA_scripts/myResource.txt
- srvctl stop database -d DB11G
- srvctl remove database -d DB11G
- スクリプトを作成します。
/crs/11.2.0/HA_scripts/my_ActivePassive_Cluster.sh
#!/bin/bash
export ORACLE_HOME=/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=DB11G
case $1 in
'start')
$ORACLE_HOME/bin/sqlplus /nolog <<EOF
connect / as sysdba
startup
EOF
RET=0
;;
'stop')
$ORACLE_HOME/bin/sqlplus /nolog <<EOF
connect / as sysdba
shutdown immediate
EOF
RET=0
;;
'clean')
$ORACLE_HOME/bin/sqlplus /nolog <<EOF
connect / as sysdba
shutdown abort
##for i in `ps -ef | grep -i $ORACLE_SID | awk '{print $2}' ` ;do kill -9 $i; done
EOF
RET=0
;;
'check')
ok=`ps -ef | grep smon | grep $ORACLE_SID | wc -l`
if [ $ok = 0 ]; then
RET=1
else
RET=0
fi
;;
'*')
RET=0
;;
esac
if [ $RET -eq 0 ]; then
exit 0
else
exit 1
fi
さらに、11.2では削除メソッドは必須で、shutdown abortか、もしくはkill -9で残っているプロセスをすべて停止する機能を用意しておく必要があります。
- chmod +x /crs/11.2.0/HA_scripts/my_ActivePassive_Cluster.sh
- scp /crs/11.2.0/HA_scripts/my_ActivePassive_Cluster.sh oracle@OELCluster02:/crs/11.2.0/HA_scripts
NAME=ora.db11g.dbmyResource.txtからデータベースタイプに関連するエントリを削除し、少々手を加えて、以下のようなmyNewResource.txtを作成します。注意すべき点は以下の通りです。
TYPE=ora.database.type
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
ACTIVE_PLACEMENT=1
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
AUTO_START=restore
CARDINALITY=1
CHECK_INTERVAL=1
CHECK_TIMEOUT=600
CLUSTER_DATABASE=false
DB_UNIQUE_NAME=DB11G
DEFAULT_TEMPLATE=PROPERTY(RESOURCE_CLASS=database) PROPERTY(DB_UNIQUE_NAME= CONCAT(PARSE(%NAME%, ., 2), %USR_ORA_DOMAIN%, .)) ELEMENT(INSTANCE_NAME= %GEN_USR_ORA_INST_NAME%)
DEGREE=1
DESCRIPTION=Oracle Database resource
ENABLED=1
FAILOVER_DELAY=0
FAILURE_INTERVAL=60
FAILURE_THRESHOLD=1
GEN_AUDIT_FILE_DEST=/oracle/admin/DB11G/adump
GEN_USR_ORA_INST_NAME=
GEN_USR_ORA_INST_NAME@SERVERNAME(oelcluster01)=DB11G
HOSTING_MEMBERS=
INSTANCE_FAILOVER=0
LOAD=1
LOGGING_LEVEL=1
MANAGEMENT_POLICY=AUTOMATIC
NLS_LANG=
NOT_RESTARTING_TEMPLATE=
OFFLINE_CHECK_INTERVAL=0
ORACLE_HOME=/oracle/product/11.2.0/dbhome_1
PLACEMENT=restricted
PROFILE_CHANGE_TEMPLATE=
RESTART_ATTEMPTS=2
ROLE=PRIMARY
SCRIPT_TIMEOUT=60
SERVER_POOLS=ora.DB11G
SPFILE=+DTA/DB11G/spfileDB11G.ora
START_DEPENDENCIES=hard(ora.DTA.dg,ora.FRA.dg) weak(type:ora.listener.type,uniform:ora.ons,uniform:ora.eons) pullup(ora.DTA.dg,ora.FRA.dg)
START_TIMEOUT=600
STATE_CHANGE_TEMPLATE=
STOP_DEPENDENCIES=hard(intermediate:ora.asm,shutdown:ora.DTA.dg,shutdown:ora.FRA.dg)
STOP_TIMEOUT=600
UPTIME_THRESHOLD=1h
USR_ORA_DB_NAME=DB11G
USR_ORA_DOMAIN=haroland
USR_ORA_ENV=
USR_ORA_FLAGS=
USR_ORA_INST_NAME=DB11G
USR_ORA_OPEN_MODE=open
USR_ORA_OPI=false
USR_ORA_STOP_MODE=immediate
VERSION=11.2.0.1.0
- NAMEプロパティにはora.をつけない
- TYPEプロパティはora.database.typeではないが、cluster_resourceである
- ACTION_SCRIPTの定義をしておく
- HOSTING_MEMBERSでクラスタメンバーを列挙しておく(olsnodesコマンドの返値)
NAME=DB11G.db
TYPE=cluster_resource
DESCRIPTION=Oracle Database resource
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_SCRIPT=/crs/11.2.0/HA_scripts/my_ActivePassive_Cluster.sh
PLACEMENT=restricted
ACTIVE_PLACEMENT=0
AUTO_START=restore
CARDINALITY=1
CHECK_INTERVAL=10
DEGREE=1
ENABLED=1
HOSTING_MEMBERS=oelcluster01 oelcluster02
LOGGING_LEVEL=1
RESTART_ATTEMPTS=1
START_DEPENDENCIES=hard(ora.DTA.dg,ora.FRA.dg) weak(type:ora.listener.type,uniform:ora.ons,uniform:ora.eons) pullup(ora.DTA.dg,ora.FRA.dg)
START_TIMEOUT=600
STOP_DEPENDENCIES=hard(intermediate:ora.asm,shutdown:ora.DTA.dg,shutdown:ora.FRA.dg)
STOP_TIMEOUT=600
UPTIME_THRESHOLD=1h
そしてリソースを登録します。リソースタイプに注意しましょう。ora.database.typeリソースではなく、cluster_resourceです(Oracleの推奨)。
- crsctl add resource DB11G.db -type cluster_resource -file /crs/11.2.0/HA_scripts/myNewResource.txt
Step-3 リソースを起動
- crsctl start resource DB11G.db
Step-4 テスト
2個のメソッドを使ってセットアップをテストします。
- crsctl relocate resource DB11G.db
結論
ソフトウェアをインストールし、スタンドアロンのデータベースを作成するという、非常に一般的で通常の作業をした後の手順は非常に簡単です。
- 実行スクリプトをクラスタを構成するすべてのノードに配置
- リソースファイルを作成
- リソースファイルを使ってOCRにリソースを作成・登録
- リソースの開始
参考URL
- Oracle Clusterware 11gR2管理およびデプロイメントガイド
http://download.oracle.com/docs/cd/E16338_01/rac.112/b56289/toc.htm - Oracle Clusterwareのリソース・リファレンス
http://download.oracle.com/docs/cd/E16338_01/rac.112/b56289/resatt.htm - Clusterware for Unbreakable Linux
http://www.oracle.com/technetwork/jp/database/clusterware/overview/clusterware-for-unbreakable-linux-088663.html
- Using Oracle Clusterware to Protect A Single Instance Oracle Database 11gR1 (to have an idea of complexity)
http://www.oracle.com/technetwork/jp/database/clusterware/overview/si-db-failover-11g-134623.pdf
- Oracle Clusterware on OTN
http://www.oracle.com/technetwork/jp/database/clusterware/overview/index-090666.html
原文はこちら。
http://blogs.oracle.com/xpsoluxdb/2011/02/clusterware_11gr2_setting_up_an_activepassive_failover_configuration.html
0 件のコメント:
コメントを投稿