Redis スタンドアロン、マスター/スレーブ、セントリー、クラスターの 4 つのモード

ここに画像の説明を挿入

Redis スタンドアロン モード

ここに画像の説明を挿入

Redis スタンドアロン モードは、Redis データベースが単一サーバー上で独立した単一プロセスとして実行されるモードを指します。このモードでは、Redis にはデータ シャーディングやクラスター構成が含まれず、すべてのデータと操作が 1 つのインスタンスで実行されます。以下は、Redis スタンドアロン モードの詳細な紹介です。

  1. 単一インスタンス: Redis スタンドアロン モードでは、Redis の 1 つのインスタンスのみがサーバー上で実行されます。このインスタンスは、すべてのデータ ストレージと操作リクエストの処理を担当します。

  2. メモリ データベース: Redis スタンドアロン モードは依然としてメモリベースのデータベースであり、すべてのデータはメモリに保存されるため、読み取り操作は非常に高速です。これにより、Redis スタンドアロン モードは、キャッシュ システムなどの高速読み取りが必要なアプリケーション シナリオに適しています。

  3. シングルスレッド モデル: Redis スタンドアロン モードは、シングルスレッド モデルを使用してクライアント要求を処理します。これは、ほとんどの Redis 操作がノンブロッキングであり、Redis のパフォーマンスのボトルネックがスレッドの同時実行性ではなく CPU にあることが多いためです。このシングルスレッド モデルは内部データ構造と操作を簡素化し、パフォーマンスと安定性を向上させます。

  4. 永続性: Redis スタンドアロン モードは、データの永続性、つまり再起動後の回復のためにデータをディスクに保存することをサポートします。主な永続化方法には、RDB (Redis Database Dump) と AOF (Append-Only File) の 2 つがあります。RDB はデータベースのスナップショットをディスクに保存し、AOF はデータ回復のためにファイルに書き込み操作を追加します。

  5. データ型: Redis スタンドアロン モードは、文字列、ハッシュ テーブル、リスト、セット、順序付きセットなど、さまざまなデータ型をサポートします。これらのデータ型により、Redis をキャッシュ、カウンター、リーダーボード、リアルタイム分析などのさまざまな目的に使用できるようになります。

  6. パブリッシュ - サブスクライブ: Redis スタンドアロン モードはパブリッシュ - サブスクライブ モードをサポートしています。このモードでは、1 つのクライアントがメッセージをパブリッシュし、他のクライアントが対象のメッセージ チャネルをサブスクライブできます。これは、リアルタイム メッセージング システムを構築する場合に非常に役立ちます。

  7. トランザクション: Redis スタンドアロン モードはトランザクションをサポートしており、複数のコマンドを 1 つのアトミック操作 (すべて送信またはすべてロールバック) で実行できます。

  8. アプリケーション シナリオ: Redis スタンドアロン モードは、小規模アプリケーション、または特に高いデータ可用性を必要としないシナリオに適しています。キャッシュ、カウンター、リアルタイム分析、リーダーボード、タスクキューなどとして使用できます。

Redis スタンドアロン モードにはシンプルさと使いやすさという利点がありますが、高い同時実行性や大規模なデータに直面すると、パフォーマンスと可用性のボトルネックが発生する可能性があります。

Redis マスター/スレーブ モード

ここに画像の説明を挿入

Redis マスター/スレーブ モードは、Redis データベースの可用性、パフォーマンス、データ バックアップ機能を向上させるために使用される分散アーキテクチャです。マスター/スレーブ モードでは、マスター ノード (マスター) と 1 つ以上のスレーブ ノード (スレーブ) が存在します。マスター ノードは書き込み操作と一部の読み取り操作の処理を担当し、スレーブ ノードはマスター ノードのデータの複製と一部の読み取り操作の処理を担当します。

