Redis HA の高可用性を確保する方法

この記事では主に、Redis がどのように高可用性を確保するかを紹介します。

1.Redisについて

Redis (Remote Dictionary Server) は、データベース、キャッシュ、メッセージ ミドルウェアとして使用できるオープン ソースのメモリ ベースのデータ構造ストレージ システムです。

Redis は、文字列、ハッシュ、リスト、セット、ソートされたセット、ビットマップ、HyperLogLog、地理空間インデックス半径クエリなど、複数のタイプのデータ構造をサポートします。

Redis には次の機能があります。

  1. 効率的なパフォーマンス: すべてのデータはメモリに保存されるため、Redis は高速な読み取りおよび書き込み速度を提供できます。
  2. 永続性: Redis は、データ損失を防ぐために、メモリ内のデータをディスクに永続化できます。
  3. 複数のデータ構造のサポート: Redis は、さまざまなデータ ストレージのニーズを満たすために複数のデータ構造をサポートします。
  4. トランザクションのサポート: Redis は、一連のコマンドのアトミック性を保証できるトランザクションをサポートします。
  5. パブリッシュ/サブスクライブ モードのサポート: Redis はパブリッシュ/サブスクライブ モードをサポートしており、メッセージ キューの実装に使用できます。
  6. Lua スクリプトのサポート: Redis は、サーバー側で複雑な操作を実行できる Lua スクリプトをサポートしています。
  7. マスター/スレーブ レプリケーションのサポート: Redis はマスター/スレーブ レプリケーションをサポートしており、データのバックアップや読み取りパフォーマンスの向上に使用できます。
  8. 高可用性とパーティショニングのサポート: Redis は、Redis Sentinel および Redis Cluster を通じて高可用性とデータ パーティショニングをサポートします。

2.Redisの利用シナリオ

Redis はさまざまなシナリオで使用できます。一般的な用途をいくつか示します。

  1. キャッシュ システム: Redis は高性能で豊富なデータ構造を備えているため、バックエンド データベースへのアクセスを効果的に削減し、アプリケーションの応答速度を向上させるキャッシュ システムとしてよく使用されます。
  2. メッセージ キュー: Redis のパブリッシュおよびサブスクライブ機能を使用して、異なるアプリケーション間でメッセージを非同期配信するためのメッセージ キューを実装できます。
  3. ランキング リスト: Redis のソート セットは、ランキングとスコアを迅速に取得し、リアルタイムで更新できるランキング機能の実装に非常に適しています。
  4. セッション キャッシュ: Redis を使用して、ユーザーのログイン ステータス、ショッピング カート情報などの Web アプリケーションのセッション情報を保存できます。
  5. リアルタイム分析: Redis の高速な読み書きと豊富なデータ構造により、Web サイト訪問の統計やユーザーの行動などのリアルタイム分析に非常に適しています。
  6. 地理空間データ: Redis の地理空間インデックスを使用して、地理的位置情報を保存し、位置クエリと距離計算を実行できます。
  7. カウンタ: Redis の INCR および DECR コマンドを使用して、Web サイトのクリックやダウンロードなどのカウントなどのカウンタ機能を実装できます。
  8. 分散ロック: Redis を使用すると、分散環境内のリソースに相互排他的にアクセスするための分散ロックを実装できます。

上記は Redis の用途のほんの一部ですが、Redis は柔軟性とパフォーマンスが高いため、より多くのシナリオで使用できます。

Redis には豊富なアプリケーション シナリオがあり、その高可用性を確保することが最優先事項です。
次に、Redis の高可用性について紹介します。

3.Redisの高可用性

Redis の高可用性には、Sentinel モードとクラスター モードという 2 つの主なタイプがあります。

3.1 センチネルモード(センチネル)

Redis Sentinel は、Redis 用に公式に推奨される高可用性ソリューションであり、Redis マスター/スレーブ サーバーを監視し、フェイルオーバーを実行し、通知を送信できます。

Redis マスター/スレーブ レプリケーションでは、1 つの Redis サーバーから 1 つ以上の Redis サーバーにデータをコピーできます。設定ファイルで、slaveof ディレクティブを使用してマスター ノードの IP アドレスとポートを指定します。
slaveof <masterip> <masterport>

Redis Sentinel の構成プロセスは次のとおりです。

まず、各 Sentinel ノードに構成ファイル (sentinel.conf など) を作成し、監視対象の Redis サーバーやその他のオプションを設定する必要があります。

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000

