1. ホーム
  2. データベース
  3. レディス

Redis 3つのクラスターモードの説明

2022-01-15 06:27:54

3つのクラスタリングモード

  • redisには3つのクラスタリングモードがあり、master-slaveが最も一般的です。
  • Sentinelモードは、マスター・スレーブ型のレプリケーション・クラスターでホストがダウンしたときに、マスターとスタンバイの切り替えの複雑さを補うために進化したモードです。Sentinelはその名の通り監視に使用され、主な役割はマスター・スレーブ・クラスタを監視し、マスターとスタンバイを自動的に切り替えてクラスタのフェイルオーバーを完了させることです。
  • redisが提供する公式のクラスターモードで、シャーディング技術により高可用性、読み書きの分離だけでなく、真の分散ストレージを実現します。

I. マスター・スレーブ レプリケーション

redis のマスター・スレーブ レプリケーション

1. リード・マスター・スレーブ・モード

2. redisレプリケーションの原理

redisのレプリケーションは、同期(SYNC)とコマンドの伝搬の2つの部分から構成されます

  • SYNCは、スレーブサーバーの状態をマスターサーバーと一致するように更新するために使用されます。方言で解釈すると、マスターサーバーのデータをサーバーから積極的に取得することです。データの一貫性が保たれる。実装としては、マスターサーバーがSYNCコマンドを受け取り、RDBスナップショットファイルを生成し、スレーブサーバーに送ります。
  • Command propagateは、マスターサーバーのデータが変更され、マスターとスレーブに矛盾が生じた場合に使用され、スレーブサーバーがマスターサーバーと同じ状態を保つことができるようにするものです。俗に言う、マスターサーバーがクライアントからデータを修正するコマンドを受け取り、データベースのデータが変更され、そのコマンドをキャッシュし、キャッシュされたコマンドをスレーブサーバーに送り、スレーブサーバーがキャッシュされたコマンドをロードしてマスター・スレーブのデータの一貫性を実現するという説明である。これをコマンドプロパゲーションと呼ぶ。
  • なぜ、同期とコマンドプロパゲーションの2つのレプリケーション操作が必要なのですか。同期だけだと、スレーブサーバがマスターサーバにSYNCコマンドを送信しても、マスターサーバはRDBスナップショットファイルを生成する際にクライアントからデータ状態を変更するコマンドを受信し、この部分はスレーブサーバに伝わらないので、マスタースレーブのデータに矛盾が生じることになります。このとき、コマンドプロパゲーションがあり、マスターサーバーはスレーブサーバーからSYNCコマンドを受け取り、同時にRDBスナップショットファイルを生成し、この間に受け取ったコマンドをキャッシュし、コマンドプロパゲーション操作でスレーブサーバーに送信する。マスターサーバーは、スレーブサーバーからSYNCコマンドを受信し、RDBスナップショットファイルを生成し、この間に受信したコマンドをキャッシュし、コマンドプロパゲーションを使ってスレーブサーバーに送信します。

3. Redis のマスター・スレーブ レプリケーションの原理

以上、redisレプリケーションの2つの操作について説明しましたが、redisマスタースレーブレプリケーションは形式上、同期とコマンド伝搬に基づいています。以下の2つの図は、redisレプリケーションの流れを示しています。

4.redisマスタースレーブレプリケーションのメリット・デメリット

長所

1. 読み書き分離により可用性が向上し、シングルマシン障害を解決できる 2. マスタースレーブレプリケーション中はマスターとスレーブがノンブロッキングとなり、そのまま利用できる。

デメリット

1. マスターダウン時には、手動でホストを切り替える必要があり、一部のデータはサーバーからの同期が間に合わず、データの不整合が発生する(手動操作が必要です)

2、スレーブダウンタイム、複数のスレーブの回復後、SYNCの同期の多数は、(あなたが手動で起動時間を回避することができます)倍増マスターIO圧が発生します。

3、オンラインスケーリングはより複雑です。

まとめますと。
redisマスタースレーブレプリケーションの主な利点は、可用性のデメリットを改善することです

II. センチネル セントリーモード

センチネル センチネル センチネル はじめに
Sentinel Sentinelは、基本的に特別なモードで動作するRedisインスタンスで、通常のRedisとは異なる初期化および動作をするだけで、本質的には別プロセスとなります。
SentinelはRedisの高可用性ソリューションです。1つ以上のSentinelインスタンスからなるSentinelシステムは、任意の数のマスターサーバと、それらのマスターサーバの下のすべてのスレーブサーバを監視でき、マスターサーバがオフラインになるとスレーブサーバを自動的に切り替えてマスターサーバにアップグレードさせることができます。

1. センチネルのシステム

