最近、Oracle RACの仮想IP(VIP)アドレスについて多くの質問に出くわしました。このブログ投稿が、VIPとは何か、VIPがどのように機能するか、およびOracleRACがVIPを活用する理由を明らかにするのに役立つことを願っています。先に進む前に、私はネットワークスペシャリストではないことを説明する必要があります。実際、コンピュータネットワーキングは、ITショップで行われているすべてのことの中でおそらく私の最も弱い点です。ですから、ネットワーキング関連のものを完全に入手しなくても、100%正確に私を怒らせないでください。これについては、DBAでのキャリア、特にOracleRACでのキャリアに役立った言葉で説明します。
ほとんどの人は、SQL*Plusなどのアプリケーションを単一インスタンスのデータベースサーバーに接続することに慣れています。最終的に、それらの接続要求は特定のIPアドレスに送信されます。次の図では、エンドユーザーはデータベースにアクセスするために192.168.1.1に接続したいと考えています。ネットワーク要求は、そのデータベースサーバーが接続されているネットワークスイッチにルーティングされます。このスイッチは、要求されたIPアドレスを持つサーバーに要求を渡します。
ほとんどのOracleDBAは、この概念を理解するのに問題はありません。クラスタ内に複数のマシン(ノード)があるため、RACをデプロイすると、作業が少し複雑になります。次の図には、2ノードのRACクラスターがあり、各ノードは異なるIPアドレスを持っています。
エンドユーザーは、セッションがどのノードに接続されているかを気にしません。エンドユーザーは、クラスターへのアクセスを望んでいます。どちらのノードでも十分です。エンドユーザーのTNSNAMES.ORA構成では、最初に192.168.1.1を試してみてください。それでもうまくいかない場合は、代わりに192.168.1.2を試してください。このようにして、OracleRACは高可用性ソリューションを提供しています。
ここで、仮想IPアドレスが使用される理由について説明します。エンドユーザーが最初のノード(192.168.1.1)にアクセスしようとしているが、アクセスできない場合はどうなりますか?何らかの理由でノードがダウンしています。エンドユーザーは、192.168.1.2ノードに簡単に接続できます。ただし、TCP / IPネットワークの動作方法により、192.168.1.1へのネットワーク接続がタイムアウトしてから192.168.1.2にアクセスするまでに最大10分かかる場合があります。長いTCP/IPタイムアウト待機が、OracleRACがVIPを活用する唯一の理由です。要求されたノードが利用できない場合に、クラスター内の別のノードにアクセスする時間を短縮したいだけです。
従来のIPは通常、サーバー上のネットワークカードにバインドされています。 IT管理者は、常にその特定のIPアドレスを使用するようにサーバーを構成し、ネットワーク上の他のデバイスが同じIPを使用しないようにします。注:ここではこれを簡単にし、トピックに精通している人のDHCPとリース登録を回避しようとしています。
仮想IPアドレスはネットワークカードにバインドされていません。 OSでも定義されていません。 VIPは、仮想マシンが実際のシステムではないのと同じように、実際のIPアドレスではありません。それを使用している人にとっては本物のように見えます。それでは、2ノードのクラスターを見てみましょう。ただし、今回はVIPが定義されています。
私たちのサーバーはまだ通常のIPアドレスを持っています。NODE1とNODE2にはそれぞれ192.168.1.1と192.168.1.2です。これらの2つのノードには、VIPも関連付けられています。 NODE1-VIPおよびNODE2-VIPは、それぞれIPアドレス192.168.1.11および192.168.1.12として示されます。 RACクラスターの各ノードには、通常のIPアドレスとVIPがあります。また、ホスト名とVIP名がDNSで定義されることが多いため、IPアドレスを具体的に覚えておく必要がないことを知っておくと便利な場合があります。
エンドユーザーがVIPの1つにアクセスすることを要求していることに注意してください。これらの従来のIPアドレスを使用する必要があるのは、サーバーで作業を実行する必要があるIT管理者だけです。エンドユーザーとすべてのアプリケーションはVIPに接続する必要があります。
VIPはOSでも定義されていない、と前に言ったことを覚えていますか?その場合、VIPがそのノードに割り当てられていることをすべての人がどのようにして知るのでしょうか。これはすべてグリッドインフラストラクチャ(GI)によって処理されます。 GIがインストールされると、Oracle Universal Installer(OUI)画面の1つで、仮想ホスト名とともにクラスタ内のノードの名前(ホスト名)が要求されます。以下のスクリーンショットは、その情報を要求したときに11g GIインストールがどのように表示されたかを示しています(Oracleドキュメントのスクリーンショット)。
パブリックホスト名は、管理者によってOSで構成されます。仮想IPはOSで構成されていませんが、グリッドインフラストラクチャはそれを認識しています。これがどのように機能するかを理解するには、少し逸脱して、アドレス解決プロトコル(ARP)を理解する必要があります。
サーバーが起動し、そのネットワークコンポーネントが開始されると、アドレス解決プロトコルは、サーバーの前にあるスイッチに、IPアドレスのすべてのトラフィックをネットワークカードのMACアドレスにルーティングするように指示するメカニズムです。 OSは、ARPを介して、192.168.1.1要求に対してNODE1に移動するようにスイッチに指示します。
グリッドインフラストラクチャが起動するとき、その起動タスクの1つは、同様のことを行うことです。 GIは、ARPを介して、すべてのNODE1-VIP(192.168.1.11)要求に対してNODE1に移動するようにスイッチに指示します。 GIがVIPを開始するまで、そのVIPアドレスはルーティングできません。
これが魔法の部分です…NODE1がダウンすると、クラスター内の別のノードのGIが停止を検出します。次に、GIは、VIPをクラスター内の別のノードにルーティングするようにスイッチに通知する新しいARP操作を実行します。 VIPは仮想であるため、その場で再ルーティングできます。次の図では、NODE1が失敗しています。その従来のIPも利用できなくなりました。 GIは、VIPをクラスター内の残りのノードに再ARPしました。
VIPの再ARPは数秒で実行できます。エンドユーザーは、アプリケーションとデータベースインスタンス間のネットワーク通信で一時停止を経験する場合がありますが、これは、TCP/IPタイムアウトを待機した場合よりもはるかに少なくなります。
Oracle 11gR2では、SCANリスナーが導入されました。 Oracle RACクラスタには、最大3つのSCANリスナーを含めることができます。 SCAN名はまだDNSにありますが、DNSはSCAN名前解決を最大3つの異なるIPアドレスの1つにラウンドロビンします。
次の図では、2ノードクラスターに2つのSCANリスナーがあります。エンドユーザーがmy-scan.acme.comへの接続要求を行い、DNSが名前を192.168.1.21または192.168.1.22に解決します。
上に示したように、これら2つのSCANVIPはクラスター内の異なるノードに割り当てられます。 NODE1がダウンした場合、グリッドインフラストラクチャは、前に説明したのと同じre-ARP操作を介して、NODE1-VIPとMY-SCAN(192.168.1.21)の両方をクラスター内の存続ノードに再配置します。新しいSCANリスナーとそのVIPは、古いスタイルのVIPと同じように処理されます。
要約すると、仮想IPアドレスを使用して、アプリケーションとクラスター内のノード間のネットワーク通信のフェイルオーバーを高速化します。 OSは、アドレス解決プロトコルを使用して、ネットワークスイッチに接続をホストにルーティングすることを通知します。グリッドインフラストラクチャは、同じARP操作を使用して、VIPおよびSCANVIPのトラフィックをルーティングする場所をネットワークスイッチに通知します。ノードがダウンした場合、GIはVIPとSCANVIPをクラスター内の別のノードに再ARPします。