はじめに
今回はMySQLのレプリケーション機能をご紹介させていただきます。
本記事は、非エンジニア、初心者向けの記事となっております。
Source/Replicaとは
表現の改変
もともとはMaster/Slaveと言われていたものですが、主人と奴隷という言葉通りネガティブな表現なためこの表記は廃止されてます。
現在は、MasterをSource、SlaveをReplicaと呼ぶようになりました。
MasterはPrimaryと表現されることが多いですが、旧master を、primary ではなく source にしたのは、いろんなレプリケーションの構成がある中で、必ずしも「primary」なわけではないからとのことです。
また、BlacklistはBlocklist、WhitelistはAllowlistと表現が変更されています。
レプリケーションとは
レプリケーションとは、データの複製(レプリカ)を別のサーバーに保持することができる機能です。
MySQLの標準機能で、多数のWebサイト等に用いられています。
- サーバーはSourceサーバーもReplicaサーバーにもどちらにもなることできます。
- Sourceサーバーは複数のReplicaサーバーを保持することができ、データが変更されると変更内容をReplicaサーバーに転送します。
- Replicaサーバーは1つのSourceサーバーのみ保持でき、Sourceサーバーの変更内容を受け取り、変更内容をデータベースに反映します。
メリット・デメリット
ここでレプリケーションのメリット・デメリットをご紹介します。
メリット
- 処理能力の向上
書き込みと更新をSourceサーバーで行い、参照はReplicaサーバーで実行可能なため
パフォーマンスを向上させられます。
性能に問題があれば、Replicaサーバーを追加し負荷を分散させることができます。 - データセキュリティー 、可用性の向上
データはReplicaサーバーに複製され、Replicaサーバーはレプリケーションプロセスを一時停止できるため、対応するSourceサーバーのデータを壊すことなくReplicaサーバーでバックアップサービスを実行できます。Sourceサーバーで障害が発生した際に、ReplicaサーバーをSourceサーバーに昇格させることが可能なため、継続稼働が可能です。 - 分析時のパフォーマンス劣化防止
Sourceサーバーでライブデータを作成しながら、Replicaサーバーで情報の分析を実行できるため、Sourceサーバーのパフォーマンスに影響しません。 - 長距離データ配布
支店などでメインデータのコピーを使用して作業する場合に、レプリケーションを使用してデータのローカルコピーを作成してそれらを使用できます (Sourceサーバーへの永続的なアクセスは不要)。
デメリット
- データ容量が増加する
レプリケーションを実施するとSourceサーバーのデータベースをそのまま複製するため
Replicaサーバーの数だけ容量が増加していきます。
レプリケーションの仕組み
仕組み
レプリケーションはバイナリロギングのメカニズムに基づいています。
Sourceサーバーで動作するインスタンスは更新、および変更を「イベント」としてバイナリログに書き込みを行います。
バイナリログ内の情報は、記録されているデータベース変更に応じて異なるロギング形式で格納されます。
ReplicaサーバーはSourceサーバーからバイナリログを読み取って、Replicaサーバーのローカルデータベースにあるバイナリログのイベントを実行するように構成される。
簡単に訳すと、
①Sourceサーバーは処理の内容をバイナリログに書き込みます。
②Replicaサーバー側で①のバイナリログを取得します。
③Replicaサーバー側で取得したバイナリログをReplicaサーバー側のDBに内容を反映します。
バイナリログ
バイナリログは、テーブル作成操作やテーブルデータへの変更などのデータベース変更を記述する「イベント」が格納されます。
レプリケーションについては、Sourceサーバー上のバイナリログは、Replicaサーバーに送信されるデータ変更のレコードを提供します。Sourceサーバーは、そのバイナリログに格納されているイベントをそのReplicaサーバーに送信し、Replicaサーバーはこれらのイベントを実行して、Sourceサーバー上で実行されたものと同じデータ変更を実行します。
バイナリログは、データを変更しない SELECT
や SHOW
などのステートメントでは使用されません。
更新系のSQLのみ格納されているという理解で
最後に
今回はMySQLのレプリケーションに関しましてご紹介させていただきました。
さらに踏み込んだ技術的な情報に関しましては、弊社の技術ブログがございますので、もっと技術的なことを知りたいという方は是非ともこちらもご覧いただければと思います。