クラスターエディションまたは読み書き分離エディションの ApsaraDB for Redis インスタンスは、プロキシサーバーを使用してコマンドのルーティング、負荷分散、フェールオーバーを実行します。 このトピックでは、プロキシサーバーがコマンドをルーティングする方法、読み取り専用ノードをオフラインにする方法、特殊コマンドを処理する方法について説明します。
クラスターエディションの ApsaraDB for Redis インスタンスでのコマンドのルーティング
- 基本的なルーティング方法
- プロキシサーバーは、単一のキーを操作するコマンドを受信すると、キーが属するハッシュスロットを判断し、ハッシュスロットが存在するシャードサーバーにコマンドをルーティングします。
- プロキシサーバーは、異なるシャードサーバーに保存された複数のキーを操作するコマンドを受信すると、コマンドを複数のコマンドに分割し、対応するシャードサーバーにルーティングします。 複数のキーを操作するコマンドの詳細については、「Redis commands」をご参照ください。
- Pub/Sub コマンドのルーティング
プロキシサーバーは、Pub/Sub コマンド (PUBLISH や SUBSCRIBE など) を ApsaraDB for Redis クラスターの最初のシャードサーバーのマスターノードにルーティングします。
警告 最初のシャードサーバーのマスターノードに過度の負荷をかけないように、Pub/Sub コマンドを適切に使用します。 - idx パラメーターが指定されたコマンドのルーティング
IINFO、ISCAN、IMONITOR、IMEMORY など、Alibaba Cloud が開発したクラスターコマンドを実行する場合、idx パラメーターを設定してシャードサーバーを指定できます。 これにより、プロキシサーバーは指定されたシャードサーバーにコマンドをルーティングします。 Alibaba Cloud が開発したクラスターコマンドの詳細については、「Redis commands」をご参照ください。
読み書き分離エディションの ApsaraDB for Redis インスタンスでのコマンドのルーティング
- 基本的なルーティング方法
- プロキシサーバーは書き込みコマンドをマスターノードにルーティングします。
- プロキシサーバーは、重みに基づいて、読み取りコマンドをマスターノードと読み取り専用ノードにルーティングします。 デフォルトでは、すべてのノードに同じ重みが設定されています。
たとえば、インスタンスに 5 つの読み取り専用ノードがある場合、プロキシサーバーはすべての読み取りコマンドを 6 つのノード (マスターノードと読み取り専用ノード)
に均等にルーティングします。 各ノードは、コマンドの 6 分の 1 を受け取ります。
注 SLOWLOG と DBSIZE は読み取りコマンドです。
- マスターノードへのコマンドのルーティング
プロキシサーバーは、次のコマンドをマスターノードにルーティングします。
- トランザクションコマンド:MULTI と EXEC
- Lua スクリプトコマンド:EVAL と EVALSHA
- SCAN と INFO コマンド
- PUBLISH や SUBSCRIBE など、Pub/Sub コマンド
- 最初の読み取り専用ノードへのコマンドのルーティング
プロキシサーバーは、HSCAN、SSCAN、ZSCAN コマンドを最初の読み取り専用ノードにルーティングします。 読み取り専用ノードが実行されていない場合、プロキシサーバーはこれらのコマンドをマスターノードにルーティングします。
- 指定された読み取り専用ノードへのコマンドのルーティング
RIINFO、RIMONITOR、RIMEMORY は、読み書き分離エディションの ApsaraDB for Redis インスタンス専用のコマンドです。 プロキシサーバーはこれらのコマンドを受信すると、idx パラメーターと ro_slave_idx パラメーターに基づき、指定された読み取り専用ノードにルーティングします。 idx パラメーターは、シャードサーバーを指定するために、読み書き分離エディションの ApsaraDB for Redis クラスターで使用されます。 ro_slave_idx パラメーターは、読み取り専用ノードを指定するために、ApsaraDB for Redis クラスターと読み書き分離エディションの非クラスターインスタンスで使用されます。 読み書き分離エディション専用のコマンドの詳細については、「Redis commands」をご参照ください。
読み取り専用ノードのオフライン化
プロキシサーバーは、各読み取り専用ノードのステータスをリアルタイムで監視します。 プロキシサーバーは、読み取り専用ノードをオフラインにして、読み取り専用ノードへのコマンドのルーティングを一時的に停止できます。
- 読み取り専用ノードの異常を検出すると、プロキシサーバーは読み取り専用ノードの重みを減らします。 プロキシサーバーが読み取り専用ノードへの接続に数回連続して失敗すると、読み取り専用ノードをオフラインにします。 プロキシサーバーは、読み取り専用ノードが通常の機能を再開したことを検出した後、読み取り専用ノードを再びオンラインにします。
- 読み取り専用ノードが完全データ同期中であることを検出すると、プロキシサーバーは同期が完了するまで読み取り専用ノードをオフラインにします。
特殊コマンドの処理
通常、プロキシサーバーは、ユーザーからのリクエストを処理するためにバックエンドシャードサーバーへの持続的接続を作成します。 リクエストに特殊コマンドが含まれている場合、プロキシサーバーは対応するシャードサーバーへの追加の接続を作成して、後続のリクエストを処理します。 特殊コマンドは次のとおりです。
- ブロックコマンド:BRPOP、BRPOPLPUSH、BLPOP、BZPOPMAX、BZPOPMIN。
- トランザクションコマンド:MULTI、EXEC、WATCH。
- 監視コマンド:MONITOR、IMONITOR、RIMONITOR。
- サブコマンド:SUBSCRIBE、UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSCRIBE。
- 各シャードサーバーの最大接続数は 10,000 です。 接続数が上限を超える場合は、上記のコマンドを適切に使用してください。
- SCAN コマンドを実行して複数のデータベースをスキャンすると、多数の接続が作成されます。 接続数が上限に達していないことを確認してください。