まだbondingで消耗しているの?HAIPでインターコネクト冗長化の時代が来たよ!

pipe

公開日: 

JPOUG Advent Calendar 2017 22日目の投稿です。

21日目はYohei Azekatsu様のOracle Database のベンチマークツール SLOB(The Silly Little Oracle Benchmark) を使ってみるでした。

本当はRACとDataGuardのことを書きたかったのですが、上司の雲行きがグレーな感じだったため、RAC関連のネタとしてHAIPについてひとつ共有致します。

sponcer link

HAIPとは

HAIPは複数のインターコネクト用のNICをいい感じにまとめて冗長化してくれる機能です。

マニュアルによると以下のように記載されています。
Cf: 冗長なインターコネクトの使用

冗長なインターコネクトの使用に対して複数のインタフェースを定義できます。このようにすると、定義したインタフェースの数に応じて1つから4つの高可用性IP(HAIP)アドレスがOracle Clusterwareによって作成され、Oracle DatabaseおよびOracle ASMインスタンスは、これらのアドレスを使用して高可用性のロード・バランスされた通信を実現します。

つまり、bondingやチーミングなどをしなくてもOracle側でよしなに制御してくれるという代物です。

とっても便利じゃないかと思いつつも、ちゃんと動き的にロードバランスしてくれたり、フェイルオーバーてきなことをしてくれるのかが気になったので動きを検証してみました。

HAIPの動きの検証

環境

環境は以下の環境で実施しました。

OS:RedHat 7.3
Oracle: 12.1.0.2 2node RAC(SE)

NICは以下のようにインターコネクトを4つ用意しました。

※中途半端にenp0s10が葉抜きになってて途中わかりにくくなりますがいい感じに読み取ってください。すみません。

検証方法

以下のようにテスト的なテーブルを作成します。

あとはこのテーブルに対してシーケンスを使って2ノードからひたすらINSERTするだけの簡単なお仕事。

1ノードであればすぐ終わるのですが、2ノードで同時実行するとちゃんとお互いのノードで順序を取得しあうため、キャッシュフュージョンが大量に発生してインターコネクトを使うことがわかるはずです。

※普通はキャッシュフュージョンが発生しないようにするために、シーケンスを作る際はキャッシュをある程度確保してシーケンスを作成します。今回はインターコネクトを使わせるためにnocacheでシーケンスを作ってますが、実際の環境ではキャッシュさせるように気をつけてください。

インサート中はsarコマンドを用いて各NICの通信量を観測してみます。
以下のコマンドは60秒間、NIC通信量を計測します。

実際の動きの検証

では実際にやってみましょう。

最初に、sarコマンドを各ノードで実行しておきます。

1号機の様子。

2号機の様子。

インターコネクト側には全然大した通信量はありませんね。

ここで、2ノードに同時にINSERTを実施します。

すると、各ノードでインターコネクトがメキメキと消費しはじめました。

1号機

2号機

さらに、インサート中に1号機側のNIC(enp0s16)をダウンさせてみます。

すると、一瞬通信量が下がった後、enp0s9にフェイルオーバーしたようで、enp0s9の通信量が倍近く膨れ上がりました。

2号機

ちなみにフェイルオーバーすると、2号機側でもちゃんと認識してフェイルオーバーしているようです。

2号機側のNIC情報

ちなみに、NICを落としたとしても処理は中断せず、きちんとインサートされていることが確認できました。

1号機

2号機

件数もきっちり2ノード分雁首揃えて1万件入ってました。

まとめ

今回の検証により、bondingやチーミングなどを使わなくてもOracle側でアクティブ・アクティブにインターコネクト通信をロードバランスしてくれて、自動的にフェイルオーバーもしてくれて、いい感じに処理してくれることがわかりました。

みなさんも今後はインターコネクトを使う際は是非HAIPをお使いください!

  • このエントリーをはてなブックマークに追加
  • Pocket
PAGE TOP ↑