データベースの高可用性について
プロアクシアコンサルティングでオープンソリューション事業部に所属している H.U です。
今回はデータベースの高可用性について軽く紹介できればと思います。
プロアクシアでの役割とこれまでの経験を教えてください
プロアクシア入社後は、主に AWS やデータベース関連の設計構築業務に従事しています。
これまでの経験ですが、汎用系オペレータとして IT 業務を始めて経験し、その後はオープン系運用や設計構築に携わり、10年前ぐらいからは、主に Oracle ですが、データベースの設計構築を行っていました。
最近では、AWS や Azure といったクラウド系の設計構築も行っています。
オープンソリューション事業部では、どのような技術分野・案件を担当してきましたか。
データベース案件では、スタンドアロンからクラスタ構成といった様々なデータベース設計構築案件を担当しました。ここ最近では Oracle RAC や Lifekeeper を使った HA クラスター構築など行いました。
また、AWS 案件も担当しており、設計構築や技術支援を行っています。
データベースの高可用性とは
インフラ設計にはアプリケーションの機能面とは違い非機能要件を定義し、設計を進めて行く必要があります。非機能要件には以下の6つの観点があります。
観点 | 説明 |
可用性 | 継続性、耐障害性、災害対策、回復性 |
性能・拡張性 | 業務処理量、性能目標値、リリース拡張性、性能品質保証 |
運用保守性 | 通常運用、保守運用、障害時運用、運用環境、サポート体制、その他の運用管理方針 |
移行性 | 移行時期、移行方式、移行対象 (機器、データ)、移行計画 |
セキュリティ | リスク、診断、アクセス・利用制限、秘匿、不正監視、NW・マルウェア・Web 対策など |
システム環境 | システム特性、適合規格、機材設置環境、環境マネージメント |
データベースの高可用性とは、エンドユーザがデータベースシステムを中断なく利用できること、また障害時やメンテナンス時にも継続して利用できることを意味しています。
本ブログでは、データベースの可用性を向上させる方式についてご紹介できればと思います。
現在のビジネスではどういった環境が求められているのか
現在ではビジネスの事業継続性から止まらないシステム、止められないシステムを求められることが多くなってきています。
ひと昔前は HW やシステム異常時用に準備された待機系へと遷移する HA 構成が主流でしたが、近年では、利用者やデータ量の増加に伴う高負荷障害の対策や、震災などの拠点障害の対策を考慮して、遠隔地の待機系へ切り替えを行うなど多種多様な方式が生まれています。
最近では AWS などクラウドサービスだと、容易に海外のリージョンにもサーバを設置できるため、待機系を海外に配置することを検討されるケースも多くなっています。
可用性を向上させるたの手法について
(手法や製品の機能について)
可用性を向上させるための方式は、多種に渡ります。そのうちの一部を紹介したいと思います。
構成 | 説明 | 製品 |
HA 構成 | アクティブ・スタンバイやアクティブ・アクティブで稼働させ、 障害があったノードから正常なノードへ遷移させる方式 | HACMP、LifeKeeper |
DR 構成 | アクティブ側の更新情報(アーカイブログ)をスタンバイへ継続的に送信し、障害時にはスタンバイをアクティブに昇格させる方式 | Oracle Data Guard、 Stanby Express、Dbvisit |
リアルタイムレプリケーション構成 | アクティブ側の更新情報をSQLレベルで伝播させる方式。アクティブ側の 負荷を軽減させる参照系DBとして使用することもある。 | Oracle GoldenGate、SharePlex |
クラスタ構成 | 複数のノードを関連付けさせて、一つのシステムとして稼働させる方式。スケールアウトが可能で負荷分散機能としても利用できる | Oracle RAC |
それぞれの方式について
HA 構成
HA 構成ではアクティブノード障害時のスタンバイノードへの切り替え (フェイルオーバ) が自動で行われるため、障害時の復旧を短期間で出来るというメリットがあります。
ただ、アクティブ・スタンバイと冗長化しているのは、あくまでもノードのみで、データベースを格納している共有ストレージは一つなので、RAID を組み、耐障害性を高めていても拠点障害には対応できないというところは許容する必要があります。
DR 構成
DR 構成ではプライマリとスタンバイで、データベース自体が冗長化されており、障害時にはスタンバイ DB へフェイルオーバが自動で行われるため、復旧を短期間で出来るというメリットがあります。
プライマリの更新情報 (アーカイブログ) をスタンバイに転送し、読み込ませることでデータを同期させていますが、障害時には更新情報がロストしてしまう可能性があることがあることは許容する必要があります。
リアルタイムレプリケーション構成
リアルタイムレプリケーション構成では、上記2構成の耐障害性というよりは、負荷分散として使用されることもあります。
データベース自体はプライマリとセカンダリで同期されており、セカンダリは DWH などデータ分析などの参照系として使用することでプライマリの性能を保つ役割で使用されます。
プライマリの SQL をキャプチャして、セカンダリへ伝播させるのですが、オブジェクトの名前が何かしらの原因で合致していなかったりすると、伝播時に SQL エラーが発生し、同期がストップしてしまうので、運用が他の構成に比べて難しいというところが課題かと思われます。
クラスタ構成
クラスタ構成では、Oracle RAC を例とすると、HA 構成と同じフェイルオーバ機能+負荷分散機能を要する構成になります。
HA 構成と違い、両ノードでインスタンスが起動している状態なので、フェイルオーバは HA 構成より素早く行えることや、無停止でノードを追加することができ、容易にスケールアウトさせることができるというところがメリットかと思います。
ただ、この構成も HA 構成と同様に拠点障害には対応できないというところを許容する必要があります。
高可用性構成で運用する際に考慮する事について
高可用性構成のシステム運用について、過去に経験したことを数点お話します。
HA 構成
障害時にスタンバイに遷移したこと自体は問題なかったのですが、数年稼働していた間で cron 設定に追加や見直しがあったのですが、スタンバイ側には反映していなかったため、切り替わった際に最新化されておらず、ジョブに影響が出たことがあります。
共有ディスクではなく、ノード上に保存される設定やファイルなどは注意する必要があります。
リアルタイムレプリケーション構成
リアルタイムレプリケーション構成は SQL レベルでの伝播になるので、オブジェクトレベルまで気にする必要があります。
セットアップ時にプライマリ DB からエクスポートし、セカンダリ DB へインポートし、同期を開始させたのですが、Oracle のインデックス等で自動で割り振られる名前 (SYS_*****) はインポートすると名前が変わってしまうため、紐づいているテーブルを削除したら、オブジェクトが見つからないとエラーで同期停止になってしまったりと、運用が非常に難しかった記憶があります。
この構成を採用する場合は、アプリ開発側ともデータベース構造や命名規則など、いろいろ擦り合わせを行うことで実装できるかなり難易度の高い構成という印象を持っています。
クラスタ構成
Oracle RAC を採用していたケースですが、HA 構成と違いインスタンスが複数起動する構成なので、起動停止操作が違ったり、サーバにログインしてエクスポートをしたら、片方のサーバに DUMP ファイルが出力され混乱されたりと、運用面でかなり変化を伴います。
このため、環境や手順の説明を十分に行ったうえで、運用を移管する必要があります。
上記以外には、どのようなことに取り組んでいますか
最近はデータベース以外に AWS や Azure といったクラウドサービスの案件に携わっています。
ここ数年間では、AWS Well-Architected フレームワークに基づく環境評価、SAP on Azure の検証、WEB/DB システムの設計構築、ECR を使った docker 構成管理などがあります。
個人的にもクラウドサービスは大変興味を持ってますので、日々勉強してます。
プロアクシアで働くことの意義、プロアクシアのつよみ
まだまだインフラメンバーは少なく、組織としてもこれからだと思っていますが、まだ出来上がっていない組織なので、我々メンバーで大きくしていけるんじゃないというところに期待や魅力を感じています。
Linux に強い人、Windows に強い人、ストレージに強い人、データベースに強い人といった各自得意分野を持った人が集まっているので、何か困った時に協力し合えるところがつよみじゃないでしょうか。
今後どのような案件に携わっていきたいと考えられていますか
AWS のマネージドサービスをフル活用するシステムとか、新しいテクノロジーを採用するシステムとか時代の変化とか進化を感じる案件に携わっていけるのが理想です。単純に自分が飽き性なんで。。
今後エンジニアとして、どのように成長していきたいとお考えですか
エンジニアとしての個人の成長より、営業やコンサルティング、人材スカウトなどなんでもやれる人材へと成長していくことが目標です。
また、次の世代へ技術継承なんかもできればいいかなと思います。