redisの3つのクラスタモード

6548 ワード

https://blog.csdn.net/QEcode/article/details/96177521edisには3つのクラスタ方式がある:主従複製、哨兵モード、クラスタ。

一、主従レプリケーション主従レプリケーションとは、あるサーバに別のサーバのデータをレプリケーションさせ、双方のデータが一致して保存されるようにすることであり、レプリケーションされたサーバは主サーバであり、レプリケーションされたサーバは従サーバである.プライマリ・サーバのデータが変更されると、プライマリ・サーバはスレーブ・サーバに通知し、データの一貫性を保存します.
   Redis ,  slaveof         。

(一)旧版の主従レプリケーションは旧版で実現され,Redisのレプリケーション機能は同期とコマンド伝播の2つのステップに分けられる.
                              。

                      ,            ,        。

             slaveof   :

  1.            sync  ,       bgsave  ,       RDB  ,                    。

  2.          RDB  ,       。      ,              ,          ,              。

  3.           ,             ,              ,             ,          。

欠陥:
                   :              ,                ,                    。    ,     ,                 ,       。             ,    。

(二)新版の主従レプリケーションは,主従レプリケーション効率の問題を解決するために実装され,Redisは2.8からsyncの代わりにpsyncコマンドを用いる.
  psync       :           。

               ,       。

                  。

          :

       ,          ,      ,                            ,             ,       ,           。

                          。

       :                      。             N       ,             N,              N       ,             N。                                   。

            ,                ,                   ,                。

                            。

                       ,       ,      ,      ,              ,                  。

                ,             ,             ,                    。        ,                          ,                ;                          ,                。

二、Redis哨兵モード(Sentinel)(一)哨兵モード哨兵モードはRedisの高可用性の解決策である:1つ以上のsentinelを通じてsentinelシステムを構成し、任意の複数のプライマリサーバを監視し、これらのプライマリサーバの下のすべてのセカンダリサーバを監視し、監視されたプライマリサーバがオフラインになった後、プライマリサーバの下のサブサーバを自動的に新しいプライマリサーバにアップグレードする.次に、新しいプライマリ・サーバによってコマンドが実行されます.
  Sentinel         :

    (Monitoring): Sentinel                        。

    (Notification):         Redis         , Sentinel      API                 。

        (Automatic failover):               , Sentinel              ,                            ,                          ;                 ,                   ,                     。

(二)モニタリング方式は10 sおきに、各哨兵ノードはメインノードとノードからinfoコマンドを送信して最新のトポロジー構造を取得する.
    2s,                                             ,    Sentinel         ,      。  :Sentinel             ,              ,     Sentinel   ,        ;    Sentinel               Sentienel     Sentinel   ,      Sentinel,             。

    1s,           、   、          ping         (      ),             。

(三)メインサーバがラインオフしているかどうかを判断するには、主観ラインオフと客観ラインオフの2つのステップがある.
      :  Sentinel         。

      :  Sentinel         。

      :

       (      ,    )       Sentinel        (  +PONG,-LOADING,-MASTERDOWN            ,      ),  Sentinel           。

    :    Sentinel         ,      Sentinel           ,     Sentinel           ,        。

      (                ):

   Sentinel               ,               Sentinel    ,                    (              )。 Sentinel            ,             ,              。

    :  Sentinel           ,      Sentinel           ,   Sentinel           ,     Sentinel            。      Sentinel                  ,                     。

(四)リーダーシップSentinel主サーバが主観的にオフラインと判断された場合、この主サーバを監視するすべてのSentinelが協議し、リーダーシップSentinelを選出し、オフライン主サーバに対してフェイルオーバ操作を実行する.
            :              Sentinel     Sentinel    ,      Sentinel。   Sentinel        Sentinel       ,         Sentinel,            。

(5)フェイルオーバリーダーSentinelが選択された後、リーダーSentinelはオフラインのプライマリ・サーバに対してフェイルオーバ操作を実行し、この操作には3つのステップが含まれる.
  1)               ,        ,          。

  2)                           。

  3)                       ,       ,               。

