データベース・クラスタの概要
はじめに
これから4回にわたり、PostgreSQLを中心に、データベース・クラスタについて解説します。以下の内容を予定しています。
- 第1回: データベース・クラスタの概要
- 第2回: PostgreSQLクラスタの動向
- 第3回: 主要なPostgreSQLクラスタ(前編)
- 第4回: 主要なPostgreSQLクラスタ(後編)
1. データベース・クラスタとは
データベース構築の基本は、1つのサーバーに1つのデータベースを構築し、運用することです。しかし、いろいろな理由から、1つのデータベースを複数のサーバー(仮想サーバーを含む)にまたがって構築するケースが増えてきました。
本連載では、いろいろな種類のデータベース・クラスタとその用途、主な技術や実装例を解説します。解説の対象となるデータベース・クラスタとは、1つのデータベースを、複数のサーバーや仮想サーバー上に構築するシステムを指します。
データベース・クラスタに似たものとして、複数の異なるデータベース同士を連携させたシステムがあります。あるデータベースからほかのデータベースのデータを読み書きするシステムであり、「DBLink」や「SQL/MED」(Management of External Data)と呼ぶ言葉で知られています。これらは、本連載の範囲外とします。
2. データベース・クラスタの用途
データベースが提供する機能のうち、1つのサーバーだけでは実現がむずかしい代表的な機能は、以下の3つです。
- 高可用性(Transactional)
- 並列処理(Analytic)
- 性能向上(Online)
この分類は、オープン・ソースのリレーショナル・データベース管理システム(RDBMS)である「PostgreSQL」のコア・メンバーであるJosh Berkus氏が提案したものです。この分類は、PostgreSQLを用いた現在のクラスタ技術における議論のベースになっています。
- 高可用性(Transactional)
-
何らかの原因でデータベースがクラッシュした場合であっても、短時間のうちに運転を再開し、なおかつデータの内容が失われないようにしなければならない場合があります。データベースの可用性とは、データベースが運転できる時間と、障害が発生して運転できない時間の割合です。99.9%や99.99%といったように表します。
可用性が99.99%とは、年間で約53分、障害のためにデータベースが使えないことを表します。一方、99.999%の可用性とは、年間で障害のために運転できない時間が約5分程度であることを示しています。
障害発生時、サーバーが1台の場合は、あらかじめバックアップしておいたデータを復元し、これにバックアップ以降の更新ログ(トランザクション・ログ)を適用して、データベースを復旧する必要があります。バックアップしただけでは、バックアップ取得後の変更が失われてしまうので、バックアアップ処理以降の変更を反映する必要があるのです。
サーバーがハードウエア障害によってクラッシュした場合は、新しいサーバーを入手してデータベースのバックアップを復元し、さらに変更を反映する必要があります。このため、ソフトウエア障害に比べて復旧までの時間が長くなり、数日単位の時間がかかります。データベースの運用として、許容されることではありません。
高可用性(高い可用性)を実現するための基本は、データベース・システムを構成するサーバー機やストレージ器機を、それぞれ2台以上で構成し(冗長化といいます)、万が一どちらかが障害でクラッシュしても、短時間のうちに運転を再開できるようにすることです。これを高可用性クラスタと呼びます。この手法の詳細は、以降で説明します。
高可用性クラスタを構築する際の注意点は、どこか1カ所だけが故障したことによって復旧までの時間が長くなるようなことがないようにすることです。このように、その部分が1カ所故障するだけでシステム全体が故障してしまうような部分を、単一故障点(Single Point Of Failure、SPOF)と呼びます。
- 並列処理(Analytic)
-
データ・ウエアハウス(DWH)を情報ソースとしたデータ分析アプリケーション(BIツールなど)のように、データベースの内容を解析するアプリケーションがあります。
このようなケースでは、解析対象となるデータのサイズが大きいことや(数ギガ・バイトから数テラ・バイト、あるいはそれ以上)、解析に使用するSQL文が複雑であることから(10個以上のテーブルを複雑に組み合わせて統計処理を行うなど)、1つのSQLの処理にかかる時間も膨大になります。
このような場合に有効な手段として、データベースを複数の小さなものに分解し、それぞれの解析を並列に実行して結果を統合する、というやり方があります。これにより、解析時間を節約できるケースが多いです。
- 性能向上(Online)
-
データベースのユーザー数が膨大になることは、Web系のアプリケーションではよく見られます。大規模なWebアプリケーションの場合、1つのデータベースのコピーを作り、データベースの参照はこのコピーに対して行うようにすることで、ユーザー数の増大にも対応できるようになります。
複数のサーバーを組み合わせることで、これら3つの要求に応えられるようにしたシステム形態が、データベース・クラスタです。
以下では、各要求に適したデータベース・クラスタについて解説します。