このうち、mymaster はメインサーバーの名前、
127.0.0.1 6379 はメインサーバーのアドレスとポート、
2 はメインサーバーの障害を判断するために必要な Sentinel の数、5000 はメインサーバーの障害を判断するためのタイムアウト時間です。メインサーバーの障害。10000 はフェイルオーバーのタイムアウト時間です。

次に、構成ファイルを使用して各 Sentinel ノードを起動します。

redis-sentinel ./sentinel.conf

3.2 クラスタモード(クラスタ)

Redis Cluster は、自動的にデータをシャード化し、フェイルオーバーを実行し、シャードを再配布できる Redis の分散ソリューションです。

  1. データの断片化: Redis Cluster はすべてのデータを 16384 個のスロットに分割し、各スロットはキーの一部に対応します。各 Redis ノードはスロットの一部、つまりデータの一部を担当します。キーの値を取得または設定する必要がある場合、Redis Cluster はキーのハッシュ値に基づいて対応するスロットを計算し、スロットを担当するノードを見つけます。この方法では、すべてのノードにデータを均等に分散し、ストレージと処理の効率を向上させることができます。
  2. 障害検出: Redis クラスターの各ノードは、他のノードと定期的に通信して、他のノードのステータスを確認します。この通信はゴシップ プロトコルを通じて実装されます。各ノードは他のノードに定期的に ping メッセージを送信します。指定された時間内に応答が受信されない場合、ノードは無効としてマークされます。
  3. フェイルオーバー: ノードに障害が発生したとマークされると、Redis Cluster は障害が発生したノードのデータを引き継ぐスレーブ ノードを選択します。このスレーブ ノードはマスター ノードに昇格し、障害が発生したノードのすべてのスロットを引き継ぎます。フェイルオーバー プロセス中、Redis Cluster はデータの整合性を確保するために一部の書き込み操作を拒否する場合があります。このプロセスは自動化されており、人間の介入は必要ありません。
  4. データの一貫性: Redis Cluster は非同期レプリケーションを使用しますが、フェイルオーバー中はデータの一貫性が可能な限り保証されます。マスター ノードに障害が発生した場合、少なくとも 1 つのスレーブ ノードがデータ同期を完了した場合にのみフェイルオーバーが発生します。これにより、マスター ノードに障害が発生した後でも、少なくとも 1 つのスレーブ ノードが最新のデータを保持することが保証されます。

Gossip プロトコルについては前述しましたが、ここで簡単に紹介します。

Redis Cluster では、ゴシップ プロトコルは主に、ノードの検出、障害の検出、構成情報の配布など、ノード間の情報交換に使用されます。

  1. ノードの検出: 新しく追加されたノードは、Gossip プロトコルを通じてクラスター内の他のノードによって迅速に検出されます。同時に、既存のノードも Gossip プロトコルを通じて新しく追加されたノードを検出できます。
  2. 障害検出: ノードは、定期的に ping メッセージを他のノードに送信し、pong 応答を待つことによって、他のノードのステータスを検出します。一定時間内にポン応答が受信されない場合、ノードは無効としてマークされます。
  3. 構成情報の配布: ノードの役割 (マスター ノードまたはスレーブ ノード)、データ スロットの割り当てなどの構成情報を、ゴシップ プロトコルを通じてノード間で配布できます。
    Gossipプロトコルは、「噂話」の伝播を基盤とした情報交換プロトコルであり、大規模分散システムにおいて効率的な情報交換を実現します。Redis Cluster では、ゴシップ プロトコルはノード管理とフェイルオーバーのための重要なメカニズムです。

Redis クラスターの構成プロセスは次のとおりです。

各 Redis ノードに構成ファイル (redis.conf など) を作成し、クラスターの有効化を Yes に設定し、その他のオプションも設定します。

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

次に、redis-cli ツールを使用してクラスターを作成します。

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

上記は Redis の高可用性を確保するための基本的な方法であり、具体的な構成と使用方法は実際のニーズに応じて調整できます。実際の使用では、ネットワークの分割、データの一貫性など、他の要素を考慮する必要がある場合があります。

4.参考

Redis のドキュメント

クイック スタート ガイド、コマンド リファレンス、テーマ ガイドなどを含む、Redis のすべての公式ドキュメント。インストール、構成、使用法など、Redis に関するすべての情報はここで見つけることができます。

おすすめ

転載: blog.csdn.net/lanyang123456/article/details/133563267