02.28日40 - 個別の読み取りと書き込み

みなさん、こんにちは、私はこのコラムの「MySQLの本当の」生徒の一人として、これが私の最初のパンチ40日、私の最初の103回この操作で、雪を隠すんです。

今日、私はと呼ばれる記事の欄を確認し、「個別の読み取りと書き込みピットは何ですか?「記事。

キーワード概要:個別の読み取りと書き込み建築の特徴を持つクライアント/ダイレクト/プロキシは、処理プログラムの有効期限が切れて読んで、アクティブなデータベースプログラム(クエリタイプ)を通過させ、SLEEPプログラム(問題不正確プログラム)、それが遅延スタンバイなしと判断されますクエリから半同期スキーム(半同期設計とプログラム(三つの接近は遅延を確実にないようにライブラリによって調製した)、そしてそれ以上は遅延なく半同期スタンバイ既存のプログラム、両方の場合において、ライブラリシーンにおけるライブラリから実行されます等GTIDプログラム(ロジックのコマンドと同様、MySQLの5.7.6バージョン、GTIDとして、コマンドは、他の結果のいくつかを返す)正しい論理データを保証するために見つけることができる2つの質問)、およびメインライブラリプログラムロジックの他の部位(コマンド、実行フロー)。

 

研究の概要:

 

別々の読み取りと書き込みの建築の特徴を持つクライアント/ダイレクト/プロキシ

  • ダイレクトコネクトクライアントプロキシは、前方の簡単なトラブルシューティングするためにわずかに良いクエリのパフォーマンス、シンプルな構造を、行っておりません。展開の詳細を知っている必要があり、スタンバイの切り替え、ライブラリ移行操作、クライアントは、接続情報データベースを調整する必要性を認知しています。このフレームワークは、ビジネス・エンドが唯一のビジネスロジックの開発に注力するために形成のバックエンドの管理を担当し、そのような他の飼育係の試みを伴うことになります。
  • プロキシとのアーキテクチャは、クライアントがプロキシ接続の維持、バックエンド情報のメンテナンスを完了し、バックエンドの詳細に焦点を当てる必要はありません。バックエンドのチームが厳しいです。プロキシは、高可用性アーキテクチャを必要としています。アーキテクチャは、比較的複雑です。
     

期限切れの読み込み処理プログラム

  • メインライブラリプログラムを行くことを余儀なく。
  • 睡眠プログラム。
  • 遅滞なく、スタンバイプログラムを解析。
  • プログラムとセミ同期;
  • プライマリデータベースプログラムや他のサイト。
  • などGTIDプログラム。
     

メインライブラリプログラムを行くことを余儀なく

クエリの二つのタイプ

  • メインベースに送信された強力な整合性クエリ要求。
  • ライブラリに送信され、最終的な整合性クエリ。
     

睡眠プログラム

プログラムの不正確な問題

  • クエリ要求は、データベースから取得したデータに0.5秒にできるようになる場合は一貫して強いが、他方の第二です。
  • 1秒以上の遅延、またはそこには、読み取りを有効期限が切れた場合。
     

遅滞なく、待機プログラムの分析

3つのアプローチは、遅滞なく、ライブラリによって調製していることを確認してください

最初の方法:

  • たびに、ライブラリからのクエリは、判決はseconds_behind_master時に実行0に等しいです。

第二の方法、遅滞なく比較スタンバイサイトが保証するために:

  • Master_Log_Fileそして、Read_Master_Log_Pos最新のサイトを読み込むための主要なライブラリです
  • Relay_Matser_Log_Fileそして、Exec_Master_Log_Pos新しいサイトのライブラリ実装することにより調製されます。

ことを確保するため、第三の方法は、遅滞なく、比較GTIDスタンバイのセット。

  • Auto_Position=1 これは、マスタおよびスレーブGTIDでプロトコルを使用しています。
  • Retrieved_Gtid_Set これは、すべてのログGTIDコレクションを受けたライブラリが用意され、
  • Executed_Gtid_set すべてのGTIDは、ライブラリのコレクションの実行が完了したことにより調製されます。
     

半同期プログラムで

半同期デザイン

  • トランザクションは、ライブラリーから送信された主なライブラリービンログをコミットすると、
  • ビンログは、ライブラリからメインライブラリーのACKの送信を受信します。
  • 主なライブラリがACKクライアントに返さ受信し、確認するために「トランザクションが完了しています」。

どちらの場合も、ライブラリからのライブラリのシーンからマルチクエリの実装

  • クエリに対する応答は、ライブラリからのACK低下した場合、最新のデータを読み込みます。
  • ライブラリーからの場合、クエリは、ログは他の最新ではないかもしれない場合は、期限切れの読み取りを持っています。

半同期スタンバイプログラム遅延の問題が二つ存在せず

  • 場合期限切れ読み取り現象の存在から実行の数からマルチマスタデータベースクエリ。
  • 遅延は、過度の待機の一定の問題の下で発生することがあります。
     

そして、他の主要なライブラリサイト計画

コマンドロジック

select master_pos_wait(file, pos[, timeout]);
  • ライブラリーから実行中。
  • 順位パラメータファイルとメインのライブラリにファイル名と場所を参照してください。
  • Nの整数正のあるいはタイムアウトセット関数はN秒まで待機することを示しています。

コマンドは、いくつかの他の結果を返します。

  • スタンバイ・データベースの同期スレッド例外の実行が発生した場合、NULLが返されます。
  • 待機よりN秒未満ならば、それは-1を返します。
  • それは位置が実行開始時に行われていることが判明した場合、0が返されます。

Logicは正しいデータを確実にするために見つけることができます

  • 実行トランザクションが更新した後show master status、ファイルやポジションに実行するために現在のメインのライブラリを取得します。
  • ライブラリーからのクエリを実行し、選択。
  • ライブラリーから実行 select master_pos_wait(File, Position, 1);
  • 戻り値は、データベース内のクエリから> 0 =正の整数である場合。
  • それ以外の場合は、クエリを実行するための主な図書館。
     

そして、他のプログラムGTID

同様のロジックコマンド

 select wait_for_executed_gtid_set(gtid_set, 1);
  • 入ってくるgtid_setとリターン0を含むライブラリの物事の実行まで待ちます。
  • タイムアウトが返されます。

MySQLの5.7.6バージョンなどGTID実施プロセス

  • トランザクション更新後のリターンパケット取得取引GTIDから。
  • ライブラリーからのクエリを実行し、選択。
  • 実行を選択しwait_for_executed_gtid_setライブラリーから(トランザクションGTID、1);
  • 戻り値が0の場合は、ライブラリからクエリを実行。
  • それ以外の場合は、クエリを実行するための主な図書館。
     

遂に

再は、テキストに記載された内容を総括:マスター・マルチスレーブは別々の読み取りおよび書き込みで原因や対応プログラムを読んで期限が切れ、読み書きは、読んで読み取りと書き込みのパフォーマンスのトレードオフするために問題を引き起こし期限が切れました。

彼は182元の記事を発表 ウォン称賛12 ビュー10000 +

おすすめ

転載: blog.csdn.net/stevenchen1989/article/details/104548675