Premium Azure Cache for Redis インスタンス用の Redis クラスタリングを構成する

Azure Cache for Redis では、 Redis での実装と同じように Redis クラスターが提供されます。 Redis クラスターには、次の利点があります。

  • データセットを複数のノードに自動的に分割する機能。
  • ノードのサブセットで障害が発生したとき、またはクラスターの他の部分と通信できないときに、操作を続行する機能。
  • より多くのスループット: シャードの数を増やすと、スループットは比例して増加します。
  • より多くのメモリ サイズ: シャードの数を増やすと比例的に増加します。

クラスタリングでは、クラスター化されたキャッシュで使用できる接続の数は増加しません。 Premium キャッシュのサイズ、スループット、帯域幅の詳細については、「適切なレベルの選択」を参照してください。

Azure では、Redis クラスターは、各シャードがレプリケーションと共にプライマリ/レプリカ ペアを持つプライマリ/レプリカ モデルとして提供されます。ここで、レプリケーションは Azure Cache for Redis サービスによって管理されます。

クラスタリングを設定する

クラスタリングは、キャッシュの作成中に左側の新しい Azure Cache for Redis で有効にされます。

  1. Premium キャッシュを作成するには、Azure portal にサインインし、 [リソースの作成] を選択します。 キャッシュの作成は、Azure portal だけでなく、Resource Manager テンプレート、PowerShell、または Azure CLI を使用して行うこともできます。 Azure Cache for Redis の作成について詳しくは、キャッシュの作成に関するページを参照してください。

    リソースの作成。

  2. [新規] ページで、 [データベース] を選択し、 [Azure Cache for Redis] を選択します。

    [Azure Cache for Redis] を選択します。

  3. [新規 Redis Cache] ページで、新しい Premium キャッシュの設定を構成します。

    設定 推奨値 説明
    DNS 名 グローバルに一意の名前を入力します。 キャッシュの名前は 1 文字から 63 文字の文字列である必要があります。 文字列に含めることができるのは、数字、文字、またはハイフンのみです。 名前の先頭と末尾には数字または文字を使用する必要があり、連続するハイフンを含めることはできません。 キャッシュ インスタンスの "ホスト名" は、<DNS 名>.redis.cache.windows.net になります。
    サブスクリプション ドロップダウンでご自身のサブスクリプションを選択します。 この新しい Azure Cache for Redis インスタンスが作成されるサブスクリプション。
    リソース グループ ドロップダウンでリソース グループを選択するか、 [新規作成] を選択して新しいリソース グループ名を入力します。 その中にキャッシュやその他のリソースを作成するリソース グループの名前。 すべてのアプリ リソースを 1 つのリソース グループに配置することで、それらをまとめて簡単に管理または削除できます。
    場所 ドロップダウンで場所を選択します。 キャッシュを使用する他のサービスの近くのリージョンを選択します。
    キャッシュの種類 ドロップダウンで Premium キャッシュを選択し、Premium 機能を構成します。 詳細については、「Azure Cache for Redis の価格」を参照してください。 価格レベルによって、キャッシュに使用できるのサイズ、パフォーマンス、および機能が決まります。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。
  4. [ネットワーク] タブを選択するか、ページの下部にある [ネットワーク] ボタンを選択します。

  5. [ネットワーク] タブで、接続方法を選択します。 Premium キャッシュ インスタンスの場合、パブリック IP アドレスまたはサービス エンドポイント経由で公的に接続することも、プライベート エンドポイントを使用してプライベートに接続することもできます。

  6. [次へ: 詳細] タブを選択するか、ページの下部にある [次へ: 詳細] ボタンを選択します。

  7. Premium キャッシュ インスタンスの [詳細] タブで、非 TLS ポート、クラスタリング、データ永続化の設定を構成します。 クラスタリングを有効にするには、 [有効] を選択します。

    クラスタリングの切り替え。

    クラスター内に最大 10 個のシャードを作成できます。 [有効] を選択した後に、スライダーを操作するか、 [シャード数] に 1 から 10 の値を入力し、 [OK] を選択します。

    各シャードは Azure によって管理されるプライマリ/レプリカ キャッシュ ペアであり、キャッシュの合計サイズはシャードの数に価格レベルで選択したキャッシュ サイズを掛けることによって計算されます。

    クラスタリングの切り替えの選択。

    キャッシュを作成したら、クラスター化されていないキャッシュと同じように接続して使用します。 Redis は、キャッシュのシャード全体にデータを分散させます。 診断が有効になっている場合は、シャードごとにメトリックが個別に取得され、左側の Azure Cache for Redis に表示できます。

  8. ページの下部にある [次へ: タグ] タブを選択するか、ページの下部にある [次へ: タグ] ボタンを選択します。

  9. 必要に応じて、 [タグ] タブで、リソースを分類する場合は名前と値を入力します。

  10. [Review + create](レビュー + 作成) を選択します。 [確認および作成] タブが表示され、Azure によって構成が検証されます。

  11. 緑色の検証に成功のメッセージが表示された後、 [作成] を選択します。