Redis マスター/スレーブ モードの主な機能と動作原理は次のとおりです。

  1. データレプリケーション:マスターノードは書き込み操作と一部の読み取り操作を担当し、スレーブノードはマスターノードのデータを複製することでデータのバックアップと読み取り共有を実現します。スレーブ ノードは、データの一貫性を維持するために、マスター ノードからデータ スナップショット (RDB) または増分ログ (AOF) を定期的に取得します。

  2. 読み取りと書き込みの分離:マスター ノードは書き込み操作を担当し、スレーブ ノードは読み取り操作を担当するため、マスター ノードの負荷が共有されます。これにより、システムの全体的なパフォーマンスと耐荷重能力が向上します。

  3. データバックアップ:マスタースレーブ方式によりスレーブノードにデータをコピーすることで、データの冗長バックアップを実現します。マスター ノードに障害が発生した場合、スレーブ ノードの 1 つを新しいマスター ノードにアップグレードできるため、システムの可用性が確保されます。

  4. 障害回復:マスター ノードに障害が発生した場合、スレーブ ノードを新しいマスター ノードにアップグレードすることで、迅速な障害回復を実現できます。この処理をフェイルオーバー(フェイルオーバー)と呼びます。

  5. データ シャーディング:複数のスレーブ ノードを使用することにより、マスター/スレーブ モードでもデータ シャーディングを実現できるため、システムのスケーラビリティとパフォーマンスが向上します。

  6. 構成設定:マスター/スレーブ モードでは、スレーブ ノードはデータ レプリケーション用にマスター ノードのアドレスとポートを構成する必要があります。マスター ノードはスレーブ ノードの存在を自動的に感知しません。

  7. データ遅延:スレーブ ノードはマスター ノードからデータをコピーする必要があるため、マスター ノードに対してスレーブ ノードのデータにわずかな遅延が発生する可能性があります。

マスター/スレーブ モードは、Redis データベースの可用性とパフォーマンスを向上させる必要があるシナリオ、特に読み取りが多く書き込みが少ないアプリケーションに適しています。ただし、マスター/スレーブ モデルは高可用性を絶対に保証するものではありません。マスター ノードに障害が発生した場合、フェイルオーバーが完了するまでに時間がかかる可能性があるためです。より高いレベルの高可用性と分散要件については、Redis クラスター、センチネル モード、またはその他の分散データベース ソリューションの使用を検討できます。これらのモードについては以下で説明します。

Redis センチネル モード

ここに画像の説明を挿入

Redis Sentinel は、Redis クラスターを監視および管理するためのソリューションであり、高可用性と自動フェイルオーバーを提供するように設計されています。Redis センチネル モードでは、Redis センチネル プロセスのグループが Redis マスター ノードとスレーブ ノードのステータスを監視し、マスター ノードに障害が発生した場合に自動的にフェイルオーバーする役割を果たします。

Redis センチネル モードの主な機能と動作原理は次のとおりです。

  1. マスター ノードとスレーブ ノードを監視する: Redis センチネル プロセスは、マスター ノードとスレーブ ノードのステータスを定期的に監視します。ハートビートを送信し、Redis サーバーの応答を確認することで、ノードの健全性を判断します。

  2. 自動フェイルオーバー: Sentinel は、Redis マスター ノードの障害を自動的に検出し、高速フェイルオーバーのため、利用可能なスレーブ ノードを新しいマスター ノードとして昇格するよう調整します。これにより、システムのダウンタイムが短縮されます。

  3. 構成管理: Redis セントリーは複数の Redis マスター/スレーブ ノードを監視でき、ノードのステータスが変化すると、センチネルは自動的に構成を更新して、クライアントが正しいノードに接続していることを確認できます。

  4. サービス検出の提供:クライアントは、特定の Redis ノードに直接接続せずに、1 つ以上の Redis センチネル プロセスに接続できます。Sentry は、現在利用可能なマスター ノードとスレーブ ノードに関する情報をクライアントに提供できます。

  5. Multi-Sentinel モード:冗長性と高可用性を実現するために、複数の Redis Sentinel を構成できます。これらの Sentinel は相互に連携して、Redis クラスターを共同管理します。

  6. 投票による決定:フェイルオーバー プロセス中に、複数のセンチネルがスレーブ ノードを新しいマスター ノードに昇格させる必要があると考える場合、投票し、決定を下すためのコンセンサスに達します。

Redis センチネル モードは、特に読み取り/書き込みの分離とフェイルオーバーの点で、高可用性を必要とする Redis デプロイメントに適しています。Redis クラスターを効果的に監視および管理できるため、システムのダウンタイムが削減され、アプリケーションの安定性が向上します。

