イェジンハオの研究では、問題を分析し、すべては思考のシステムを持っていると思います。
他の人はまだ唯一の認知MySQLインスタンスに残っている場合は、あなたが知っている、実際には、少なくとも彼らは長い間、このようにする必要があり、MySQLの環境を作り出します。
なぜマスタースレーブ
ほとんど本番環境上のすべてのシステムは、スタンドアローン、通常はマスタースレーブアーキテクチャを使用することはできません。
:そして、なぜマスタースレーブは、単にこれらのいくつかのキーワードを覚えなければならないSPOF、別々の読み取りおよび書き込み、バックアップ、スケールアウト。
二つの点で、実際には、まとめます。
1、
SPOFを防ぐために:SPOF、単一障害点は、あなたが唯一のMySQLインスタンスを持っている場合、それは死んだ、それはあなたのシステム全体のベンの崩壊を意味してデータベースサービスを終了することを意味します。MySQLをハングアップする場合でも、MySQLはトップに数十万人は、少し牛Bの一部は、あります
2、
別の読み取りおよび書き込みは:一般的には、当社の事業は、あなたが他のスレーブに読み取るために、マスターに書き込むことができ、この時間を書くよりも多くのを読んでいます。
たとえば、あなたが欲しい(バックアップ)データをバックアップするために、マスター上で直接のmysqldumpを実行した場合、明らかに、ライト線に影響を与えるだろう、この時間は、あなたは静かに実行され、スレーブを、見つけることができます。
たとえば、あなたが読み取り要求のより多くのを見つけ、この時間だけ、次の読み出し要求を共有するために、いくつかのカドガン奴隷を必要とする、これはスケールアウト、スケーラビリティ。
別の例として、あなたはHadoopのに行き、最近の日については受注の様々なタイプの、この時間、静かに1スレーブから、エクスポートデータのHadoopへのスレーブで動作し、またはデータ、統計を分析したいです分析は、することができます。
二つのアクション
システムの各支持マスタースレーブ・アーキテクチャは、我々は2つのアクションを実現する方法を検討する必要があります。マスタースレーブレプリケーションをし、メインスイッチから。
通常、マスターコピーへのスレーブからのそれぞれのデータは、ダウンマスターでは、マスタスレーブに切り替わります主、切り替える必要があります。
ここではこれら2つのMySQLの作用を達成する方法について話をします。
マスタースレーブのレプリケーション
マスターがデータを書き込むようにした後、データをマスタからコピーされたスレーブに同期させる必要があります。
したがって、これらのデータをマスター、どのスレーブに送信されたプロトコル、フォーマットの種類は?それらの間の複製は異なり、そのように異なるシステムの異なる機能するので、データを格納するためのそれらのデータ構造は、異なっています。
たとえば、Redisのために、髪は、MySQLのRDBまたはAOFファイルで、髪はビンログです。
ビンは、具体的に参照して、3つの形式、混合文/行/ログ複製フォーマット。
それでは、どのビンログには、マスターからスレーブに送信され、そしてどのようにそれをスレーブに実行されますか?
MySQLは過ごした3つのスレッドをスレーブにこのプロセス、マスターで一、二を達成するために、:
- スレッドダンプのbinlogスレーブに送信された責任をビンログを:
- Iスレーブ/ Oスレッド:マスターを受信するための責任は私にビンログを送信し、そして呼ばれる一時的な記憶の中に入れ、リレーログログファイル
- SQLスレッドスレーブ:読み取りリレーログは、内部の内容を実行します
MySQLは、このようなデザインは、実際には、よく見て、なぜ、あなたはこの全体のプロセスを見つけるだろうにと、プロセスは、メッセージングミドルウェアのようなビットがメッセージを処理しているので、私は別の記事を書いた前に質問は次のようになります。なぜ、メッセージングミドルウェアを使用します
あなたが見る、知識が相互接続されています。
マスター・スレーブ遅延
メインから切り替える前に言えば、我々は、主遅延からに話を聞きました。
マスタースレーブシステムは、マスターで書かれている遅延、なり、スレーブの同期がすぐにわかりについて考え、物事が起こるが変化し、それが存在していませんがあります。
その後、遅延のための主な理由の原因となることから、何をしますか?
かもしれスレーブマシンのパフォーマンスが悪い、スレーブ5Sで実行される文1Sマスターの実装は、通常、スレーブを行い、非常に一般的な機械に従事し資金繰りが苦しい会社でそれを行います。
のではない悪貨が、その後のように良いマスターとスレーブマシンを聞かせてみましょう。
しかし、これはまだ偉大なマスター・スレーブ遅延、なぜですか?
ああ、私たちがいることをあまりにも多くの分析業務を置くスレーブを入れて、データを分析する際に様々なビジネス終わり、マスターには影響を与えないようにするために、スレーブを取ることを選択した、スレーブ過剰な圧力は、自然に遅れます。
だから我々はあなたが行うにはあまりにも忙しいじゃないマスターマルチスレーブ、スレーブを持って、私はさらにいくつかのヘルパーを見つけることができます。
この時間遅延は、右、小さなすべきですか?
そして、いや、我々はシステムが時折、まだ、このようなコミットを実行する際には、実装に時間のかかる事務スレーブ10秒であることが判明し、長い時間、をチェックし、大きな遅延があることを、スレーブは10秒を延期されていました。
今回は、なぜ書くか分からないしてみてください大口取引にそれを。
スイッチングマスターから
今、「マスター・スレーブスイッチ」の用語インチ
それはマスターがダウンしているときにのみ、我々は一貫性と可用性の間の優先昆布を求め、正確ので上記の「マスター・スレーブ遅延」です。
最後はC(強い整合)または(可用性)を選択することで実際には、それは、理論的には、満たさなければならないCAPは、多くの場合、P(分割耐性)の場合に遭遇選択されます。
如果要保证强一致性,那么切换时就有这几个步骤:
- 把原来的Master,设置为read-only = true,这个时刻记为time1;
- 等待Slave执行完Master发给它的bin log,直到Slave和Master一致,这个时刻记为time2;
- 现在一致了,可以把slave设置为read-only = false,即可写入
在这个过程中,从time1到time2的时间,系统是无法被写入的,即不可用。
这个不可用的时间,取决于切换的时候,slave和master的延迟时间,延迟的越长,同步完成需要的时间就越长,不可用的时间也就越长。
保证强一致性,就会牺牲可用性,如果你不想系统有不可用的时间呢?那就得牺牲强一致性,因为你必须在Slave和Master还没完全同步时,就把Slave切换为Master。
主从数据不一致,会有什么问题呢?思考题。
总结
这篇文章只是在讲Mysql的主从吗?
我们总会说,技术那么多,还日新月异的,好像每天都有新的很厉害的技术出来,学不动。
但其实,如果学一项技术,就只是在学一项技术,而不去举一反三,发现知识背后通用的规则,那你之前学的知识,就只是在占用你大脑的内存,对你之后学的东西,没任何帮助。
但是如果你可以把所学的知识,串起来,形成一个体系,用系统的角度去看他们,那就不一样了。
比如今天我学了Mysql主从,那么当我们下次在学习其他系统的主从架构时,比如说redis,就可以照着今天这个思路去学习:
- redis的主从架构长什么样子?
- redis主从之间如何进行复制,数据格式是怎么样的?
- redis主从延迟的原因有哪些?
- master宕机时,redis如何进行主从切换?
- ...
知识都是通的。
留个问题
现在我们学会用「主从」的角度来看待mysql,而不再是一个独立的机器。
有什么用呢?留个问题好了。
私たちは、多くの場合、1つは、二つのテーブルがあるなど、ビジネスでの外部キーを使用して「計画表計画、」他のフィールドがありplan_staff「従業員テーブルplan_staffに適用スキーム」、plan_id、計画表を指していますこれを行うには、主キーは、問題があるのでしょうか?
参照
- MySQLのレプリケーション
- MySQLの実際の45話すDINC
ます。https://www.jianshu.com/p/8cda3202c80dで再現