RAC One Node の検証 その5

投稿日: 2010年8月18日

<RAC One Node の検証 その5>
ペンネーム : ダーリン

暑い、熱い、アツイ。
さあ、今回もいま最もホットな RAC One Node を検証していきましょ
う。

Real Application Clusters なんだけれども、サービスを提供して
いるのは 1 つのノードだけという変わり種です。とはいっても、
RAC なのでやはり可用性が気になります。

前回までは HW メンテナンスなどの目的でサーバを停止させるよう
な場合においてもデータベースとしてのサービスを停止させずに、
かつトランザクションをできる限り保証しながらインスタンスを移
動させるという機能「Omotion」を検証してきました。

5 回目の今回は、RAC One Node のデータベースサーバで障害が発生
した場合にどんな挙動を示すのかをみてみましょう。

RAC 環境の障害といってもいろいろありますが、簡単に思いつくの
は以下のようなケースでしょうか。

1) サーバ停止
2) インスタンス障害・プロセス障害(Oracle、ASM、Grid)
3) ストレージ障害
4) インターコネクト障害
5) データファイル等の障害
6) 論理障害(オペミス等)

データファイル障害や、論理障害については RAC に限らずバック
アップやリカバリの設計が重要な内容です。

ここでは前半の障害について検証してみましょう。
今回はサーバ停止によるフェイルオーバーを確認します。

その前に検証前の状態を整理して。

・ノード1   :
  HOST_NAME  : oel55sv01
  ORACLE_SID : RON_1 

・ノード2  :
  HOST_NAME  : oel55sv02
  ORACLE_SID : RON_2 

( grid ユーザで実施)

------------------------------------------------------------
NAME           TARGET  STATE        SERVER    STATE_DETAILS
------------------------------------------------------------
Cluster Resources
------------------------------------------------------------
ora.oel55sv01.vip
      1        ONLINE  ONLINE       oel55sv01
ora.oel55sv02.vip
      1        ONLINE  ONLINE       oel55sv02
ora.ron.db
      1        ONLINE  ONLINE       oel55sv01  Open
ora.ron.srvron1.svc
      1        ONLINE  ONLINE       oel55sv01
------------------------------------------------------------

ora.oel55sv01.vip    : ノード1側の仮想 IP リソース
ora.oel55sv02.vip    : ノード2側の仮想 IP リソース
ora.ron.db           : データベースインスタンスリソース
ora.ron.srvron1.svc  : サービスリソース

ノード1側でデータベースインスタンスが起動しているのでまずは、
ノード1の OS シャットダウンからいってみましょう。では、、、
“シャットダウン なう!!”

# shutdown -h now

( grid ユーザで実施)

------------------------------------------------------------
NAME           TARGET  STATE        SERVER    STATE_DETAILS
------------------------------------------------------------
Cluster Resources
------------------------------------------------------------
ora.oel55sv01.vip
      1        ONLINE  INTERMEDIATE oel55sv02 FAILED OVER
ora.oel55sv02.vip
      1        ONLINE  ONLINE       oel55sv02
ora.ron.db
      1        ONLINE  ONLINE       oel55sv02 Open
ora.ron.srvron1.svc
      1        ONLINE  ONLINE       oel55sv02
------------------------------------------------------------

上記の仮想 IP 、データベースインスタンス、サービスは無事に
ノード2側に切り替わりました。

念のために問題なく接続できるかどうかを確認しておきましょう。

(oracleユーザで実施)

------------------------------------------------------------
$ sqlplus system/******@ron

SQL> select instance_name,host_name,status from v$instance

INSTANCE_NAME    HOST_NAME  STATUS
---------------- ---------- ------------
RON_1            oel55sv02  OPEN

------------------------------------------------------------

OKです。ん? インスタンス名が “RON_1” ….。
確かにシャットダウンする前にノード1側で起動していたデータベー
スの ORACLE_SID は “RON_1″ です。が、前回検証した Omotion で
はノード1側のインスタンス名とノード2側のインスタンス名は異
なっていました。Omotion で切り替えた場合は、”RON_2” になりま
す。

従来の HA ではサーバ自体が変わってもデータベースのインスタン
ス名は同じなので感覚的にはインスタンス名が変わらない方が理解
しやすいかもしれません。
ただし、RAC One Node の場合は、Omotion を使ったときと上記の
様に障害発生により切り替わった時でインスタンス名が変わってし
まうので運用上はちょっと注意が必要ですね。

Omotion で RAC One Node のアクティブノードを切る変える場合は
一時的に2ノード RAC の状態になります。よって、同じインスタ
ンス名を使うことはできないので、切替前後でインスタンス名が変
わるのは必然的です。

では障害発生時にインスタンス名が変わらない理由は?

インスタンスリカバリのことを考えれば、障害が発生したインスタ
ンスのオンライン REDO ログファイルを読む必要があることを考え
れば、障害が発生したインスタンスで再度起動するのは納得がいく
リカバリ方法だと考えられます。

では、インスタンスを元の状態に戻しましょう。

えーっと、Omotion でいいかなっと。
( oracle ユーザで実行してくださいね。)

$ Omotion

------------------------------------------------------------
RAC One Node databases on this cluster:

     

Available Target Server(s) :
 #            Server            Available
===     ==================      =========
ERROR: Cannot find any available servers in this cluster.

Exiting...
------------------------------------------------------------

おっと、シャットダウンしたサーバを起動していませんでした。

再起動してもう一度…

さてその結果は?

( grid ユーザで実施)

------------------------------------------------------------
NAME           TARGET  STATE        SERVER    STATE_DETAILS
------------------------------------------------------------
Cluster Resources
------------------------------------------------------------
ora.oel55sv01.vip
      1        ONLINE  ONLINE       oel55sv01
ora.oel55sv02.vip
      1        ONLINE  ONLINE       oel55sv02
ora.ron.db
      2        ONLINE  ONLINE       oel55sv01 Open
ora.ron.srvron1.svc
      1        ONLINE  ONLINE       oel55sv01
ora.scan1.vip
      1        ONLINE  ONLINE       oel55sv02
------------------------------------------------------------

データベースインスタンスは、問題なくノード1側に切り戻りまし
た。
念のため接続確認しておきましょう。

(oracleユーザで実施)

------------------------------------------------------------
$ sqlplus system/******@ron

SQL> select instance_name,host_name,status from v$instance

INSTANCE_NAME    HOST_NAME  STATUS
---------------- ---------- ------------
RON_2            oel55sv01  OPEN

------------------------------------------------------------

うーん。インスタンス名が変わってしまった。前出の通りの結果と
なっているのですが、これは少々混乱しそうです。

現在の状況

・ノード1   :
  HOST_NAME  : oel55sv01
  ORACLE_SID : RON_2 

・ノード2  :
  HOST_NAME  : oel55sv02
  ORACLE_SID : RON_1 

今回の検証環境では RAC One Node を構成するサーバを2つだけ用
意しています。これが3つ4つになった場合や、インスタンスの数
が増えた場合など運用上間違いが発生しないようにそれなりに気を
つける必要がありそうです。

特にバッチジョブや(監視などの)スクリプトにインスタンス名を
埋め込むのは危険な香りがします。

さて、次回は障害発生時のフェイルオーバーに要する時間がどのく
らいかかるのかをチェックします。