ただし、フェイルオーバー中にサービスが短時間中断される可能性があるため、Redis センチネル モードでは絶対的な高可用性が提供されないことに注意してください。より高いレベルの高可用性とパフォーマンスの要件については、以下で説明する Redis クラスターの使用を検討してください。

Redisクラスターモード

ここに画像の説明を挿入

Redis クラスター モードは、複数の Redis ノードを論理クラスターに結合して、高可用性、スケーラビリティ、およびデータ分散機能を提供する分散アーキテクチャです。Redis クラスターでは、データが複数のノードに分散され、各ノードがデータの一部を管理し、フェイルオーバーやデータ移行を自動的に実行することもできます。

Redis クラスター モードの主な機能と動作原理は次のとおりです。

  1. データ シャーディング: Redis クラスターはデータを複数のデータ シャードに分割し、各データ シャードは異なるノードに保存されます。これにより、データを複数のノードに効果的に分散でき、システムのスケーラビリティとパフォーマンスが向上します。

  2. 高可用性: Redis クラスターは高可用性を実現するように設計されており、各データ シャードには複数のコピーがあるため、ノードに障害が発生してもデータは引き続き利用可能です。クラスターは自動フェイルオーバーをサポートしており、スレーブ ノードを新しいマスター ノードにアップグレードできるため、システムの可用性が確保されます。

  3. 分散障害検出: Redis クラスターは障害検出に複数のノードを使用します。ノードに障害が発生すると、他のノードがそれを検出し、フェイルオーバーを調整できます。

  4. ノード間通信: Redis クラスター内のノードはバイナリ プロトコルを通じて通信し、データの同期、障害検出、ノード ステータスの維持を実現します。

  5. 自動データ移行:ノードを追加または削除するときに、Redis クラスターはデータ移行を自動的に実行して、データが異なるノード間で均等に分散されるようにします。

  6. データの一貫性: Redis クラスターはハッシュ スロットを使用してデータを分散し、同じキーを持つデータが同じノードに保存されるようにすることで、データの一貫性を確保します。

  7. 読み取りと書き込みの分離: Redis クラスターはクライアント側の読み取りと書き込みの分離をサポートしています。つまり、読み取り操作は複数のノードの任意のノードからデータを読み取ることができますが、書き込み操作はマスター ノードに送信されます。

  8. ノードの拡張: Redis クラスターの容量を拡張する必要がある場合は、新しいノードを追加することで実現できます。Redis クラスターは、容量拡張を実現するために、データの一部を新しいノードに自動的に移行します。

Redis クラスター モードは、高可用性、高性能、分散機能を必要とするシナリオ、特に大規模なデータや同時リクエストが多い場合に適しています。データを効果的に管理および分散し、より高いレベルの可用性とスケーラビリティを提供しますが、追加の構成および管理作業、特にクラスタ構成は骨の折れる作業、リソースの割り当て方法、伸縮性のあるアーキテクチャを伴う拡張や縮小も必要になります。 、比較的高度な技術です。もちろん、docker のデプロイ方法もありますので、試してみると、とても楽しくて興味深いです。

4つのモードの違い

Redis のスタンドアロン モード、マスター/スレーブ モード、センチネル モード、クラスター モードをそれぞれ導入しました。以下では、これら 4 つのモード間の違いをよりよく理解するために、これら 4 つのモードを簡単に比較します。

  1. スタンドアロンモード:

    • 概要: Redis スタンドアロン モードは最も単純なデプロイメント モードであり、単一サーバー上で 1 つの Redis インスタンスのみが実行されます。
    • 利点: シンプルで使いやすく、小規模なアプリケーションや開発環境に適しています。キャッシュや一時ストレージなどとして利用できます。
    • 短所: 高可用性がなく、単一障害点が発生するとデータが使用できなくなります。同時実行性が高く大規模なアプリケーションには適していません。
  2. マスタースレーブモード:

    • 概要: Redis マスター/スレーブ モードはマスター ノードとスレーブ ノードで構成され、スレーブ ノードはマスター ノードのデータを複製して、可用性と読み取り/書き込み分離を向上させます。
    • 利点: ある程度の高可用性と読み取り/書き込み分離が提供されます。マスターノードの障害にも対応し、高速フェイルオーバーを実現します。
    • 欠点: マスター ノードに障害が発生した場合、スレーブ ノードを新しいマスター ノードに手動でアップグレードする必要があり、ある程度のダウンタイムが発生します。大規模な書き込みやデータ配布のシナリオには適していません。
  3. センチネルモード:

    • 概要: Redis センチネル モードは、センチネル プロセスのグループを通じてマスター ノードとスレーブ ノードのステータスを監視し、フェイルオーバーを自動的に実行します。
    • 利点: マスター ノード障害の自動検出と高速フェイルオーバーにより、自動化された高可用性を提供します。高可用性が必要なシナリオに適しています。
    • 短所: フェイルオーバーにより、サービスが短時間中断される可能性があります。構成と管理は比較的複雑です。
  4. クラスターモード:

    • 概要: Redis クラスター モードは、複数のノードをクラスター化することでデータ シャーディングと高可用性を実現します。
    • 利点: 高可用性、拡張性、およびデータ分散機能を提供します。自動データ シャーディングとフェイルオーバー。大規模で同時実行性の高いシナリオに適しています。
    • 短所: 構成と管理が比較的複雑で、複数のノードを維持する必要があります。

