オープンソースソフトを使ったシステム冗長化を考える

さて、今回は少し趣向を変えてオープンソースソフトウェア(OSS)を使ったシステムの冗長化について書いていこうと思う。WebやOLTP、DWHシステムなど色々なシステムがあり、構成要素はWebサーバ、APサーバ、DBサーバ、メールサーバ、ファイルサーバ、認証サーバやLinuxベースのNW機器など様々。当然サーバの種別によって冗長化の方式や実装方法は異なるが、今回は一番よく使われるであろうDBサーバを取り上げたいと思う。(※ただし、基本的な考え方はDBサーバ以外にも応用できる)

DBサーバ冗長化の観点は2つ

1つは、「可用性・耐障害性向上(ダウンタイム最小化)」、もう1つは「性能向上(更新/参照分散)」である。前者の可用性向上を実現するクラスタはHA(High Availavility)クラスタと呼ばれ、一方後者の性能向上用途のものはHPC(High Performance Computing)クラスタと呼ばれる。HPCクラスタには、Oracleの「RAC(Real Application Cluster)」、MySQLの「MySQL Cluster」、PostgreSQLの「PGCluster」などのようなDBクラスタやDBレプリケーションという方式がある。それぞれの方式の特徴を簡単に説明すると次のようになる。

1.HAクラスタ

商用のクラスタソフトまたはOSSの組み合わせにより、DBMSとは別の外部機能でクラスタリング構成を実現する。よく使われる商用クラスタソフトウェアとしては、LifeKeeper、ClusterPro、RedHat Cluster Suite、 HACMP、VERITAS Cluster Serverなどがある。これに対して、OSSを使用する場合には一般的にはDRBD+heartbeatの組み合わせが採用されることが多い。Active-Standbyの2台構成が主流だが、製品によってはActive-Active型や1対N台の多サーバ構成も可能になっている。Active-Standby構成の場合、DBMSのライセンスが1ノード分でいい反面、負荷分散にはならない点と、正常時であればStandbyのサーバが1台遊んでしまう点がもったいない、などのデメリットがある。

2.HPCクラスタ(DBクラスタ・DBレプリケーション

こちらは前述のHAクラスタとは違い、外部機能ではなく(広義には)DBMSの機能のみでクラスタリングを実現する。DBMSにより様々な方式があり、耐障害性のためのクラスタリングや、それに加え性能向上も実現するクラスタリングなどがある。DBMSの機能によるクラスタリング手法としては、次のようなものがある。(※ただし、OracleRACOracle Databaseのみではなくクラスタソフトも必要とするため厳密には少し異なる)

レプリケーション方式は、更新+参照負荷型の「マスター⇔マスター構成」、参照負荷型の「マスター⇔スレーブ構成」の2パターン。データ同期の方式は非同期が主流。更新+参照負荷分散、参照分散のいずれの方式でもアプリケーション実装時にはインフラ構成を意識した設計・実装が必要となる。これに対し、RACMySQL ClusterなどのDBクラスタでは、DBMS側でデータの完全同期を保証するため、アプリケーション実装や運用設計などの負荷が軽い場合が多い。ただ、DBクラスタはインフラ設計上の難易度はレプリケーションよりも高くなる。

OSSを使ったクラスタリング

さて、ではここで本題。商用クラスタソフトは勿論高性能だが、OSSを使用したクラスタリングも採用実績が多い。これは、メイン要素であるデータベースにOSSDBMSが採用されるケースが増えてきたことにも関係している。勿論、日本国内でのミッションクリティカルなシステムにおいては、OracleSQL Serverが相変わらず強い傾向は変わらないないが。DBサーバにおけるクラスタリング観点は2つあると書いたが、ここで説明したいクラスタリングは、OSSであるDRBDとheartbeatを組み合わせたHAクラスタである。DBサーバを冗長化する上で保護すべきシステム構成要素としては、次のようになる。

稼動系ノード障害時に、これらのリソースが待機系ノードにフェイルオーバし、システムのダウンタイムを最小化することが、HAクラスタの目的である。OSSでのHAクラスタの一般的な構成例の1つを以下に示す。

使用する各ソフトウェアの説明は次のようになる。

  • heartbeat
  • ipfail
    • heartbeatと連携させ、ネットワーク監視・障害検知を行う
    • heartbeat単体ではハートビートが切れない限りネットワーク障害を検知できない
  • DRBD

さて、今回はここまで。今回はOSSを使ったHAクラスタの概要を紹介したが、今後は実際にOSS HAクラスタ構成を構築する方法をまとめていきたい。なお、ここで取り扱うHAクラスタ構成でレプリケーションマスターを構築し、これにレプリケーションスレーブをぶら下げる構成もよく使われる。