こちらの記事は、Oracle Cloud Infrastructure Advent Calendar 2022の Day 25 として書いています。
こんにちは!m.uriuです。
今回は、Oracle Cloud Infrastructureのフォルトドメイン(以下FD)の通信速度について検証してみました!
コンピュートインスタンスにオプションで設定できるFD。
それぞれのFDにリソースを分けても性能差は出ない、とは言われていますが、実際のところFDによってパフォーマンスの差は出るのかな?と疑問に思い、調べてみました!
今回の検証に使用したツールの導入方法なども紹介させていただきますので、気になる方はぜひご自身の環境でやってみてください。
FDとは?
「フォルト・ドメインとは、可用性ドメイン内のハードウェアおよびインフラストラクチャをグループ化したものです。各可用性ドメインには、3つのフォルト・ドメインが含まれています。フォルト・ドメインではアンチアフィニティが提供されます。これにより、単一の可用性ドメイン内でインスタンスが同じ物理ハードウェア上に存在しないようにインスタンスを分散できます。1つのフォルト・ドメインに影響するハードウェア障害またはコンピュート・ハードウェア・メンテナンス・イベントは、他のフォルト・ドメイン内のインスタンスに影響しません。」
簡単に言えば、OCIの各ADにあるデータセンターの一部サーバーが何らかの事故で物理的破損が起きてデータがロストする事態が起きても、FDでリソースを分けていればリソースの全ロストは避けられる、といった仕組みです。
並行して運用するサーバをFDで分けたり、DBのDataGuard構成でスタンバイを別FDに設置して障害に備える、といった運用ができます。
疑問
ここで私の中に
「仮に1つのFDで物理的障害等が発生しても他のFDに影響が全くでないとすれば、FD同士は別のサーバに分けるなど、物理的に離れているのではないか?」
「だとすれば、各FDごとに性能差が出るのでは?」
という疑問が生まれました。
ということで、FDを分けることで性能差は生じないのか調べてみました!
検証の内容
・今回は「コンピュートインスタンスの通信速度」の性能に絞って計測し比較します。
・各FDでコンピュートインスタンスを作成し、下記の2項目でそれぞれの通信速度を計測します。
1)コンピュートインスタンスとインターネットとの通信速度
2)異なるFDのコンピュートインスタンス同士の通信速度
検証環境
・コンピュートインスタンス×3台(FD1、2、3でそれぞれ用意)(AP-TOKYO-1-AD-1)
イメージ: Oracle-Linux-8.6-2022.11.21-0
シェイプ: VM.Standard.E4.Flex OCPU数: 1 メモリー(GB): 2
・VCN(TCPのポート5201を許可)
・SPEEDTEST® CLI(Ookla®)
・iperf3
補足:FDの設定方法
FDの設定はデフォルトだとOracle任せのオプション設定ですが、インスタンス作成時や作成後に変更することで任意のFDに設定することもできます。
・インスタンス作成時
・インスタンス作成後(インスタンスの詳細>他のアクション>編集)
1)コンピュートインスタンスとインターネットとの通信速度
まず最初にインターネットとの回線速度を計測し、純粋な処理性能を比較したいと思います。
今回は導入が簡単で結果の見やすいSPEEDTEST CLIを使用させていただきます。
導入方法
導入方法は、公式サイトから「.tgz」ファイルをダウンロードして解凍し、最初にライセンスで「yes」を入力するだけです。
speedtestコマンドを入力すれば、自動でDownload/Upload時間とそれぞれのLatencyを計測して表示してくれます。
また、一番下の「Result URL」からWEB画面で結果を見ることもできます。
測定結果
3つのサーバで計測した10回分の結果が以下のものになります。
(ロスが多すぎたものや、平均値から離れすぎたものは異常値として除いています。)
FD1 比較結果
FD2 比較結果
FD3 比較結果
FD1~FD3 比較結果
FD3は少し突出した値(No.4)があるため若干平均値は高くなりましたが、各FDのそれぞれの数値を見てみる限り
「あまり数値に差は見られない」
と結論付けることができるのではないでしょうか。
2)異なるFDのコンピュートインスタンス同士の通信速度
続いては、異なるFD同士のインスタンスの通信を計測します。
実際の現場でもFDを分けて相互に通信することが有り得ます。
「一方のFDのサーバへの通信だけ遅い!」なんていう事態が起こるのか、この項目で検証していきます。
今回は「iperf3」をインストールして使用します。
この方法は公式ドキュメントにもやり方が載っていますので、こちらも参考にしていただければ幸いです。
導入方法
・インスタンスにiperf3
をインストール
sudo yum install -y iperf3
・インスタンスでファイアウォールを開いてiperf3
トラフィックを許可し、TCPポート5201でサーバー・インスタンスへの通信を有効化(VCNでもTCPポート5201に対するステートレス・イングレス・トラフィックを許可する設定が必要です。)
sudo firewall-cmd --zone=public --permanent --add-port 5201/tcp
sudo firewall-cmd --reload
計測を行う全てのサーバでこの作業を実施すれば導入完了です。
使い方は、まず受信側のサーバで、以下のコマンドを入力します。
iperf3 -s
次に送信側のサーバで、以下のコマンドを入力すると計測が始まり、送信側と受信側で結果が出力されます。(受信側は再度待機状態に戻ります。)
iperf3 -c <受信側のIPアドレス>
送信側
受信側
測定結果
この項目も、全6パターン計10回で計測して比較してみました。
Transferは全計測共通でデフォルトの1.22GBytesです
こちらの測定では全て同じ数字、という結果になりました。
おそらく、AD内部の相互通信なので 1)のインターネットとの通信より、安定しているからだと思われます。
上のコンソール画面を見るに、秒間ごとの通信速度は多少差はあるものの、平均的には同じ速度になるよう設計されているのではないでしょうか。
まとめ
今回の1)と2)の測定結果を見るに、各FDに配置したコンピュートインスタンスの通信速度には多少のムラはありますが、平均値をとると「そこまで大きな差がない」という結果になりました。
これは継続的・長期的に見れば、「FDごとの通信速度の性能差」は無いものとして見ることができるので、
この観点においては安心して「サーバを複数のFDに分けて高可用性を維持する運用」ができるだろう、
と今回は纏めさせていただきます。
また今回の検証で使用したツール類は導入も操作も簡単なものなので、気になる方はぜひご自身の環境でも使用してみてください。