一般に、さまざまな Redis デプロイメント モードが、さまざまなニーズやシナリオに適しています。シンプルなデータ ストレージまたは開発およびテスト環境が必要な場合は、スタンドアロン モードを検討できます。特定の高可用性と読み取り/書き込み分離が必要な場合は、マスター/スレーブ モードを選択できます。より高いレベルの自動化された高可用性とフェイルオーバーが必要な場合は、Sentinel モードを使用できます。また、高可用性、スケーラビリティ、およびデータ分散機能が必要な場合は、クラスター モードを選択できます。モードを選択するときは、アプリケーションのニーズ、可用性要件、パフォーマンス要件に基づいてトレードオフを検討し、決定を下してください。

また、前回の記事では、docker クラスターのデプロイに関わるため、Redis クラスターのデプロイに関する詳細な記事を公開しましたので、興味のある方は読んでください。
Docker は Redis クラスター ノードをデプロイします。
私の短いプロジェクト経験によると、まだ大規模なシステムに遭遇したことがないため、クラスター モードは使用したことがありません。これは、トークン認証またはユーザーの個人データを実装するスタンドアロン バージョンです。ストレージ。そのような高度な要件はありません。ただし、将来的には必要ないという意味ではありません。誰もがもっと学び、もっと練習したいと考えています。準備ができている人にはチャンスが常に確保されています。

それぞれのアプリケーションシナリオ

さまざまな Redis デプロイメント モードが、さまざまなアプリケーション シナリオに適しています。さまざまなシナリオに対する提案を次に示します。

  1. スタンドアロンモード:
    • 適用可能なシナリオ: 開発およびテスト環境、小規模アプリケーション、一時データ ストレージ、キャッシュ データ、一時カウンターなど。
  2. マスタースレーブモード:
    • 該当するシナリオ: 読み取りが多く書き込みが少ないアプリケーション、読み取りパフォーマンスの向上、一部のデータの冗長バックアップ。
  3. センチネルモード:
    • 適用可能なシナリオ: 自動化された高可用性とフェイルオーバーが必要であり、高いデータ可用性が必要なシナリオ。
  4. クラスターモード:
    • 適用可能なシナリオ: 高可用性、高性能、データ分散を必要とする大規模なアプリケーション、および大規模な書き込みおよび読み取りのシナリオ。

総合すると、適切な Redis デプロイメント モデルの選択は、アプリケーションのニーズと優先順位によって決まります。単純なキャッシュまたは一時ストレージが必要な場合は、スタンドアロン モードを選択できます。読み取り/書き込みの分離とある程度の高可用性が必要な場合は、マスター/スレーブ モードを選択できます。高可用性に対するより高い要件があり、フェールオーバーを手動で管理したくない場合は、Sentinel モードを選択できます。また、高可用性、スケーラビリティ、およびデータ分散が必要な場合は、クラスター モードを選択できます。どのモデルを選択する場合でも、実際のニーズに基づいてトレードオフと決定を行う必要があります。

秋の始まりで、2023年の夏は昨日になりました、私たちを祝福し、お互いを祝福し、空は涼しく、秋になり、すべてが成功します!来て!

おすすめ

転載: blog.csdn.net/weixin_53742691/article/details/132174609