どのようにRedisのデータのマスター・スレーブ同期

Redisのマスタ - スレーブ同期機構は、マスタとスレーブ同期Redisの間のデータことを確実にします。どの程度に応じてコンテンツ配信は、完全同期と部分同期に分けることができ、タイミング同期に従って修正同期の通常動作中にスレーブ同期とデータの開始直後の初期化に分けることができる。本稿では、分析のために、これら2つのメカニズムを処理します。

全体のバックアップ処理の後、あなたは、スレーブを起動すると、そのマスターに、このメッセージのマスター・スレーブ受信をSYNCメッセージを送信します、おそらく最初の、バックアップが完了したバックアップデータの後に、それはスレーブに送信されます、バックアップのためにデーモンを起動します完全な同期メカニズムと、このような何か:

(1)スレーブがマスタのSYNCに同期命令の後に送信を開始するために、マスタ・ハンドラは、コマンド()同期の後にコールsyncCommand SYNC命令を受信します。

(2)関数syncCommandで、あなたはすでにバックアッププロセスが実行されているがあれば関数は、データ同期のためのバックアップ・プロセスを開始rdbSaveBackground呼び出し、それが再起動されません。

(3)バックアップ・プロセスは、RedisののRDBファイルのために保存されるすべてのデータを完了するための関数rdbSave()を実行します。

(4)イベントRedisの時間関数serverCron(Redisの時間処理機能は、Redisのを操作するタイミングであろう関数である)では、データは、バックアップ処理され、バックアップ処理機能はserverCronされているかどうかをチェックしますバックアッププロセスは、呼び出し元の関数backgroundSaveDoneHandler完全なフォローアップ処理を完了している場合は、バックアップを終了します。

(5)関数backgroundSaveDoneHandlerにおいて、最初の更新マスター様々な状態、例えば、これにバックアップ成功または失敗、バックアップ時間、そしてため。関数を呼び出すupdateSlavesWaitingBgsaveすると、RDBのバックアップデータは、スレーブ待ちに送信されます。

(6)関数updateSlavesWaitingBgsaveに、スレーブはすべて、このバックアップを待っを横断します、ファイルバックアップRDBは、各スレーブに送信されます。スレーブがsendBulkToSlave(と呼ばれるソケット関数を対応するデータを送信することができたときに加えて、このデータは、過去に入れてすぐに送信されていませんが、登録待ちの各スレーブのためにイベントを書き込むと、書き込み応答機能sendBulkToSlaveイベントを登録します、それは、あります)実際の伝送RDBファイル操作は、機能sendBulkToSlaveで行われます。

スレーブにRDBファイル(7)sendBulkToSlave機能の意志のバックアップを送信します。

図1に示す上述した関数呼び出し:

関数呼び出し時に図のマスター部分の完全バックアップ。1つのRedisの

データ変更の第二に、同期

一般に、データのバックアップ操作さらに周期単一の場所は、パフォーマンスのRedisの最大程度を再生することができ完了するスレーブで、書き込み動作のための読み出し動作のための複数のスレーブのマスタでのRedis正常展開。完全に同期動作が完了した後、展開が完了した後、各マスター\スレーブプログラムが起動し、完全に同期動作、初期化の最初の第一段階は、後続のすべての書き込み操作は、すべての読み取り動作がスレーブで実行され、マスタ上で実行されます、ユーザーがデータの最大程度にペースを保つために時間内にすべてのスレーブ普及に書く必要がありそう。次のように同期され、通常動作時(書き込み、削除、変更操作を含む)を更新操作のRedisのマスター・スレーブプロセス:

(1)マスターは、ユーザの操作を受信した後、関数は、特定のアクション機能(別の文書「プロセスを意味呼び出す関数呼び出しRedisのコマンド解析処理、操作機能PROCによって実行される最初の機能」)これを行うには、呼び出し機能()を伝播し、必要であれば操作は、各スレーブへの拡散を必要とするかどうかを判定する。

()、各スレーブへの拡散の動作がreplicationFeedSlavesを呼び出すことによって、およびAOFの機能に記録feedAppendOnlyFile()オペレーションを呼び出すことにより、(2)動作AOFファイルのレコードまたは他のスレーブへの拡散を完了するために()関数を伝播インチ

メインファイルAOF(3)関数feedAppendOnlyFile()は、プロトコルRedisの機能の内部フォーマットに、最初の変換動作を操作を保存し、文字列として格納され、その後、動作ファイルAOFに格納されている文字列に付加。

(4)主にスレーブの各々に拡散機能replicationFeedSlaves()操作を、各スレーブを介して各スレーブのために次のように2つのステップを処理するために、機能を以下に自身をぶら下げ:スレーブデータベースへの切り替えこの操作は、データベース(スレーブデータベースIDとIDデータの不整合であればときに、この操作のための現在の動作)に対応し、コマンド及びパラメータはRedisのに応じて、キャッシュ応答スレーブプロトコル形式に書き込まれます。書き込みコマンドがaddReplyデータベースを切り替えるときに呼び出され、それがaddReplyMultiBulkLenとaddReplyBulk書き込みコマンドとパラメータを呼び出しますと、機能addReplyMultiBulkLen addReplyBulkは、最終的には、機能addReplyを呼び出します。

(5)関数でprepareClientToWrite addReply(呼び出し)sendReplyToClient(関数aeCreateFileEventで設定)スレーブソケット書き込みイベントハンドラを設定し、書き込みデータに対応するソケットスレーブ送信バッファ空間と、即ち、コールがsendReplyToClientに処理されるように。

(6)機能sendReplyToClient()関数は、送出スレーブソケットによって送信される主なデータです。

図2に示すように、図の動作中にデータの同期関数呼び出しRedisの関係。

図は、呼び出しの数が兄弟間の関係、意味のある数字を持って表しています。

おすすめ

転載: www.cnblogs.com/lice-blog/p/11616364.html