目次
3. マスター/スレーブ レプリケーションのワークフロー原理
3. マスター/スレーブ レプリケーションに関するよくある質問
1.Redisとは何ですか
Redis は、現在最も人気のある NoSQL データベースの 1 つです。Redis は、ANSI C で書かれたオープン ソースであり、さまざまなデータ構造を含み、ネットワーク、メモリベース、オプションの永続性キーと値のペアのストレージ データベースをサポートしています。次のような特徴があります。 :
- メモリに基づいて実行され、効率的なパフォーマンスを発揮します
- 配布をサポートし、理論的には無限に拡張可能
- キーバリューストレージシステム
- このオープン ソースは ANSI C 言語で書かれており、BSD プロトコルに準拠し、ネットワークをサポートし、メモリベースおよび永続的なログ タイプの Key-Value データベースを使用でき、複数の言語で API を提供します。
わかりました!Redis とは何かについて簡単に説明します。これはデータを保存するための NoSQL であり、通常はキャッシュに使用されます。この記事は、Redis に基づいた Redis の基礎となるレイヤーをさらに理解するものでもあります。
2. Redis のマスター/スレーブ レプリケーション
わかりやすいシンプルな図
マルチサーバーセットアップ: マスターサーバーはデータを書き込み、他のスレーブサーバーに同期するだけですが、問題はデータの同期 です。そこで、マスター/スレーブ レプリケーションを使用してデータ同期の問題を解決します。
1. マスター/スレーブ レプリケーションとは何ですか?
マスター/スレーブ レプリケーションは、マスターのデータをスレーブに即座に効果的にコピーすることです。これはマスター/スレーブ レプリケーションと呼ばれます。
特徴: マスターは複数のスレーブを持つことができ、1 つのスレーブは 1 つのマスターにのみ対応します。
責任:
- マスター
- データの書き込み
- 書き込み操作を実行すると、変更されたデータがスレーブに自動的に同期されます。
- データの読み取り (通常は書き込み操作のみが実行され、読み取りはスレーブ サーバーによって行われます)
- 軟膏
- 読み取りデータ
- 書き込み禁止
2. マスター/スレーブ レプリケーションの役割
読み取りと書き込みの分離:マスター書き込み、スレーブ読み取り、サーバーの読み取りおよび書き込み負荷容量の向上
負荷分散:マスター/スレーブ構造に基づいて、読み取り/書き込み分離と組み合わせて、スレーブがマスター負荷を共有し、需要の変化に応じてスレーブの数を変更し、複数のスレーブ ノードを通じてデータ読み取り負荷を共有することで、大幅に向上します。 Redis サーバーの同時実行性とスループット。
障害回復:マスターで問題が発生した場合、スレーブは迅速な障害回復を実現するためのサービスを提供します。
データの冗長性:ホット データ バックアップの実装は、永続化に加えてデータの冗長性を実現する方法です。
高可用性基盤:マスター/スレーブ レプリケーションに基づいて、センチネル モードとクラスターを構築して、Redis 高可用性ソリューションを実装します。
3. マスター/スレーブ レプリケーションのワークフロー原理
まず概要を説明すると、マスター/スレーブ レプリケーションの原理を 2 つの段階に分け、その動作原理を接続確立段階、データ同期段階、コマンド伝播段階に分けます。
3.1. リンク確立段階
スレーブ サーバーはマスターのIP アドレスとポート番号を送信し、マスターは受信して応答します。応答を受信した後、スレーブはマスターの IP とポート番号を保存し、保存された情報に基づいてストケット チャネルを確立し、定期的な ping を開始します。マスターもポンで応答します。最後に、スレーブは自身のポート番号をマスターに送信し、マスターはスレーブのポート番号を保存します。
ステップ 1: スレーブはマスターのアドレスとポートを設定し、マスター情報を保存します。
ステップ 2: スレーブがソケット接続を確立する
ステップ 3: スレーブが ping コマンドを送信する (タイマー タスク)
ステップ 4: 認証 (redis はサーバーによって内部的に使用され、外部には提供されないため、設定されません)
ステップ 5: マスターはスレーブポート情報を保存します
3.2. データ同期段階
マスターサーバーが AOF をオンにするかマスターサーバーになると、レプリケーションバッファが作成されます。
① スレーブが初めて psync2 リクエストを送信すると、2 つのデータ psync2 ? -1(psync2 <runid> <offset>) が送信されます。これは、初めて完全にコピーする必要があることを意味します。②マスターは bgsave を実行して RDB ファイルを生成し、現在のコピーオフセットを記録する ③命令を受信すると、+fullresync 自身の uid オフセットを送信する ストケット経由でスレーブに RDB ファイルを送信すると、クライアントコマンドが受け付けられ、そしてオフセットも変わります。④スレーブはfullresyncを受信し、マスターのuidとoffset(オフセット)を保存し、現在のデータを全てクリアし、ストケット経由でRDBファイルを受け取り、RDBデータを復元します。
上記はフルコピーです
⑤コマンド:psync2 masterid offsetを送信します。⑥コマンドを受け付け、idが一致するかどうか、オフセットがコピーバッファにあるかどうかを判定します。
⑦ masterid または offset のどちらかが満たされていない場合は完全コピーが作成され、送信されたものがマスターと同じ場合は省略されます。マスターに保存されているオフセットと一致しない場合、続行オフセットが送信され、渡されます。 ソケットは、コピー バッファー内のマスターのオフセットから転送されたマスター オフセットにデータを送信します。⑧スレーブは +concatiue を受信し、マスターのオフセットを保存し、メッセージ受信後、bgrewriteaof を実行してデータを復元します。
上記の増分コピー
3.3. コマンド伝播段階
コマンド伝播フェーズ中に replconf ack offset コマンドを送信します。
3. マスター/スレーブ レプリケーションに関するよくある質問
1. 頻繁なフルコピー
問題の症状:
ネットワーク環境が悪く、ネットワークが中断されており、スレーブがサービスを提供していません。
問題の原因:
コピー バッファが小さすぎます。ネットワークが切断された後、スレーブのオフセットが範囲外になり、フル コピーがトリガーされます。
最終結果:
スレーブは完全なレプリケーションを繰り返し実行します
解決する:
コピーバッファサイズを変更する
repl-backlog-size
2. 頻繁なネットワーク中断
現象:
スレーブとマスター間の接続が切断されました
理由:
マスターが ping コマンドを送信する頻度が低くなります
マスターは短いタイムアウトを設定します
ping コマンドによりネットワーク内でパケット損失が発生する
解決する:
ping コマンドの送信頻度を増やす
repl-ping-slave-period
タイムアウト応答時間は、ping コマンドの頻度の少なくとも 5 ~ 10 倍にする必要があります。そうしないと、スレーブが簡単にタイムアウトしてしまいます。
3. データに一貫性がない
現象:
複数のスレーブが同期せずに同じデータを取得する
理由:
ネットワーク情報が同期されていないため、データ送信に遅延が発生しています。
プラン:
1. Alibaba Cloud など、通常は同じコンピューター室に展開されるマスターとスレーブのネットワーク環境を最適化します。
2. マスター/スレーブステージの遅延を監視します (オフセット経由) スレーブ遅延が大きすぎる場合は、スレーブへのプログラムのデータ アクセスを一時的にブロックします。
slave-serve-stale-data yes|no
開いた後は、info や smileof などのいくつかのコマンドにのみ応答します (データの一貫性要件が高くない限り、使用には注意してください)