キャッシュが作成されるまで、しばらく時間がかかります。 Azure Cache for Redis の [概要] ページで進行状況を監視できます。 [状態] に "実行中" と表示されている場合は、キャッシュを使用する準備ができています。

Note

クラスタリングが構成されているときは、クライアント アプリケーションに対していくつか小さな変更が必要です。 詳細については、「 クラスタリングを使用するためにクライアント アプリケーションを変更する必要がありますか

StackExchange.Redis クライアントを使用したクラスタリングの操作でのサンプル コードについては、Hello World サンプルの clustering.cs 部分を参照してください。

実行中の Premium キャッシュのクラスター サイズを変更する

前に作成し、クラスタリングが有効になっている状態で既に実行されている Premium キャッシュのクラスター サイズを変更するには、[リソース] メニューから [クラスター サイズ] を選びます。

[クラスター サイズ] が選択されたリソース マネージャーのスクリーンショット。

クラスター サイズを変更するには、スライダーを使用するか、 [シャード数] ボックスに 1 から 10 の範囲の数値を入力してください。 その後、 [OK] を選択して保存します。

クラスター サイズを増やすと、スループットとキャッシュの最大サイズが増えます。 クラスター サイズを増やして、クライアントが利用できる最大接続数が増えることはありません。

Note

クラスターのスケーリングでは、MIGRATE コマンドが実行されます。このコマンドはコストを要するコマンドであるため、影響を最小限にするために、この操作をオフ ピーク時に実行することを検討してください。 移行プロセス中には、サーバーの負荷が急増します。 クラスターのスケーリングは時間を要する処理であり、必要な時間は、キーの数とこれらのキーに関連付けられている値のサイズによって異なります。

クラスタリングの FAQ

次の一覧は、Azure Redis Cache のクラスタリングに関するよく寄せられる質問への回答です。

クラスタリングを使用するためにクライアント アプリケーションを変更する必要がありますか

クラスターにはキーはどのように配布されるのですか

Redis の キー配布モデル に関するドキュメントによると、キー スペースは 16,384 スロットに分割されます。 各キーはハッシュされ、クラスターのノード全体に配布される、これらのスロットのいずれかに割り当てられます。 ハッシュ タグを使用して同じシャードに複数のキーが配置されていることを確認するために、キーのどの部分をハッシュするかを構成することができます。

  • ハッシュ タグのあるキー - キーの任意の部分を {} で囲むと、キーのその部分のみが、キーのハッシュ スロットを決定するためにハッシュされます。 たとえば、{key}1{key}2{key}3 という 3 つのキーは、名前の key 部分のみがハッシュされるため、同じシャードに配置されます。 キーのハッシュ タグ仕様に関する完全なリストについては、「 キーのハッシュ タグ」を参照してください。
  • ハッシュ タグのないキー - キー名全体がハッシュに使用されるので、キャッシュのシャードにわたって統計的に均等に配布されます。

最高のパフォーマンスとスループットを得るために、キーを均等に配布することをお勧めします。 ハッシュ タグのあるキーを使用する場合、キーが均等に配布されていることを確認するのはアプリケーションの責任です。

詳細については、「Keys distribution model (キー配布モデル)」、「Redis Cluster data sharding (Redis クラスターのデータ シャーディング)」、および「Keys hash tags (キーのハッシュ タグ)」を参照してください。

StackExchange.Redis クライアントを使用した同じシャードでのクラスタリングおよびキーの検索の操作に関するサンプル コードについては、Hello World サンプルの clustering.cs 部分を参照してください。

作成できる最大キャッシュ サイズはどれくらいですか

設定できる最大キャッシュ サイズは 1.2 TB です。 この結果は、10 個のシャードのクラスター化された P5 キャッシュになります。 詳細については、Azure Cache for Redis の価格に関するページを参照してください。

