ビジネスは、信頼性が高く、よりスマートで、リアルタイムの、事実に基づく意思決定を行うために、情報から洞察を引き出すことを継続的に望んでいます。企業がデータとデータベースに依存するようになると、情報とデータ処理は多くの事業運営とビジネス上の意思決定の中核になります。データベースへの信頼は完全です。基盤となるデータベースプラットフォームがなければ、日常の企業サービスを実行することはできません。結果として、データベースシステムソフトウェアのスケーラビリティとパフォーマンスの必要性はこれまで以上に重要になっています。クラスタ化データベースシステムの主な利点は、スケーラビリティと高可用性です。このブログでは、これら2つの側面に照らして、OracleRACとGaleraClusterを比較してみます。 Real Application Clusters(RAC)は、OracleデータベースをクラスタリングするためのOracleのプレミアムソリューションであり、高可用性とスケーラビリティを提供します。 Galera Clusterは、MySQLとMariaDBで最も人気のあるクラスタリングテクノロジーです。
アーキテクチャの概要
Oracle RACは、OracleClusterwareソフトウェアを使用して複数のサーバーをバインドします。 Oracle Clusterwareは、Oracle Databaseと統合されたクラスタ管理ソリューションですが、データベースだけでなく、他のサービスでも使用できます。 Oracle Clusterwareは、同じオペレーティングシステムを実行しているサーバーにインストールされる追加のソフトウェアです。これにより、サーバーをチェーン化して、1台のサーバーであるかのように動作させることができます。
Oracle Clusterwareはインスタンスを監視し、クラッシュが発生した場合は自動的に再起動します。アプリケーションが適切に設計されている場合、サービスの中断は発生しない可能性があります。障害の影響を受けるのは、セッションのグループ(障害が発生したインスタンスに接続されているもの)のみです。高速アプリケーション通知やOracleクライアントの高速接続フェイルオーバーなどの高度なRAC機能を使用して、エンドユーザーに対してブラックアウトを効率的にマスクできます。 Oracle Clusterwareはノードのメンバーシップを制御し、2つ以上のインスタンスがインスタンスを制御しようとするスプリットブレインの症状を防ぎます。
Galera Clusterは、MySQLおよびMariaDB用の同期アクティブ-アクティブデータベースクラスタリングテクノロジーです。 Galera Clusterは、OracleのMySQLClusterとして知られているNDBとは異なります。 MariaDBクラスターは、Codershipが提供するマルチマスターレプリケーションプラグインに基づいています。バージョン5.5以降、Galeraプラグイン(wsrep API)はMariaDBの不可欠な部分です。 Percona XtraDB Cluster(PXC)もGaleraプラグインに基づいています。 Galeraプラグインのアーキテクチャは、認証、レプリケーション、グループ通信フレームワークの3つのコアレイヤーに基づいています。認証層は書き込みセットを準備し、それらに対して認証チェックを実行して、それらが適用できることを保証します。レプリケーションレイヤーは、レプリケーションプロトコルを管理し、総合的な順序付け機能を提供します。 Group Communication Frameworkは、他のシステムがgcommバックエンドスキーマを介して接続できるようにするプラグインアーキテクチャを実装しています。
クラスタ全体で状態を同一に保つために、wsrepAPIはグローバルトランザクションIDを使用します。 GTIDの一意の識別子が作成され、データベースノードでコミットされた各トランザクションに関連付けられます。 Oracle RACでは、さまざまなデータベースインスタンスがバッファキャッシュ内のデータブロックなどのリソースへのアクセスを共有して、データブロックをエンキューします。競合を回避するために、RACインスタンス間の共有リソースへのアクセスを調整する必要があります。これらのリソースへの共有アクセスを整理するために、分散キャッシュは、RACインスタンスがこのデータブロックの現在のバージョンを保持するデータブロックIDや、各インスタンスにデータブロックが含まれるロックモードなどの情報を保持します。
データストレージの重要な概念
Oracle RACは、分散ディスクアーキテクチャに依存しています。データベースファイル、制御ファイル、およびデータベースのオンラインREDOログは、クラスター内の各ノードからアクセスできる必要があります。直接接続されたディスク、ストレージエリアネットワーク(SAN)、ネットワーク接続ストレージ(NAS)およびOracle ASMなど、共有ストレージを構成する方法にはさまざまなものがあります。最も人気のある2つは、OCFSとASMです。 Oracle Cluster File System(OCFS)は、OracleRAC専用に設計された共有ファイルシステムです。 OCFSは、Oracleデータベースファイルを論理ドライブに接続する必要をなくし、すべてのノードが単一のOracle Home ASM、RAWデバイスを共有できるようにします。 Oracle ASMは、従来のボリュームマネージャ、ファイルシステム、およびrawデバイスに代わるものを提供するオラクルの推奨ストレージ管理ソリューションです。 Oracle ASMは、データベースとストレージの間に仮想化レイヤーを提供します。複数のディスクを単一のディスクグループとして扱い、データベースをオンラインに維持しながらドライブを動的に追加または削除できます。
各ノードにはデータの完全なコピーがあるため、Galera用に高度な共有ディスクストレージを構築する必要はありません。ただし、バッテリバックアップされた書き込みキャッシュを使用してストレージの信頼性を高めることをお勧めします。
Oracle RAC、クラスタストレージ Galeraレプリケーション、データベースノードに接続されたディスククラスターノードの通信とキャッシュ
Oracle Real Application Clustersには共有キャッシュ・アーキテクチャがあり、Oracle Grid Infrastructureを利用して、サーバーとストレージのリソースを共有できます。ノード間の通信は、クラスターの整合性の重要な側面です。各ノードには、少なくとも2つのネットワークアダプターまたはネットワークインターフェイスカードが必要です。1つはパブリックネットワークインターフェイス用で、もう1つは相互接続用です。各クラスターノードは、クラスター相互接続としても認識されるプライベート高速ネットワークを介して他のすべてのノードに接続されます。
Oracle RAC、ネットワークアーキテクチャプライベートネットワークは通常、ギガビットイーサネットで形成されますが、大容量の環境では、多くのベンダーがOracleRAC用に設計された低遅延で高帯域幅のソリューションを提供しています。 Linuxは、複数の物理NICを単一の仮想NICに結合する手段も拡張して、帯域幅と可用性を向上させます。
Galeraノードを接続するためのデフォルトのアプローチは、ホストごとに1つのNICを使用することですが、複数のカードを使用することもできます。 ClusterControlは、このようなセットアップを支援します。主な違いは、相互接続の帯域幅要件です。 Oracle RACはインスタンス間でデータのブロックを出荷するため、Galera書き込みセット(操作のリストで構成される)と比較して、相互接続に大きな負荷がかかります。
RACでの冗長相互接続の使用により、ボンディングやその他のテクノロジーを使用せずに、プライベートクラスタネットワークに使用する複数のインターフェイスを識別できます。この機能は、OracleDatabase11gR2以降で使用できます。 Oracle Clusterwareの過剰な相互接続機能を使用する場合は、インターフェースにIPv4アドレスを使用する必要があります(UDPがデフォルトです)。
高可用性を管理するために、各クラスターノードには仮想IPアドレス(VIP)が割り当てられます。ノードに障害が発生した場合、障害が発生したノードのIPアドレスを存続しているノードに再割り当てして、アプリケーションが同じIPアドレスを介してデータベースに到達し続けることができるようにすることができます。
各ホストの物理メモリを単一のキャッシュに結合するには、OracleのCacheFusionテクノロジーに高度なネットワーク設定が必要です。 Oracle Cache Fusionは、1つのOracleインスタンスのキャッシュに格納されているデータを提供し、プライベートネットワークを介してデータを転送することで他のインスタンスからアクセスできるようにします。また、クラスターノードを超えてロックおよび補足同期情報を送信することにより、データの整合性とキャッシュの一貫性を保護します。
説明されているネットワーク設定に加えて、アプリケーションに単一のデータベースアドレス(単一クライアントアクセス名(SCAN))を設定できます。 SCANの主な目的は、接続管理を容易にすることです。たとえば、クライアント接続文字列を変更せずに、クラスターに新しいノードを追加できます。この機能は、Oracleが基盤となるVIPを指すSCANIPに基づいて要求を自動的に配布するためです。スキャンリスナーは、クライアントと、VIPに依存する基盤となるローカルリスナーとの間のブリッジを行います。
Galera Clusterの場合、SCANに相当するのは、Galeraノードの前にデータベースプロキシを追加することです。プロキシはアプリケーションの単一の連絡先であり、障害が発生したノードをブラックリストに登録し、クエリを正常なノードにルーティングできます。キープアライブと仮想IPを使用して、プロキシ自体を冗長化できます。
フェイルオーバーとデータリカバリ
OracleRACとMySQLGaleraClusterの主な違いは、Galeraはシェアードナッシングアーキテクチャであるということです。共有ディスクの代わりに、Galeraは、同期レプリケーションを実現するために、グループ通信とトランザクション順序付けを使用した認証ベースのレプリケーションを使用します。データベースクラスターは、さまざまな方法で実現されますが、ノードの損失に耐えられる必要があります。 Galeraの場合、重要な側面はノードの数です。Galeraは、動作を維持するためにクォーラムを必要とします。 3ノードのクラスターは、1つのノードのクラッシュに耐えることができます。クラスタ内のノードが増えると、可用性が向上します。 Oracle RACでは、ノードがクラッシュした後も動作を維持するためにクォーラムは必要ありません。これは、クラスターの状態に関する一貫した情報を保持する分散ストレージへのアクセスのためです。ただし、データストレージは、高可用性プランの潜在的な障害点になる可能性があります。 Galeraクラスターノードをジオロケーションデータセンター全体に分散させるのはかなり簡単な作業ですが、RACではそれほど簡単ではありません。 Oracle RACには追加のハイエンドディスクミラーリングが必要ですが、ASMディスクグループ内で冗長性のような基本的なRAIDを実現できます。
ディスクグループタイプ | サポートされているミラーリングレベル | デフォルトのミラーリングレベル |
---|---|---|
保護されていない(なし) | ||
双方向、三方向、保護されていない(なし) | ||
双方向、三方向、保護されていない(なし) | 双方向(新しく作成された) | |
双方向、三方向、保護されていない(なし) |
ロックスキーム
シングルユーザーデータベースでは、ユーザーは他のセッションが同じデータを同時に変更することを気にせずにデータを変更できます。ただし、マルチユーザーデータベースのマルチノード環境では、これはさらに注意が必要です。マルチユーザーデータベースは、以下を提供する必要があります。
- データの同時実行性-ユーザーが同時にデータにアクセスできることの保証
- データの一貫性-各ユーザーにデータの一貫したビューが表示されることの保証。
クラスタインスタンスには、主に3つのタイプの同時実行ロックが必要です。
- データの同時実行性はさまざまなインスタンスで読み取られます
- データの同時実行性は、さまざまなインスタンスで読み取りと書き込みを行います。
- データの同時実行性はさまざまなインスタンスに書き込みます。
Oracleでは、要件に応じて、悲観的または楽観的なロックのポリシーを選択できます。同時実行ロックを取得するために、RACには2つの追加のバッファーがあります。それらは、グローバルキャッシュサービス(GCS)とグローバルエンキューサービス(GES)です。これらの2つのサービスは、キャッシュフュージョンプロセス、リソース転送、およびインスタンス間のリソースエスカレーションを対象としています。 GESには、キャッシュロック、ディクショナリロック、トランザクションロック、およびテーブルロックが含まれます。 GCSは、インスタンス間のブロックモードとブロック転送を維持します。
Galeraクラスターでは、各ノードにストレージとバッファーがあります。トランザクションが開始されると、そのノードにローカルなデータベースリソースが関与します。コミット時に、そのトランザクションの一部である操作は、書き込みセットの一部としてグループの残りの部分にブロードキャストされます。すべてのノードの状態が同じであるため、書き込みセットはすべてのノードで成功するか、すべてのノードで失敗します。
Galera Clusterは、クラスターレベルの楽観的同時実行制御を使用します。これは、COMMITの中止をもたらすトランザクションに現れる可能性があります。最初のコミットが勝ちます。クラスタレベルでアボートが発生すると、GaleraClusterはデッドロックエラーを発生させます。これは、アプリケーションアーキテクチャに影響する場合と影響しない場合があります。単一のトランザクションで複製する行数が多いと、ノードの応答に影響を与えますが、そのような動作を回避する手法はあります。
ハードウェアとソフトウェアの要件
両方のクラスターハードウェアを構成するために、強力なリソースは必要ありません。最小限のOracleRACクラスタ構成は、2つのCPU、少なくとも1.5 GBのRAMの物理メモリ、RAMの量に等しい量のスワップスペース、および2つのギガビットイーサネットNICを備えた2つのサーバーによって満たされます。 Galeraの最小ノード構成は3つのノード(ノードの1つはアービトレーター、gardbにすることができます)で、それぞれに1GHzのシングルコアCPU 512MB RAM、100Mbpsのネットワークカードが搭載されています。これらは最小限ですが、どちらの場合も、本番システム用にさらに多くのリソースが必要になる可能性があります。
各ノードにはソフトウェアが格納されているため、数ギガバイトのストレージを準備する必要があります。 OracleとGaleraはどちらも、ノードを一度に1つずつ停止することにより、ノードに個別にパッチを適用する機能を備えています。このローリングパッチは、トラフィックを処理するために利用可能なデータベースノードが常に存在するため、アプリケーションの完全な停止を回避します。
言及することが重要なのは、本番のGaleraクラスターはVMまたは基本的なベアメタルで簡単に実行できるのに対し、RACは高度な共有ストレージとファイバー通信に投資する必要があるということです。
監視と管理
Oracle Enterprise Managerは、OracleRACおよびOracleClusterwareを監視するために推奨されるアプローチです。 Oracle Enterprise Managerは、データベース環境を監視および管理するためのOracleWebベースの統合管理システムです。これはOracleEnterpriseLicenseの一部であり、別のサーバーにインストールする必要があります。クラスター制御の監視と管理は、クラスター・バイナリーの一部であるcrsctlコマンドとsrvctlコマンドの組み合わせによって行われます。以下にいくつかのコマンド例を示します。
Clusterwareリソースステータスチェック:
crsctl status resource -t (or shorter: crsctl stat res -t)
例:
$ crsctl stat res ora.test1.vip
NAME=ora.test1.vip
TYPE=ora.cluster_vip_net1.type
TARGET=ONLINE
STATE=ONLINE on test1
OracleClusterwareスタックのステータスを確認します。
crsctl check cluster
例:
$ crsctl check cluster -all
*****************************************************************
node1:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
*****************************************************************
node2:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
ローカルサーバー上のOracleHighAvailabilityServicesおよびOracleClusterwareスタックのステータスを確認します。
crsctl check crs
例:
$ crsctl check crs
CRS-4638: Oracle High Availablity Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
ローカルサーバーでOracleHighAvailabilityServicesを停止します。
crsctl stop has
ローカルサーバーでOracleHighAvailabilityServicesを停止します。
crsctl start has
ノードアプリケーションのステータスを表示します:
srvctl status nodeapps
すべてのSCANVIPの構成情報を表示します
srvctl config scan
例:
srvctl config scan -scannumber 1
SCAN name: testscan, Network: 1
Subnet IPv4: 192.51.100.1/203.0.113.46/eth0, static
Subnet IPv6:
SCAN 1 IPv4 VIP: 192.51.100.195
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
Cluster Verification Utility(CVU)は、インストール、パッチの更新、またはその他のシステム変更に備えて、システムチェックを実行します。
cluvfy comp ocr
例:
Verifying OCR integrity
Checking OCR integrity...
Checking the absence of a non-clustered configurationl...
All nodes free of non-clustered, local-only configurations
ASM Running check passed. ASM is running on all specified nodes
Checking OCR config file “/etc/oracle/ocr.loc"...
OCR config file “/etc/oracle/ocr.loc" check successful
Disk group for ocr location “+DATA" available on all the nodes
NOTE:
This check does not verify the integrity of the OCR contents. Execute ‘ocrcheck' as a privileged user to verify the contents of OCR.
OCR integrity check passed
Verification of OCR integrity was successful.
Galeraノードとクラスターでは、公開されているいくつかのステータスを報告するためにwsrepAPIが必要です。現在、34の専用ステータス変数がSHOWSTATUSステートメントで表示できます。
mysql> SHOW STATUS LIKE 'wsrep_%';
wsrep_apply_oooe wsrep_apply_oool wsrep_cert_deps_distance wsrep_cluster_conf_id wsrep_cluster_size wsrep_cluster_state_uuid /> wsrep_cluster_status wsrep_connected wsrep_flow_control_paused wsrep_flow_control_paused_ns wsrep_flow_control_recv | wsrep_local_send_queue_avg wsrep_local_state_uuid wsrep_protocol_version wsrep_provider_name wsrep_provider_vendor wsrep_provider_version wsrep_flow_ br /> wsrep_last_committed wsrep_local_bf_aborts wsrep_local_cert_failures | wsrep_local_commits wsrep_local_index wsrep_local_recv_queue wsrep_local_recv_queue_avg wsrep_local_replays wsrep_local_send_queue wsrep wsrep br /> wsrep_received_bytes wsrep_replicated wsrep_replicated_bytes wsrep_thread_count |
多くの面でMySQLGaleraClusterの管理は非常に似ています。初期ノードからのクラスターのブートストラップや、SSTまたはIST操作によるノードの回復などの例外はわずかです。
ブートストラップクラスター:
$ service mysql bootstrap # sysvinit
$ service mysql start --wsrep-new-cluster # sysvinit
$ galera_new_cluster # systemd
$ mysqld_safe --wsrep-new-cluster # command line
GaleraClusterを管理および監視するための同等のWebベースのすぐに使用可能なソリューションはClusterControlです。クラスターを展開し、主要なメトリックを監視し、データベースアドバイザーを提供し、バックアップと復元、自動パッチ適用、トラフィック暗号化、可用性管理などの管理タスクを処理するためのWebベースのインターフェイスを提供します。
ワークロードの制限
オラクルは、GaleraClusterに欠けていることがわかったSCANテクノロジーを提供します。 SCANの利点は、クラスター内のノードまたはデータベースを追加または削除する場合に、クライアントの接続情報を変更する必要がないことです。 SCANを使用する場合、Oracleデータベースは利用可能なSCANリスナーの1つ(通常は3つ)にラウンドロビン方式でランダムに接続し、それらの間の接続のバランスを取ります。クライアント側の接続時負荷分散とサーバー側の実行時負荷分散の2種類の負荷分散を構成できます。 Galeraクラスター自体には類似したものはありませんが、ProxySQL、HAProxy、Maxscaleなどの追加のソフトウェアをKeepalivedと組み合わせることで同じ機能に対応できます。
Galera Clusterのアプリケーションワークロードの設計に関しては、クラスター全体でデッドロックが発生するため、同じ行で更新が競合しないようにする必要があります。一括挿入または更新は、許可されている最大書き込みセットよりも大きくなる可能性があるため、避けてください。また、クラスターのストールが発生する可能性があります。
RACを使用してOracleHAを設計する場合、RACはサーバー障害からのみ保護すること、およびストレージをミラーリングしてネットワークの冗長性を確保する必要があることに注意する必要があります。最新のWebアプリケーションでは、場所に依存しないデータサービスにアクセスする必要があり、RACのストレージアーキテクチャの制限により、実現が難しい場合があります。また、環境を管理するための関連知識を習得するために、かなりの時間を費やす必要があります。それは長いプロセスです。アプリケーションのワークロード側には、いくつかの欠点があります。レイテンシは補足的なノード間データ交換によって追加されるため、同じデータセットで分離された読み取りまたは書き込み操作を分散することは最適ではありません。 RACに移行する前に、パーティショニング、シーケンスキャッシュ、並べ替え操作などを確認する必要があります。
マルチデータセンターの冗長性
Oracleのドキュメントによると、ポイントツーポイント方式で接続され、同期して実行される2つのボックス間の最大距離はわずか10kmです。専用のデバイスを使用すると、この距離を100kmまで増やすことができます。
Galera Clusterは、マルチデータセンターレプリケーション機能でよく知られています。ワイドエリアネットワークネットワーク設定を豊富にサポートしています。クラスタノード間でラウンドトリップ時間(RTT)を測定し、必要なパラメータを調整することで、ネットワーク遅延が大きくなるように構成できます。 wsrep_provider_optionsパラメーターを使用すると、suspect_timeout、interactive_timeout、join_retrans_timoutsなどの設定を構成できます。
クラウドでのGaleraとRACの使用
オラクルの注記www.oracle.com/technetwork/database/options/.../rac-cloud-support-2843861.pdf現在、ネイティブに提供される共有ストレージに関するオラクルの要件を満たすサードパーティのクラウドはありません。このコンテキストでの「ネイティブ」とは、クラウドプロバイダーが、オラクルのサポートポリシーに従って、インフラストラクチャの一部として共有ストレージをサポートする必要があることを意味します。
洗練されたストレージソリューションに縛られていないシェアードナッシングアーキテクチャのおかげで、Galeraクラスターはクラウド環境に簡単にデプロイできます。のようなもの:
- 最適化されたネットワークプロトコル
- トポロジ対応のレプリケーション
- トラフィックの暗号化
- 信頼性の低いノードの検出と自動削除
クラウド移行プロセスの信頼性を高めます。
ライセンスと隠れたコスト
Oracleライセンスは複雑なトピックであり、別のブログ記事が必要になります。クラスターファクターはそれをさらに難しくします。完全なRACソリューションのライセンスを取得するためにいくつかのオプションを追加する必要があるため、コストが高くなります。ここでは、何を期待し、どこでより多くの情報を見つけることができるかを強調したいと思います。
RACは、OracleEnterpriseEditionライセンスの機能です。 Oracle Enterpriseライセンスは、指定されたユーザーごととプロセッサごとの2つのタイプに分けられます。コアライセンスごとのEnterpriseEditionを検討する場合、シングルコアのコストはRAC 23,000 USD + Oracle DB EE 47,500 USDであり、それでも最大22%のサポート料金を追加する必要があります。 https://flashdba.com/2013/09/18/the-real-cost-of-oracle-rac/にある価格設定に関するすばらしいブログを参照してください。
Flashdbaは、4ノードのOracleRACの価格を計算しました。合計金額は、3年間のDBメンテナンスで902,400米ドルに加えて595,584米ドルでした。これには、パーティショニングやインメモリデータベースなどの機能は含まれていません。これらはすべて、Oracleの60%割引です。
Galera Clusterは、誰でも無料で実行できるオープンソースソリューションです。サブスクリプションは、ベンダーのサポートを必要とする本番環境の実装で利用できます。優れたTCO計算は、https://severalnines.com/blog/database-tco-calculating-total-cost-ownership-mysql-managementにあります。
結論
アーキテクチャには大きな違いがありますが、両方のクラスタが主要な原則を共有しており、同様の目標を達成できます。オラクルのエンタープライズ製品には、箱から出してすぐに使えるものがすべて付属しています(そしてその価格も)。上記のように100万米ドルを超えるコストで、多くの企業が購入できないハイエンドソリューションです。 Galera Clusterは、大衆向けのまともな高可用性ソリューションとして説明できます。場合によっては、GaleraがOracleRACの非常に優れた代替手段になる可能性があります。 1つの欠点は、ClusterControlを使用して完全に自動化できますが、独自のスタックを構築する必要があることです。これについてのご意見をお聞かせください。