例題に次のような選択肢があった。
「レプリケーション機能がサポートされている。」
レプリケーションとはどんな機能で、何の役に立つのか知識がなかったので深堀してみました。
レプリケーション機能について
「レプリケーション(Replication)」とは日本語では「複製」の意味になります。
公式サイトには参考になるページを見つけました。
一般的なレプリケーション機能の特徴は以下のものがあるようです。
- データの冗長性:データを複数のサーバーに複製し、信頼性を向上
- 負荷分散:読み取り操作を複数のサーバーに分散可能
- 高可用性:プライマリサーバーに障害が発生した場合のフェイルオーバー
- バックアップと災害復::地理的に分散したレプリカを維持可能
- データの整合性:プライマリとレプリカ間でデータの一貫性を保持
レプリケーションが使われる理由
レプリケーション機能の「スケールアウト(データの冗長性)」を利用することで、データベースの複製をいくつか作成しておいて、処理を別々のマシンに分散させることで処理を分散させることができます。
高いマシンを導入してインストール(スケールアップ)は高価なのでレプリケーション機能を使うことで安価にシステムを最大限活用することが可能になります。
さらにはサーバーがダウンしても複製しておくことでデータを失うリスクを避けることができます。
例えば通常利用しているデータベースと、複製して待機させているデータベースを用意しておくことで、通常利用の方で何かあっても待機させているデータベースを呼び出すことで通常通りの利用が可能になります。
このように複製して待機させておくことでマシンの処理能力を上回るときや、サーバーダウンなどのトラブルが発生しても問題なくデータベースの利用が可能になります。
レプリケーション機能によるスタンバイの種類
公式サイトにいくつかのスタンバイの種類が載っていたので確認しましょう。
- コールドスタンバイ
バックアップとしてスタンバイサーバーを保持する構成で、通常は停止しています。
復旧には時間がかかるため、ダウンタイムが長くなる可能性があります。
- ウォームスタンバイ
主サーバーからのデータ変更が適用されますが、スタンバイサーバーが読み取り専用クエリを処理できない構成です。
障害が発生した場合、手動またはスクリプトによってスタンバイサーバーが主サーバーとして昇格されますが、少しのダウンタイムが発生する可能性があります。
- ホットスタンバイ
データベースのレプリカを常に最新の状態に保ち、クライアントが読み取り専用のクエリを実行できるようにする構成です。
主サーバーが障害を起こした場合、スタンバイサーバーが主サーバーとして昇格し、ほぼ中断なくサービスを提供できます。
常時起動させてリアルタイムで稼働する必要があるホットスタンバイは運用コストが一番高くなります。
システムの用途や予算に応じて設定する必要がありそうです。
データ更新におけるシングルマスタとマルチマスタ
記事を読んでいたら、レプリケーション機能ではデータ更新における観点として、
「シングルマスタレプリケーション」と「マルチマスタレプリケーション」があるようです。
シングルマスタレプリケーション (Single-Master Replication)
シングルマスタレプリケーションでは、データの書き込み操作(INSERT、UPDATE、DELETE)は単一のマスターサーバーでのみ行われます。レプリカ(スタンバイサーバー)はマスターからデータの変更を受け取り、データを同期します。
マルチマスタレプリケーション (Multi-Master Replication)
マルチマスタレプリケーションでは、複数のマスターサーバーが存在し、どのマスターでもデータの書き込みが可能です。各マスターは他のマスターとデータを同期し合います。