すべての Redis クライアントがクラスタリングをサポートしますか

多くのクライアント ライブラリが Redis クラスタリングをサポートしていますが、すべてではありません。 使用しているライブラリのドキュメントをチェックして、クラスタリングをサポートするライブラリとバージョンを使用していることを確認してください。 StackExchange.Redis は、その新しいバージョンでクラスタリングをサポートする 1 つのライブラリです。 他のクライアントの詳細については、「Redis cluster tutorial (Redis クラスター チュートリアル)」の「Playing with the cluster (クラスターの使用)」を参照してください。

Redis クラスタリング プロトコルでは、各クライアントがクラスタリング モードで各シャードに直接接続する必要があり、'MOVED' や 'CROSSSLOTS' などの新しいエラー応答も定義されます。 クロススロット マルチキー要求を行っている場合に、クラスタリングをサポートしないクライアント ライブラリをクラスター モードのキャッシュで使用しようとすると、多数の MOVED リダイレクト例外が発生するか、または単にアプリケーションが中断される場合があります。

Note

StackExchange.Redis をクライアントとして使用する場合は、クラスタリングが正常に動作するように、必ず StackExchange.Redis 1.0.481 以降の最新バージョンを使用してください。 move 例外に関する問題の詳細については、move 例外に関する記事を参照してください。

クラスタリングが有効になっているとき、キャッシュに接続するにはどうすればよいですか

クラスタリングが有効になっていないキャッシュに接続するときに使用するものと同じエンドポイントポートキーを使用して、キャッシュに接続できます。 Redis がバックエンドのクラスタリングを管理するので、クライアントから管理する必要はありません。

キャッシュの個々のシャードに直接接続できますか

クラスタリング プロトコルでは、クライアントが正しいシャード接続を行う必要があるため、クライアントは共有接続を行う必要があります。 つまり、各シャードは、キャッシュ インスタンスと総称される、プライマリ/レプリカ キャッシュ ペアで構成されています。 GitHub で Redis リポジトリの 不安定な ブランチにある redis-cli ユーティリティを使用して、これらのキャッシュ インスタンスに接続できます。 このバージョンは、 -c スイッチ付きで起動した場合、基本的なサポートを実装しています。 詳細については、https://redis.io の「Redis cluster tutorial」 (Redis クラスター チュートリアル) にある「Playing with the cluster」 (クラスターの使用) をご覧ください。

TLS 以外の場合は、次のコマンドを使用します。

Redis-cli.exe –h <<cachename>> -p 13000 (to connect to instance 0)
Redis-cli.exe –h <<cachename>> -p 13001 (to connect to instance 1)
Redis-cli.exe –h <<cachename>> -p 13002 (to connect to instance 2)
...
Redis-cli.exe –h <<cachename>> -p 1300N (to connect to instance N)

TLS の場合は、1300N1500N に置き換えます。

以前に作成したキャッシュのクラスタリングを構成できますか。

はい。 まず、キャッシュをスケールアップして確実に Premium にします。 次に、クラスター構成オプション (クラスターを有効にするオプションを含む) を表示できます。 キャッシュが作成された後、または初めてクラスタリングを有効にした後、クラスター サイズを変更します。

重要

クラスタリングを有効すると元には戻せません。 また、クラスタリングが有効であり、かつシャードが 1 つだけのキャッシュは、クラスタリングなしの同じサイズのキャッシュとは動作が異なります

Basic または Standard キャッシュのクラスタリングを構成できますか。

クラスタリングは、Premium キャッシュでのみ使用できます。

Redis ASP.NET セッション状態および出力キャッシュ プロバイダーでクラスタリングを使用できますか

  • Redis 出力キャッシュ プロバイダー - 変更する必要はありません。
  • Redis セッション状態プロバイダー - クラスタリングを使用するには、RedisSessionStateProvider 2.0.1 以降を使用する必要があります。そうしないと、例外がスローされます。これは破壊的変更です。 詳細については、「v2.0.0 の破壊的変更の詳細」を参照してください。

StackExchange.Redis とクラスタリングを使用すると、MOVE 例外が発生します。どうすればよいですか。

クラスタリングを使用しているときに StackExchange.Redis を使用すると MOVE 例外が発生する場合は、StackExchange.Redis 1.1.603 以降を使用していることを確認してください。 StackExchange.Redis を使用するための .NET アプリケーションの構成手順については、「キャッシュ クライアントの構成」を参照してください。

次のステップ

Azure Cache for Redis の機能について