cluster.oracle.iniファイルによるOracle Clusterware管理の構成
cluster.oracle.ini
ファイルの情報は、TimesTenデータベース、TimesTenプロセス、ユーザー・アプリケーションおよび仮想IPアドレスを管理するOracle Clusterwareリソースの作成に使用されます。cluster.oracle.ini
という初期化ファイルをテキスト・ファイルとして作成します。
ノート:
cluster.oracle.ini
ファイルで使用できるすべての属性の詳細は、Oracle ClusterwareのTimesTen構成属性を参照してください。
ttCWAdmin -create
コマンドはこのファイルを読み取って構成情報を参照するので、このテキスト・ファイルの場所はttCWAdmin
によってアクセス可能かつ読取り可能であることが必要でます。ttCWAdmin
ユーティリティを使用して、Oracle Clusterwareで管理されているクラスタ内のTimesTenアクティブ・スタンバイ・ペアを管理します。
このファイルは、アクティブ・データベースのホストにあるTimesTenデーモン・ホーム・ディレクトリに置くことをお薦めします。ただし、ttCWAdmin -create
コマンドを実行するホストと同じホストにある任意のディレクトリまたは共有ドライブにこのファイルを置くこともできます。
このファイルのデフォルトの場所は、timesten_home
/conf
ディレクトリです。このファイルを別の場所に置く場合は、-ttclusterini
オプションを指定して場所のパスを識別します。
cluster.oracle.ini
ファイルのエントリ名は、sys.odbc.ini
ファイルの既存のシステムDSNと同じである必要があります。たとえば、[basicDSN]
は、「基本的な可用性の構成」で説明されているcluster.oracle.ini
ファイル内のエントリ名です。また、[basicDSN]
は、各ホスト上のsys.odbc.ini
ファイル内のDataStore
およびData Source Name
データ・ストア属性である必要があります。たとえば、host1
にあるDSN basicDSN
のsys.odbc.ini
ファイルは次のようになります。
[basicDSN] DataStore=/path1/basicDSN LogDir=/path1/log DatabaseCharacterSet=AL32UTF8 ConnectionCharacterSet=AL32UTF8
host2
にあるbasicDSN
のsys.odbc.ini
ファイルには異なるパスを指定できますが、その他すべての属性は同じである必要があります。
[basicDSN] DataStore=/path2/basicDSN LogDir=/path2/log DatabaseCharacterSet=AL32UTF8 ConnectionCharacterSet=AL32UTF8
次の項では、cluster.oracle.ini
ファイルのサンプル構成を示します。
基本的な可用性の構成
この例では、サブスクライバを持たないアクティブ・スタンバイ・ペアを示します。
アクティブ・データベースのホストは最初のMasterHost
で定義されており(host1
)、スタンバイ・データベースのホストはリストの2つ目のMasterHost
(host2
)です。リスト内の各ホストはカンマで区切ります。必要に応じて、読みやすくするために空白を含めることができます。
[basicDSN] MasterHosts=host1,host2
次の例では、host3
にある、1つのサブスクライバを持つアクティブ・スタンバイ・ペアのcluster.oracle.ini
ファイルを示します。
[basicSubscriberDSN] MasterHosts=host1,host2 SubscriberHosts=host3
高度な可用性の構成
高度な可用性を実現するには、予備のマスター・ホストまたはサブスクライバ・ホストを構成します。これらのホストは、アクティブ・スタンバイ・ペア・レプリケーション・スキームで使用されるマスター・ホストまたはサブスクライバ・ホストが予期しないシャットダウンやリカバリ不能なエラーの発生により置換えが必要になるまで、アイドル状態に維持されます。
「基本的な可用性の構成」で説明されているように、cluster.oracle.ini
ファイル内のMasterHosts
属性により、マスター・ノードとして使用されるホストを構成します。アクティブ・スタンバイ・ペア・レプリケーション・スキームでは、2つのマスター・ホストのみ必要です(1つはアクティブ、もう1つはスタンバイになります)。障害が発生すると、停止しなかったホストがアクティブになり(まだアクティブでない場合)、停止したホストはリカバリ後にスタンバイになります。ただし、停止したホストをリカバリできず、cluster.oracle.ini
ファイルで3つ以上のホストをマスター・ホストとして指定している場合、リスト内の次のマスター・ホストがリカバリ不能なマスター・ポストを置き換えるようにインスタンス化されます。
たとえば、次の例は複数マスター・ホストの構成を示します。最初の2つのマスター・ホスト(host1
とhost2
)はアクティブとスタンバイになります。次の2つのマスター・ホスト(host3
とhost4
)は、リカバリ不能な障害が発生した場合にhost1
またはhost2
のいずれかと入れ替えるために使用できます。
MasterHosts=host1,host2,host3,host4
3つ以上のホストを構成する場合、TimesTenリソースを管理するOracle Clusterwareリソースのみで使用される2つの仮想IP (VIP)アドレスも構成する必要があります。これらのVIPアドレスを使用することにより、レプリケーションを管理するTimesTen内部プロセスは、リカバリ不能なホスト・エラーにより発生するいずれのマスター・ホスト変更の影響も受けなくなります。
ノート:
「仮想IPアドレスを管理するためのOracle Clusterwareリソースの作成」で説明されているように、これらのVIPアドレス(高度な可用性で使用される)を管理するOracle Clusterwareリソースは、ttCWAdmin -createVIPs
コマンドを使用して作成されます。
これらのVIPアドレスは、Oracle Clusterwareで使用するために定義されている他のいずれのVIPアドレスまたはユーザー・アプリケーションにより使用されるいずれのVIPアドレスとも異なる必要があります。さらに、アプリケーションがこれらのVIPアドレスを使用すると、マスター・ホストで障害(リカバリ可能またはリカバリ不可能)が発生したときにアプリケーションでエラーが発生することがあります。ユーザー・アプリケーションは、クライアント・フェイルオーバーの方法として、またはアクティブ・データベースとスタンバイ・データベースが切り替わったときに自身を隔離するための方法として、これらのVIPアドレスを使用することはできません。
2つのVIPアドレスをMasterVIP
パラメータに指定します。アクティブ・スタンバイ・ペアのレプリケーション・スキームの各マスター・ホストに1つずつです。TimesTenクラスタに指定されたVIPアドレスは、Oracle Clusterwareですでに定義および使用されているVIPアドレスとは異なる必要があります。特に、Oracle Clusterwareのインストール時に指定されたVIPアドレスをTimesTenで使用することはできません。
MasterVIP=192.168.1.1, 192.168.1.2
次のパラメータも、cluster.oracle.ini
ファイル内で高度な可用性に関連付けられます。
-
MasterHosts
に類似するSubscriberHosts
は、サブスクライバ・データベースを含むことができるホストの名前をリストします。 -
MasterVIP
に類似するSubscriberVIP
は、サブスクライバ・ノードを管理するためにTimesTenが内部で使用できるVIPアドレスを提供します。 -
VIPInterface
は、パブリック・ネットワーク・アダプタの名前です。 -
VIPNetMask
は、仮想IPアドレスのネットマスクを定義します。
次の例では、アクティブ・データベースおよびスタンバイ・データベースのホストは、それぞれhost1
およびhost2
です。リカバリ不能なエラーが発生した場合にインスタンス化できるホストは、host3
およびhost4
です。サブスクライバ・ノードはありません。VIPInterface
は、パブリック・ネットワーク・アダプタの名前です。VIPNetMask
は、仮想IPアドレスのネットマスクを定義します。
[advancedDSN] MasterHosts=host1,host2,host3,host4 MasterVIP=192.168.1.1, 192.168.1.2 VIPInterface=eth0 VIPNetMask=255.255.255.0
次の例では、単一のサブスクライバがhost4
上に構成されます。SubscriberHosts
には、マスター・データベースのフェイルオーバーに使用できる追加のホストが1つと、サブスクライバ・データベースのフェイルオーバーに使用できる追加のノードが1つ定義されます。MasterVIP
およびSubscriberVIP
は、マスター・データベースおよびサブスクライバ・ホストに対して定義されている仮想IPアドレスを指定します。
[advancedSubscriberDSN] MasterHosts=host1,host2,host3 SubscriberHosts=host4,host5 MasterVIP=192.168.1.1, 192.168.1.2 SubscriberVIP=192.168.1.3 VIPInterface=eth0 VIPNetMask=255.255.255.0
追加のマスター・ノードが次のようになっていることを確認します。
-
TimesTenがインストールされている
-
ダイレクト・モードのアプリケーションがインストールされている(構成の一部である場合)。「アプリケーション・フェイルオーバーの実装」を参照してください。
アクティブ・スタンバイ・ペアでのキャッシュ・グループの包含
アクティブ・スタンバイ・ペアが1つ以上のAWTまたは読取り専用キャッシュ・グループをレプリケートする場合、CacheConnect
属性をy
に設定します。
この例では、CacheConnect
属性をy
に設定します。この例では、高度な可用性の構成で、1つのサブスクライバがあるアクティブ・スタンバイ・ペアを指定します。アクティブ・スタンバイ・ペアによって、1つ以上のキャッシュ・グループがレプリケートされます。
[advancedCacheDSN] MasterHosts=host1,host2,host3 SubscriberHosts=host4, host5 MasterVIP=192.168.1.1, 192.168.1.2 SubscriberVIP=192.168.1.3 VIPInterface=eth0 VIPNetMask=255.255.255.0 CacheConnect=y
アプリケーション・フェイルオーバーの実装
Oracle Clusterwareと統合されたTimesTenでは、アクティブ・スタンバイ・ペアの任意のデータベースにリンクされたTimesTenアプリケーションのフェイルオーバーを簡素化できます。
TimesTenは、Oracle ClusterwareおよびTimesTenと同じホストにある、ダイレクト・モードのアプリケーションとクライアント/サーバー・モードのアプリケーションの両方を管理できます。
TimesTenアプリケーションのフェイルオーバーに必要なcluster.oracle.ini
ファイルの属性は、次のとおりです。
-
AppName
: Oracle Clusterwareで管理されるアプリケーションの名前。 -
AppStartCmd
: アプリケーションを起動するコマンドライン。 -
AppStopCmd
: アプリケーションを停止するコマンドライン。 -
AppCheckCmd
:AppName
で指定されたアプリケーションのステータスを確認するアプリケーションを実行するためのコマンドライン。 -
AppType
: アプリケーションのリンク先となるデータベースを定義します。使用可能な値は、Active
、Standby
、DualMaster
、Subscriber (all)
およびSubscriber
[
index
]
です。
AppFailureThreshold
、DatabaseFailoverDelay
、AppScriptTimeout
など、構成可能なオプションの属性が複数あります。表A-3は、すべてのオプション属性とそのデフォルト値の一覧および説明を示しています。
TimesTenアプリケーション・モニター・プロセスは、ユーザー指定のスクリプトまたはAppCheckCmd
で指定されたプログラムを使用して、アプリケーションを監視します。アプリケーションのステータスを確認するスクリプトは、成功の場合は0
を返し、失敗の場合は0以外を返すように記述されている必要があります。0(ゼロ)以外の値が検出されると、Oracle Clusterwareは、障害が発生したアプリケーションをリカバリするためのアクションを実行します。
この例では、サブスクライバを持たないアクティブ・スタンバイ・ペアに対して構成されている高度な可用性を示します。reader
アプリケーションは、スタンバイ・データベースのデータを問い合せるアプリケーションです。AppStartCmd
、AppStopCmd
およびAppCheckCmd
には、start
、stop
およびcheck
コマンドなどの引数を含めることができます。
ノート:
AppStartCmd
、AppStopCmd
およびAppCheckCmd
の値に引用符を使用しないでください。
[appDSN] MasterHosts=host1,host2,host3,host4 MasterVIP=192.168.1.1, 192.168.1.2 VIPInterface=eth0 VIPNetMask=255.255.255.0 AppName=reader AppType=Standby AppStartCmd=/mycluster/reader/app_start.sh start AppStopCmd=/mycluster/reader/app_stop.sh stop AppCheckCmd=/mycluster/reader/app_check.sh check
2つ以上のアプリケーションのフェイルオーバーを構成できます。AppName
を使用してアプリケーションを指定し、AppName
属性のすぐ後に続くAppType
、AppStartCmd
、AppStopCmd
およびAppCheckCmd
の値を指定します。読みやすくするために空白行を含めることができます。たとえば:
[app2DSN] MasterHosts=host1,host2,host3,host4 MasterVIP=192.168.1.1, 192.168.1.2 VIPInterface=eth0 VIPNetMask=255.255.255.0 AppName=reader AppType=Standby AppStartCmd=/mycluster/reader/app_start.sh AppStopCmd=/mycluster/reader/app_stop.sh AppCheckCmd=/mycluster/reader/app_check.sh AppName=update AppType=Active AppStartCmd=/mycluster/update/app2_start.sh AppStopCmd=/mycluster/update/app2_stop.sh AppCheckCmd=/mycluster/update/app2_check.sh
AppType
をDualMaster
に設定すると、アプリケーションはアクティブ・ホストとスタンバイ・ホストの両方で起動します。アクティブ・ホストでアプリケーションが停止すると、そのホスト上のアクティブ・データベースおよびその他すべてのアプリケーションがスタンバイ・ホストにフェイルオーバーします。AppFailureInterval
、AppRestartAttempts
およびAppUptimeThreshold
属性を設定することによって、障害間隔、再起動の試行回数および稼働時間のしきい値を構成できます。これらの属性にはデフォルト値があります。たとえば:
[appDualDSN] MasterHosts=host1,host2,host3,host4 MasterVIP=192.168.1.1, 192.168.1.2 VIPInterface=eth0 VIPNetMask=255.255.255.0 AppName=update AppType=DualMaster AppStartCmd=/mycluster/update/app2_start.sh AppStopCmd=/mycluster/update/app2_stop.sh AppCheckCmd=/mycluster/update/app2_check.sh AppRestartAttempts=5 AppUptimeThreshold=300 AppFailureInterval=30
ノート:
「Oracle ClusterwareのTimesTen構成属性」を参照してください。
両方のマスター・ノードに恒久的な障害が発生した場合のリカバリの構成
両方のマスター・ノードに障害が発生し、その後復旧した場合、Oracle Clusterwareは、自動的にマスター・データベースをリカバリできます。
一時的な二重の障害から自動リカバリするには、次の条件が満たされている必要があります。
-
アクティブ・スタンバイ・ペアに
RETURN TWOSAFE
が指定されていない。 -
AutoRecover
がy
に設定されている。 -
RepBackupDir
が共有記憶域のディレクトリを指定している。 -
RepBackupPeriod
が0
より大きい値に設定されている。
両方のマスター・ノードに永続的な障害が発生した場合、Oracle Clusterwareは、自動的にマスター・データベースを2つの新しいノードにリカバリできます。次の条件が満たされている必要があります。
-
高度な可用性(仮想IPアドレスおよび少なくとも4つのホスト)が構成されている。
-
アクティブ・スタンバイ・ペアがキャッシュ・グループをレプリケートしていない。
-
RETURN TWOSAFE
が指定されていない。 -
AutoRecover
がy
に設定されている。 -
RepBackupDir
が共有記憶域のディレクトリを指定している。 -
RepBackupPeriod
が0
より大きい値に設定されている。
TimesTenは最初にアクティブ・データベースの全体バックアップを実行し、次に増分バックアップを実行します。オプションの属性RepFullBackupCycle
を指定すると、TimesTenがその後の全体バックアップを実行するタイミングを管理できます。デフォルトでは、TimesTenは、増分バックアップを5回実行するたびに完全バックアップを1回実行します。
RepBackupDir
およびRepBackupPeriod
をバックアップに構成している場合、TimesTenは、アクティブになるすべてのマスター・データベースのバックアップを実行します。データベースが再度アクティブにならないかぎり、かつてアクティブとして使用され今はスタンバイになっているデータベースに対して実行されたバックアップは削除されません。2つの完全なデータベース・バックアップ用に十分な共有記憶域が必要です。ttCWAdmin -restore
コマンドによって、正しいバックアップ・ファイルが自動的に選択されます。
増分バックアップでは、トランザクション・ログ・ファイルのログ・レコードの量が増えます。RepBackupPeriod
およびRepFullBackupCycle
の値を十分に小さくし、トランザクション・ログ・ファイルのログ・レコードが大量にならないようにします。
この例では、自動リカバリの属性設定を示します。
[autorecoveryDSN]
MasterHosts=host1,host2,host3,host4
MasterVIP=192.168.1.1, 192.168.1.2
VIPInterface=eth0
VIPNetMask=255.255.255.0
AutoRecover=y
RepBackupDir=/shared_drive/dsbackup
RepBackupPeriod=3600
アクティブ・スタンバイ・ペアにキャッシュ・グループがある場合、または両方のマスター・ホストの障害から手動でリカバリする場合は、AutoRecover
がn
(デフォルト)に設定されていることを確認します。手動リカバリでは、次のこと必要です。
-
RepBackupDir
が共有記憶域のディレクトリを指定している -
RepBackupPeriod
が0
より大きい値に設定されている。
この例では、手動リカバリの属性設定を示します。AutoRecover
のデフォルト値はn
であるため、このファイルには含まれていません。
[manrecoveryDSN]
MasterHosts=host1,host2,host3
MasterVIP=192.168.1.1, 192.168.1.2
VIPInterface=eth0
VIPNetMask=255.255.255.0
RepBackupDir=/shared_drive/dsbackup
RepBackupPeriod=3600
RepDDL属性の使用
RepDDL
属性は、アクティブ・スタンバイ・ペアを作成するSQL文を表します。
RepDDL
属性はオプションです。これは、アクティブ・スタンバイ・ペアから表、キャッシュ・グループおよび順序を除外する場合に使用できます。
RepDDL
をcluster.oracle.ini
ファイルに含める場合は、ReturnServiceAttribute
、MasterStoreAttribute
またはSubscriberStoreAttribute
をcluster.oracle.ini
ファイルに指定しないでください。これらのレプリケーション設定は、RepDDL
属性に含めるようにしてください。
RepDDL
の値を指定する場合、データベース・ファイル名の接頭辞に<DSN>
マクロを使用します。マスター・ホスト名を指定するには、<MASTERHOST[1]>
および<MASTERHOST[2]>
マクロを使用します。TimesTenは、構成で仮想IPアドレスが使用されているかどうに応じて、MasterHosts
またはMasterVIP
属性の正しい値に置換します。同様に、サブスクライバ・ホスト名を指定するには、<SUBSCRIBERHOST[
n
]>
マクロを使用します(ここで、n
は、1からSubscriberHosts
属性値の合計数までの数値であるか、仮想IPアドレスが使用されている場合は1からSubscriberVIP
属性値の合計数までの数値です)。
RepDDL
属性を使用して、アクティブ・スタンバイ・ペアから表、キャッシュ・グループおよび順序を除外します。
[excludeDSN] MasterHosts=host1,host2,host3,host4 SubscriberHosts=host5,host6 MasterVIP=192.168.1.1, 192.168.1.2 SubscriberVIP=192.168.1.3 VIPInterface=eth0 VIPNetMask=255.255.255.0 RepDDL=CREATE ACTIVE STANDBY PAIR \ <DSN> ON <MASTERHOST[1]>, <DSN> ON <MASTERHOST[2]> SUBSCRIBER <DSN> ON <SUBSCRIBERHOST[1]>\ EXCLUDE TABLE pat.salaries, \ EXCLUDE CACHE GROUP terry.salupdate, \ EXCLUDE SEQUENCE ttuser.empcount
レプリケーション・エージェントのトランスミッタは、次の方法でルート情報を取得します(優先順に示します)。
-
RepDDL
設定のROUTE
句から(ROUTE
句が指定されている場合)。高度な可用性を構成している場合は、ROUTE
句を指定しないでください。 -
ローカル・ホストとリモート・ホストのプライベート・ホスト名およびパブリック・ホスト名を提供するとともに、リモート・デーモンのポート番号を提供するOracle Clusterwareから。プライベート・ホスト名は、パブリック・ホスト名より優先されます。レプリケーション・エージェントのトランスミッタがIPCソケットに接続できない場合、Oracle Clusterwareがレプリケーション・スキームに関して保持している情報を使用してリモート・デーモンへの接続を試行します。
-
アクティブ・ホストおよびスタンバイ・ホストから。失敗した場合、レプリケーション・エージェントはホスト名に基づいた接続方法を選択します。
この例では、RepDDL
にROUTE
句を指定します。
[routeDSN] MasterHosts=host1,host2,host3,host4 RepDDL=CREATE ACTIVE STANDBY PAIR \ <DSN> ON <MASTERHOST[1]>, <DSN> ON <MASTERHOST[2]>\ ROUTE MASTER <DSN> ON <MASTERHOST[1]> SUBSCRIBER <DSN> ON <MASTERHOST[2]>\ MASTERIP "192.168.1.2" PRIORITY 1\ SUBSCRIBERIP "192.168.1.3" PRIORITY 1\ MASTERIP "10.0.0.1" PRIORITY 2\ SUBSCRIBERIP "10.0.0.2" PRIORITY 2\ MASTERIP "140.87.11.203" PRIORITY 3\ SUBSCRIBERIP "140.87.11.204" PRIORITY 3\ ROUTE MASTER <DSN> ON <MASTERHOST[2]> SUBSCRIBER <DSN> ON <MASTERHOST[1]>\ MASTERIP "192.168.1.3" PRIORITY 1\ SUBSCRIBERIP "192.168.1.2" PRIORITY 1\ MASTERIP "10.0.0.2" PRIORITY 2\ SUBSCRIBERIP "10.0.0.1" PRIORITY 2\ MASTERIP "140.87.11.204" PRIORITY 3\ SUBSCRIBERIP "140.87.11.203" PRIORITY 3\