次の図は、シンプルなSentinelシステムのアーキテクチャを示したものである。Sentinelシステムは、server1がRedisのマスターサーバー、server2/3/4がRedisのスレーブとなるマスタースレーブクラスターを監視しています。マスターとスレーブは上記のマスタースレーブレプリケーションを使用して、マスタースレーブ間の一貫性を実現する。そして、Sentinelシステムはマスター・スレーブ・クラスタ全体を監視する。

2. センチネルフェイルオーバー

Sentinelシステムは、Server1マスターサーバーがオフラインになったことを感知すると、server2/3/4のレプリケーションを終了します。

その間、Sentinelはserver2をマスターサーバーにアップグレードし、server3/4は新しいマスターサーバーからレプリケートします。その間、server1が再びオンラインになるのを待ちます。

また、Sentinelシステムは、マスターサービスをスレーブサーバにダウングレードしたり、スレーブサーバをマスターサーバにアップグレードしたりすることも積極的に行うことができます。

2.1. センチネル・セントリーモニタリングプロセス

Sentinel sentryモニタリングクラスタープロセス。

  • コマンド Sentinel Sentinelがコマンドを送信して、redisサーバーの稼働状況を返させる。Publish Subscription プライマリサーバの状態が変化したとき、Sentinel Sentinelはコマンドを送信してクラスタプロセスを監視する。
  • サブスクリプションモードを発行し、他のスレーブサーバに通知する。

2.2. センチネル セントリーフェイルオーバー

センチネルフェイルオーバー。

  • 1. のSentinelインスタンスは、1sごとにクラスタのようなPINGコマンドを送信する
  • 2. クラスタ内のいずれかのインスタンスが、down-after-millisecondsよりも長くSentinelインスタンスに返信した場合、PINGコマンドを送信したSentinelインスタンスは、主観的にオフラインにされます
  • 3. では、いつ客観的にオフラインになるのでしょうか?それは、Sentinelシステム内の他のインスタンスも、クラスタ内のインスタンス・スーパーバイザーがオフラインになったことを確認する必要があります。
  • マスターが主観的にオフラインとマークされた場合、マスターを監視するSentinelシステムのSentinelプロセスは、マスターがスーパーバイザオフライン状態であることを1秒に1回の割合で確認する必要がある
  • 4. 十分な数のSentinelインスタンス(構成による)がマスターがスーパーバイザオフラインになったことを確認すると、マスターはオブジェクト的にオフラインとマークされます。

3. センチネルSentinelの長所と短所

長所

1. Sentinelモードはマスタースレーブレプリケーションを基本としているので、マスタースレーブレプリケーションの利点がSentinelでも利用できる 2. Sentinelはマスター・スレーブ切り替えとフェイルオーバーが可能なため、クラスタの可用性が高い

デメリット

1. Redisはオンラインスケーリングに対応しにくく、オンラインスケーリングはより複雑である。

まとめると
sentinel sentryは主にredis master-slave clusterの監視とredis master-slave clusterの可用性の向上に使用されます。

iii. クラスターモード

Redisクラスタ

1. Reids クラスタ

Redis Clusterは、redisバージョン3.0から公式に提供されているサーバシャーディング技術です。
Sentinelは基本的に高可用性を実現していますが、すべてのマシンに同じコンテンツを保存するのはメモリの無駄遣いなので、Redis Clusterでは分散ストレージを実装しています。マシンノードごとに異なるコンテンツが保存される。

2. Redisクラスタのデータシャーディングの原則

redisクラスタには16384個のハッシュスロットがあり、各KeyはCRC16チェックサムによって16384をモジュロし、どのスロットに配置するかを決定しています。
redisの鍵にアクセスする場合、redisはCRC16アルゴリズムに基づいた結果を取得し、その結果を16384で余り、この値を使って対応するノードに行き、データを取得することになります。
つまり、アクセスキーはスロットの計算が終わったら、スロット情報を保存することで設定からノード情報を取得し、対応するノードにデータを取りに行くのです。

3. Redisクラスタレプリケーションの原理

redis-clusterクラスタでは、1つのマスターノードが1つ以上のスレーブノードに対応するマスタースレーブレプリケーションモデルを導入しており、マスターノードがダウンすると、スレーブノードが有効になるようになっています。他のマスターノードがマスターノードAにpingを打つとき、半分以上のマスターノードがAとの通信をタイムアウトした場合、マスターノードAはダウンしたとみなされます。マスターノードAとそのスレーブノードA1の両方がダウンした場合、そのクラスタはサービスを提供できなくなる

4. redis クラスタの長所と短所

長所

1. 分散型ストレージを実装し、メモリを節約

Redisの3つのクラスタリングモードについての説明は以上となります。Redisの3つのクラスタリングモードについては、Scripting Houseの過去記事を検索していただくか、引き続き以下の記事をご覧ください。