三つ目は、RedisクラスタRedisクラスタは、スライス方式でデータを保存し、クラスタ内のすべてのデータは16384スロット(slot)に分けられ、データベース内の各データは16384スロットの1つに属し、クラスタ内の各ノードは0〜16384スロットを処理することができる.各データがどのスロットに属するかはhashアルゴリズムによって得られ、16384のスロットにノードが処理されている場合にのみクラスタがオンライン状態になる.スロットにノードが処理されていない限り,クラスタはオフライン状態にある.
(一)スロット割り当てNodeごとに1つのSlotセグメントが平均的に割り当てられ、0-16384に対応し、Slotは繰り返しても欠けてもいけない.そうしないと、オブジェクトが繰り返して格納されるか、格納されない.また,すべてのノードは,他のノード自身が担当するSlotセグメントに通知する.
(二)コマンド実行データベース内の16384個のスロットを割り当てた後、クラスタはオンライン状態にある.クライアントがノードに命令を送信すると,命令を受信したノードは,命令で動作するデータが自分の担当するスロットにあるか否かを判断する.該当しない場合、ノードはMOVEDエラーを返し、クライアントにコマンドを正しいノードに向けるように指示します.クライアントは、MOVEDエラーを受信すると、正しいノードにコマンドを再送信します.
(3)再スライスノードがラインオフまたは加入すると,Slot単位でデータの移行を行う.例えば、Node 1がオフラインになった場合、0-5640のこれらのSlotは平均的にNode 2とNode 3に割り当てられます.Node 2とNode 3自体がメンテナンスしているSlotは、自身に再割り当てされないため、移行中に5641-16384 Slotセグメントの使用には影響しません.
ノードラインオフの判断は,クラスタの半数以上のノードがそのノードがラインオフしたと考えている.
(4)マスタスレーブノードクラスタでは、各ノードが1つのマスタスレーブノード(1つのマスタサーバと複数のスレーブサーバからなる)であることができ、クラスタの高可用性を保障する.
                 ,           ,         Slot     ,              ,       。      :              ,              ,           ,      。

    :      ,      db0   ,      ,      16    (db0 ~ db15)。

四,三種類のRedis構造の長所と短所(一)主従複製の長所と短所:
1)読み書きが分離され,主ノードによって書き換えが複製され,ノードから読み出され,高同時性に適している.
2)ノードからの同時読み取り能力を高めることができる.
欠点:
1)マスターノードの書き込み能力は限られており,マスタースレーブレプリケーション構造の書き込み同時性はマスターノードの書き込み性能に依存する.
2)オートフォールトトレランスとリカバリ機能がない場合、ホストスレーブのダウンタイムによって一部の読み書き要求が失敗する.
(二)歩哨モードの利点:
1)歩哨モードは主従モードに基づいており,すべての主従の利点,歩哨モードがある.
2)主従は自動的に切り替えることができ、システムが丈夫で、可用性が高い.
欠点:
1)書き込み性能が不足している場合も同様である.
(三)クラスタの利点:
1)歩哨モードと同様に高可用性,読み書き分離の利点がある.
2)各ノードは異なるデータを格納しており,各ノードは読み書きが可能である.他の構造では読み取り性能が高くないという問題を解決した.
欠点:
1)各ノードは1つのサーバ群(1つのプライマリノードと複数のスレーブノード)で構成されており、無駄になる可能性があります.————————————————————本文はCSDNブロガー「QEcode」のオリジナル文章で、CC 4.0 BY-SAの著作権契約に従い、原文の出典リンクと本声明を転載してください.テキストリンク:https://blog.csdn.net/QEcode/article/details/96177521
分散アーキテクチャを使用して読み書き速度を向上
Redis分散アーキテクチャには、3つの重要な手段があります.
主従シンクロ哨兵モードRedis Clusterクラスタ
プライマリ・スレーブ同期機能を使用すると、プライマリ・ライブラリに書き込みを実行し、読み取り機能をサービスに移行できるため、単位時間でより多くのリクエストを処理し、Redis全体の稼働速度を向上させることができます.
歩哨モードは主従機能のアップグレードであるが,主節が潰れた後,人工的な介入を必要とせずにRedisの正常な使用を自動的に回復する.
Redis ClusterはRedis 3.0によって正式に発売され、Redisクラスタはデータベースを複数のノードに分散して格納することによって各ノードの負荷圧力をバランスさせる.
Redis Clusterは仮想ハッシュスロットパーティションを採用し、すべてのキーはハッシュ関数に基づいて0~16383整数スロットにマッピングされ、計算式:slot=CRC 16(key)&16383であり、各ノードはスロットの一部とスロットがマッピングしたキー値データの維持を担当する.これにより、Redisは1台のサーバから複数のサーバに読み書き圧力を分散させることができるため、パフォーマンスが大幅に向上します.