データベースインスタンスのレプリケーションとは、サーバーに1つまたは複数のバックアップデータベースを設定する方法でデータ同期を行い、MySQLのデータを複数のシステムに分散させることを指します。本記事では、TencentDB for MySQLがサポートするデータレプリケーション方式およびTXSQLカーネルによるデータ同期の最適化についてご紹介します。
説明:
Primaryはマスターデータベースインスタンスを指し、Standbyはバックアップ用データベースインスタンスを指します。
MySQL 5.6、5.7、8.0バージョンは3種類のレプリケーション方式(非同期、準同期、強同期)に対応しています、5.5バージョンは非同期方式に対応します。
TencentDB for MySQLがサポートするデータレプリケーション方式
一、非同期レプリケーション
アプリケーションがデータ更新リクエスト(insert、update、delete操作を含む)を発行します。マスターノードは更新操作を実行完了後、直ちにアプリケーションに対して応答を返します。その後、マスターノードはスレーブノードに対してデータをレプリケーションします。
データ更新プロセスにおいて、マスターノードはスレーブノードの応答を待つ必要がないため、非同期レプリケーションのデータベースインスタンスは通常高いパフォーマンスを有し、スレーブノードが利用できなくてもマスターノードのサービス提供に影響しません。ただし、データはスレーブノードにリアルタイムで同期されないため、遅延が発生しているスレーブノードでマスターノードに障害が発生した場合、低い確率でデータ不整合が生じる可能性があります。
TencentDB for MySQLの非同期レプリケーションは、1つのマスターと1つのスレーブからなるアーキテクチャを採用しています。
二、準同期レプリケーション
アプリケーションがデータ更新リクエスト(insert、update、delete操作を含む)を発行します。マスターノードは更新操作を実行完了後、直ちにスレーブノードに対してデータをレプリケーションします。スレーブノードがデータを受信しリレーログに書き込み(実行不要)、その後マスターノードに成功情報を返します。マスターノードはスレーブノードからの成功情報を受信してから、アプリケーションに対して応答を返す必要があります。
データレプリケーションに異常が発生した場合(スレーブノードが利用不可、またはデータレプリケーションに使用するネットワークに異常が発生した場合)のみ、マスターノードはアプリケーションへの応答を一時停止し(MySQLデフォルトで約10秒)、レプリケーション方式を非同期レプリケーションに切り替えられます。データレプリケーションが正常に復旧すると、準同期レプリケーションに復元されます。
TencentDB for MySQLの準同期レプリケーションは、1つのマスターと1つのスレーブからなるアーキテクチャを採用しています。
三、強同期レプリケーション
アプリケーションがデータ更新リクエスト(insert、update、delete操作を含む)を発行します。マスターノードは更新操作を実行完了後、直ちにスレーブノードに対してデータをレプリケーションします。スレーブノードがデータを受信しリレーログに書き込み(実行不要)、その後マスターノードに成功情報を返します。マスターノードはスレーブノードからの成功情報を受信してから、アプリケーションに対して応答を返す必要があります。
データレプリケーションに異常が発生した場合(スレーブノードが利用不可、またはデータレプリケーションに使用するネットワークに異常が発生した場合)、レプリケーション方式の降級は発生しません。データの一貫性を保証するため、この場合マスターノードは異常が終了するまでアプリケーションへの応答を一時停止します。
TencentDB for MySQLの強同期レプリケーションは、1つのマスターノードと2つのスレーブノードからなるアーキテクチャを採用しています。いずれか1台のスレーブノードが正常に実行されれば応答を返すため、単一のスレーブノードが利用不可になってもマスターノード上の操作に影響を与える問題を回避し、強同期レプリケーションクラスタの可用性を向上させます。
TXSQLカーネルによるデータ同期の最適化
問題点
非同期レプリケーション、準同期レプリケーション、強同期レプリケーションのいずれの方式においても、マスターノードまたはスレーブノードが利用不可になった場合、データ不整合が生じる可能性があります。
データベースはシステムデータの保存とサービスの中核機能として、非常に高い可用性が求められます。本番システムでは、通常ハイアベイラビリティソリューションによってシステムの継続稼働を保証する必要があり、データ同期技術はデータベースの高可用性ソリューションの基盤となります。
最適化方案
強同期レプリケーションソリューションは、Tencentが独自開発したMySQLプロトコルに基づく並列マルチスレッド強同期レプリケーション方式です。スレーブデータベースへのデータ同期が完全に完了した後(ログ含む)にのみ、マスターデータベースがアプリケーションのトランザクションに対して応答を返すことで、データの正確性と安全性を保証します。
原理の模式図は以下の通りです。
アプリケーション層がリクエストを発行する際、スレーブノードからの成功情報が返ってきた場合にのみ、マスターノードはアプリケーション層にリクエスト成功の応答を返します。これにより、マスターとスレーブのノード間でデータが完全に一致することが保証されます。
強同期方式はパフォーマンスにおいて他の主要な同期方式よりも優れており、主な特徴は以下の通りです:
一貫性のある同期レプリケーションにより、ノード間のデータ強整合性が保証されます。
ビジネス層に対して完全に透過的であり、ビジネス層で読み書き分離や同期強化の作業を行う必要はありません。
シリアル同期スレッドを非同期化し、スレッドプール機能を導入することで、パフォーマンスを大幅に向上させます。
クラウドディスク版アーキテクチャをサポートしています。
自動メンバー制御をサポートしており、障害ノードは自動的にクラスタから削除されます。
自動ノード参加をサポートしており、人的介入は不要です。
各ノードは完全なデータコピーを含んでおり、いつでも切り替え可能です。
共有ストレージデバイスは不要です。