背景 レプリケーションはデータの完全なコピーです。レプリケーションが必要な理由として、まず思い浮かぶのは、ユーザーに損失をもたらす可能性のある偶発的なデータ損失の恐れです。 データレプリケーションを完了すると、それ以上の利点があることがわかります。1 台のマシンがダウンしても、別のマシンにバックアップされたデータを有効にできます。結局のところ、ダウンタイムの確率は非常に小さく、バックアップマシンは空き時間にメインマシンのトラフィックの負荷を分担することができます。さらに、データベースのバージョンをアップグレードする必要がある場合は、ユーザー サービスを停止せずに最初にスタンバイ マシンをアップグレードし、メイン データベースが使用可能で安定していることが確認されたら、メイン データベースをアップグレードできます。 しかし、DBA が手動コピーでレプリケーションを完了できるとは限りません。DBA の勤務中にクラッシュが発生した場合、その期間に生成されたデータは時間内にバックアップされず、スタンバイ データベースでデータが失われることになります。そのため、自動レプリケーションのメカニズムを設計する必要があります。 複製メカニズムの設計 コピーしたデータベースをマスター データベース、貼り付けたデータベースをスレーブ データベースとして暫定的に定義します。マスター データベースからスレーブ データベースへのレプリケーションを実現するのは非常に簡単です。マスター データベースのデータ ファイルのコピーを定期的にコピーし、スレーブ データベースが配置されているサーバーに転送するスケジュールされたタスクのみが必要です。 しかし、結局のところ、スケジュールされたタスクはリアルタイムではありません。マスター データベースが最後のレプリケーションから 10 分後に失敗した場合、アクティブ化されたスレーブ データベースは最後にレプリケーションされたデータを使用するため、10 分間のデータが失われ、結果は悲惨なものになります。 リアルタイムのレプリケーションが依然として必要な場合は、マスター データベースは実行された各ステートメントをスレーブ データベースにリアルタイムで送信し、スレーブ データベースがそれを即座に実行できるようにすることで、両側のデータの一貫性を確保できます。 あまり良くないのは、マスター データベースがスレーブ データベースにデータをリアルタイムで送信し、スレーブ データベースの実行が終了してからでないと次のステートメントを処理できないため、マスター データベースの実行時間が大幅に消費されることです。スレーブ データベースが多すぎると、マスター データベースは役に立たなくなります。 メイン データベースの時間を節約するには、非同期に変更する必要があります。メイン データベースによって実行されたステートメントはファイルに保存され、スレーブ データベースはそれを取得できるため、メイン データベースはスレーブ データベースを待つ必要がありません。ファイルに書き込まれるため、速度が非常に高速です。メインデータベースは、実行前にステートメントをファイルに書き込むことで、より高い同期効率を実現できます。 上記の問題の一部では、スレーブ データベースはマスター データベースを実行してデータを取得することができません。スレッドを開始してマスター データベースとの接続を確立し、マスター データベースからデータを要求することしかできません。次に、マスター データベースもスレッドを開始してファイル コンテンツを読み取り、スレーブ データベース スレッドにプッシュします。ステートメントを受け取った後、スレーブ データベースはすぐにそれを実行できます。 これはまだ非常に非効率的です。マスター データベースのスレッドは、スレーブ データベースがステートメントを受信して実行を完了するまで待機してから、次のステートメントをプッシュする必要があります。スレーブ データベースが複数ある場合、マスター データベースは各スレーブ データベースとの長期通信を維持するために複数のスレッドを開始する必要があり、マスター データベース サーバーのリソースを占有します。スレーブ データベースでは、マスター データベースから送信されたステートメントを一時的に保存するファイルを作成し、最初に保存してからゆっくりと実行する方がよいでしょう。これにより、マスター データベースへの負荷が軽減され、スレーブ データベースも軽減されます。 スレーブにリレー用の独自のファイルが用意されたので、心配する必要はありません。スレーブは別のスレッドを開始し、リレー ファイル内のステートメントをゆっくりと実行できます。実行が完了すると、元のファイルには価値がなくなり、サーバー リソースの占有を避けるためにクリーンアップできます。 これまで、最も基本的なレプリケーション メカニズムが設計されています。マスター データベースからスレーブ データベースへのこのレプリケーション方法は、典型的なマスター スレーブ アーキテクチャであり、これに基づいて進化させることができます。たとえば、スレーブ データベースが多数ある場合、マスター データベースは各スレーブ データベースにデータをプッシュする必要があり、それに応じてマスター データベースへの負荷が増加します。マスター データベースの役割は、データの同期だけでなく、データの読み取りと書き込みも行うため、データ同期タスクは他の誰かに置き換えることができます。たとえば、マスター データベースとスレーブ データベースの間に別のマスター データベースが確立されます。新しく確立されたマスター データベースの役割は、スレーブ データベースにデータを同期することです。このようにして、実際のマスター データベースは、新しく確立されたマスター データベースにデータを 1 回プッシュするだけで済み、残りの時間はデータの読み取りと書き込みに集中できます。 この進化したレプリケーションモードは、マルチレベルレプリケーションアーキテクチャと呼ばれます。この記事はここで終わります。上記は、3つのレプリケーションアーキテクチャのうちの2つです。さらに、「マスターマスター」アーキテクチャもあります。ここでは詳細には触れません。興味がある場合は、自分で詳しく調べたり、以降の記事に注目したりしてください。 以上がMySQLレプリケーションメカニズムに関する知識のすべてです。123WORDPRESS.COMへのご支援に感謝いたします。 以下もご興味があるかもしれません:
|
<<: Tomcat を IDEA にダウンロード、インストール、デプロイするチュートリアル (IDEA の 2 つのホット デプロイ設定方法付き)
>>: Node.js を使用してパスワード ジェネレータを作成するための完全な手順
目次1. JDKをダウンロードする(例としてjdk1.8.0を使用する) 2. JDK をインストー...
xml <?xml バージョン="1.0" エンコーディング="...
IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...
この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...
目次Vue2 ライティングVue3プラグインのバージョンの記述Vue3 動的コンポーネントの記述書き...
この記事では、explain を使用して SQL ステートメントを分析する方法を紹介します。実際、イ...
Linux ではすべてがファイルなので、Android システム自体は Linux + Java だ...
1. スタートアップメニューでは、カーソルを最初の行に移動します - eを押します 2. UTF-8...
目次ビジネス要件:解決策 1: vuex-persistedstate解決策2: vuex-pers...
2020 年 4 月 23 日、本日、Windows 上の Ubuntu 20.04 では、Ubun...
CSS にカスケード メカニズムがあるのはなぜですか? CSS では、同じ要素の特定のプロパティに同...
<br />一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると[フ...
目次概要1. バックエンドデータの取得と処理2. インターフェース表示処理概要前回のエッセイ「ステッ...
元のコードは次のとおりです。 <div class='コントロールグループ'&...
####システム内の入出力の管理#### 1. システムの入力と出力のリダイレクトを理解する入力リダ...