クラスターエディションまたは読み書き分離エディションの ApsaraDB for Redis インスタンスは、プロキシサーバーを使用してコマンドのルーティング、負荷分散、フェールオーバーを実行します。 このトピックでは、プロキシサーバーがコマンドをルーティングする方法、読み取り専用ノードをオフラインにする方法、特殊コマンドを処理する方法について説明します。

クラスターエディションの ApsaraDB for Redis インスタンスでのコマンドのルーティング

  • 基本的なルーティング方法
    • プロキシサーバーは、単一のキーを操作するコマンドを受信すると、キーが属するハッシュスロットを判断し、ハッシュスロットが存在するシャードサーバーにコマンドをルーティングします。
    • プロキシサーバーは、異なるシャードサーバーに保存された複数のキーを操作するコマンドを受信すると、コマンドを複数のコマンドに分割し、対応するシャードサーバーにルーティングします。 複数のキーを操作するコマンドの詳細については、「Redis commands」をご参照ください。
  • Pub/Sub コマンドのルーティング

    プロキシサーバーは、Pub/Sub コマンド (PUBLISHSUBSCRIBE など) を ApsaraDB for Redis クラスターの最初のシャードサーバーのマスターノードにルーティングします。

    警告 最初のシャードサーバーのマスターノードに過度の負荷をかけないように、Pub/Sub コマンドを適切に使用します。
  • idx パラメーターが指定されたコマンドのルーティング

    IINFOISCANIMONITORIMEMORY など、Alibaba Cloud が開発したクラスターコマンドを実行する場合、idx パラメーターを設定してシャードサーバーを指定できます。 これにより、プロキシサーバーは指定されたシャードサーバーにコマンドをルーティングします。 Alibaba Cloud が開発したクラスターコマンドの詳細については、「Redis commands」をご参照ください。

読み書き分離エディションの ApsaraDB for Redis インスタンスでのコマンドのルーティング

  • 基本的なルーティング方法
    • プロキシサーバーは書き込みコマンドをマスターノードにルーティングします。
    • プロキシサーバーは、重みに基づいて、読み取りコマンドをマスターノードと読み取り専用ノードにルーティングします。 デフォルトでは、すべてのノードに同じ重みが設定されています。 たとえば、インスタンスに 5 つの読み取り専用ノードがある場合、プロキシサーバーはすべての読み取りコマンドを 6 つのノード (マスターノードと読み取り専用ノード) に均等にルーティングします。 各ノードは、コマンドの 6 分の 1 を受け取ります。
      SLOWLOGDBSIZE は読み取りコマンドです。
  • マスターノードへのコマンドのルーティング

    プロキシサーバーは、次のコマンドをマスターノードにルーティングします。

    • トランザクションコマンド:MULTIEXEC
    • Lua スクリプトコマンド:EVALEVALSHA
    • SCANINFO コマンド
    • PUBLISHSUBSCRIBE など、Pub/Sub コマンド
  • 最初の読み取り専用ノードへのコマンドのルーティング

    プロキシサーバーは、HSCANSSCANZSCAN コマンドを最初の読み取り専用ノードにルーティングします。 読み取り専用ノードが実行されていない場合、プロキシサーバーはこれらのコマンドをマスターノードにルーティングします。

  • 指定された読み取り専用ノードへのコマンドのルーティング

    RIINFORIMONITORRIMEMORY は、読み書き分離エディションの ApsaraDB for Redis インスタンス専用のコマンドです。 プロキシサーバーはこれらのコマンドを受信すると、idx パラメーターと ro_slave_idx パラメーターに基づき、指定された読み取り専用ノードにルーティングします。 idx パラメーターは、シャードサーバーを指定するために、読み書き分離エディションの ApsaraDB for Redis クラスターで使用されます。 ro_slave_idx パラメーターは、読み取り専用ノードを指定するために、ApsaraDB for Redis クラスターと読み書き分離エディションの非クラスターインスタンスで使用されます。 読み書き分離エディション専用のコマンドの詳細については、「Redis commands」をご参照ください。

読み取り専用ノードのオフライン化

プロキシサーバーは、各読み取り専用ノードのステータスをリアルタイムで監視します。 プロキシサーバーは、読み取り専用ノードをオフラインにして、読み取り専用ノードへのコマンドのルーティングを一時的に停止できます。

  • 読み取り専用ノードの異常を検出すると、プロキシサーバーは読み取り専用ノードの重みを減らします。 プロキシサーバーが読み取り専用ノードへの接続に数回連続して失敗すると、読み取り専用ノードをオフラインにします。 プロキシサーバーは、読み取り専用ノードが通常の機能を再開したことを検出した後、読み取り専用ノードを再びオンラインにします。
  • 読み取り専用ノードが完全データ同期中であることを検出すると、プロキシサーバーは同期が完了するまで読み取り専用ノードをオフラインにします。

特殊コマンドの処理

通常、プロキシサーバーは、ユーザーからのリクエストを処理するためにバックエンドシャードサーバーへの持続的接続を作成します。 リクエストに特殊コマンドが含まれている場合、プロキシサーバーは対応するシャードサーバーへの追加の接続を作成して、後続のリクエストを処理します。 特殊コマンドは次のとおりです。

  • ブロックコマンド:BRPOPBRPOPLPUSHBLPOPBZPOPMAXBZPOPMIN
  • トランザクションコマンド:MULTIEXECWATCH
  • 監視コマンド:MONITORIMONITORRIMONITOR
  • サブコマンド:SUBSCRIBEUNSUBSCRIBEPSUBSCRIBEPUNSUBSCRIBE
  • 各シャードサーバーの最大接続数は 10,000 です。 接続数が上限を超える場合は、上記のコマンドを適切に使用してください。
  • SCAN コマンドを実行して複数のデータベースをスキャンすると、多数の接続が作成されます。 接続数が上限に達していないことを確認してください。