読み取り負荷の高いワークロード向けに、Tair (Redis OSS-compatible) では、読み書き分離を動的に有効または無効にできます。この機能は、ホットデータへの集中アクセスや高同時実行数の読み取りに対して、高可用性かつ高性能なソリューションを提供します。読み書き分離インスタンスでは、Alibaba Cloud Tair チームが開発したプロキシコンポーネントが、読み取りリクエストと書き込みリクエストを自動的に識別してルーティングし、フェールオーバーを処理します。これにより、リクエストのルーティングやフェールオーバーを管理するためにアプリケーションコードを変更する必要がなく、統合が簡素化されます。
標準アーキテクチャにおける読み書き分離
標準アーキテクチャを使用する読み書き分離インスタンスは、マスターノード、1 つ以上の読み取り専用レプリカ、プロキシサーバー、および高可用性システムで構成されます。以下の図にアーキテクチャを示します。
図 1. クラウドネイティブ
図 2. クラシック (提供終了)
コンポーネント | クラウドネイティブ | クラシック (提供終了) |
マスターノード | 書き込みリクエストを処理し、読み取り専用レプリカと読み取りワークロードを共有します。 | |
読み取り専用レプリカ | 読み取りリクエストを処理します。読み取り専用レプリカには次の特徴があります:
| 読み取りリクエストを処理します。読み取り専用レプリカには次の特徴があります:
|
レプリカノード | どの読み取り専用レプリカもレプリカノードとして機能できます。マスターノードに障害が発生した場合、高可用性システムは最も完全なデータを持つ読み取り専用レプリカを新しいマスターノードに昇格させます。スイッチオーバー後、新しい読み取り専用レプリカがすぐにインスタンスに追加されます。 専用のレプリカノードが不要なため、クラウドネイティブの読み書き分離インスタンスは、より低コストで同等のパフォーマンスを提供します。 | データバックアップ用のコールドスタンバイノードです。トラフィックは処理しません。マスターノードに障害が発生した場合、リクエストはこのノードにフェールオーバーされます。 |
プロキシサーバー | クライアントが接続すると、プロキシサーバーはリクエストの種類を自動的に識別し、重みに基づいて異なるデータノードにトラフィックを分散します。すべてのノードの重みは等しく、重みはカスタマイズできません。たとえば、書き込みリクエストはマスターノードに転送され、読み取りリクエストはマスターノードと読み取り専用レプリカに転送されます。 説明
| |
高可用性システム |
| |
特徴
動的で使いやすい
標準アーキテクチャを使用するインスタンスで読み書き分離を有効にできます。プロキシサーバーは、クライアントからの読み取りおよび書き込みリクエストをインテリジェントに識別して転送します。この機能を有効にすると、任意の Redis 互換クライアントを使用して読み書き分離インスタンスに接続し、アプリケーションを変更することなく読み取りパフォーマンスを向上させることができます。読み書き分離が有効なインスタンスは Redis プロトコルコマンドと互換性がありますが、プロキシのため一部のコマンドに制限が適用されます。詳細については、「読み書き分離インスタンスのコマンド制限」をご参照ください。
高可用性
Alibaba Cloud 独自の高可用性システムが、すべてのデータノードの正常性を自動的に監視し、インスタンスの可用性を確保します。マスターノードが利用できなくなった場合、システムは自動的に新しいマスターノードを選択し、レプリケーショントポロジを再構築します。読み取り専用レプリカに障害が発生した場合、高可用性システムは障害を自動的に検出し、新しいノードを起動してデータ同期を完了させ、障害が発生したノードをオフラインにします。
プロキシサーバーは、各読み取り専用レプリカのサービスステータスをリアルタイムで監視します。読み取り専用レプリカが利用できなくなった場合、プロキシは自動的にそのサービス重みを減らします。読み取り専用レプリカが指定された回数以上連続して失敗した場合、プロキシは利用できないノードへのサービスを一時停止します。ノードの監視を続け、ノードが回復した後にサービスを再開します。
高性能
読み取り専用レプリカをスケールアウトして、読み書き分離インスタンスの全体的なパフォーマンスを線形に向上させることができます。Redis レプリケーションプロセスに対するソースコードレベルの最適化により、線形レプリケーション中のシステムの安定性が最大化され、各読み取り専用レプリカの物理リソースが最大限に活用されます。
利用シーン
この機能は、1 秒あたりの読み取りクエリ数 (QPS) が高いシナリオに最適です。ご利用のアプリケーションが読み取り負荷の高い場合、標準アーキテクチャを使用するインスタンスでは QPS 要件を満たせないことがあります。この場合、複数の読み取り専用レプリカをデプロイして、単一ノードのパフォーマンスボトルネックを克服できます。読み書き分離を有効にすると、インスタンスの読み取り QPS は最大で 9 倍に増加する可能性があります。
Redis の非同期レプリケーションメカニズムのため、書き込み量が多い期間にはデータレプリケーションの遅延が発生する可能性があります。このアーキテクチャを使用する場合、ご利用のアプリケーションはある程度のデータの陳腐化を許容できる必要があります。
クラスタアーキテクチャにおける読み書き分離
クラスタアーキテクチャでは、クラウドネイティブインスタンスがプロキシモードで実行されている場合にのみ、読み書き分離を有効にできます。以下の図にアーキテクチャの例を示します。
コンポーネントの説明
コンポーネント | 説明 |
プロキシサーバー | クライアントがプロキシサーバーに接続した後、プロキシはクライアントリクエストを自動的に識別し、適切なデータシャードとその対応する読み取り/書き込みノードに転送します。たとえば、書き込みリクエストはマスターノードに転送され、読み取りリクエストはマスターノードと読み取り専用レプリカの間で負荷分散されます。 |
データシャード | 各データシャードは、1 つのマスターノードと最大 4 つの読み取り専用レプリカで構成されます。
|
高可用性サービス |
|
インスタンスが単一アベイラビリティゾーンにデプロイされている場合、すべてのノードはプライマリゾーンに配置され、インスタンスはプライマリゾーンのエンドポイントのみを提供します。
インスタンスがデュアルゾーン構成でデプロイされている場合、プライマリゾーンとセカンダリゾーンに個別のエンドポイントが提供されます。両方のエンドポイントが読み取りおよび書き込み操作をサポートします。プライマリゾーンからの読み取りリクエストは、そのゾーン内のマスターノードまたは読み取り専用レプリカにルーティングされます。セカンダリゾーンからの読み取りリクエストは、近接アクセスを確保するためにそのゾーン内の読み取り専用レプリカにのみルーティングされます。すべての書き込みリクエストは、プライマリゾーンのマスターノードにルーティングされます。セカンダリゾーンのすべての読み取り専用レプリカが利用できなくなった場合、システムは業務継続性を確保するために、そのゾーンからの読み取りリクエストをマスターノードにルーティングします。
推奨事項と注意事項
読み取り専用レプリカに障害が発生した場合、リクエストは他のノードに転送されます。すべての読み取り専用レプリカが利用できなくなった場合、すべての読み取りリクエストはマスターノードに転送されます。読み取り専用レプリカに障害が発生すると、マスターノードの負荷が増加し、応答時間が長くなる可能性があります。したがって、読み取り負荷の高いワークロードには複数の読み取り専用レプリカを使用することを推奨します。
読み取り専用レプリカに障害が発生した場合、高可用性システムは障害が発生したノードへのサービスを一時停止し、新しい読み取り専用レプリカを起動します。このプロセスには、リソース割り当て、インスタンス作成、データ同期、およびサービスローディングが含まれます。所要時間はワークロードとデータ量によって異なります。Tair (Redis OSS-compatible) は、読み取り専用レプリカの目標復旧時間を保証しません。
デュアルゾーンの読み書き分離デプロイメントでは、プライマリゾーンに少なくとも 1 つのマスターノードと 1 つの読み取り専用レプリカが必要です。プライマリゾーンに 1 つのマスターノード、セカンダリゾーンに 1 つのレプリカノードを持つデュアルゾーン標準アーキテクチャインスタンスで読み書き分離を有効にする前に、プライマリゾーンにレプリカノードを追加して、2 つのノードが含まれるようにする必要があります。その後、読み書き分離を有効にできます。
マスターノードの高可用性フェールオーバーなどの一部のシナリオでは、読み取り専用レプリカで完全なデータ同期がトリガーされます。完全な同期中、読み取り専用レプリカは利用できず、
-LOADING Redis is loading the dataset in memory\r\nメッセージを返します。一部の読み取りコマンドには、読み書き分離アーキテクチャで特別な転送ルールがあります。たとえば、
SCANコマンドは実行のためにマスターノードに転送されますが、プロキシはHSCAN、SSCAN、およびZSCANコマンドをスロットのモジュロ計算に基づいてマスターノードと読み取り専用レプリカに均等に分散します。転送ルールの完全なセットについては、「プロキシのルーティングルール」をご参照ください。
前提条件
開始する前に、以下を確認してください:
インスタンスがクラウドネイティブモードでデプロイされている
インスタンスが Redis Community Edition または Tair (Enterprise Edition) DRAM 最適化または永続メモリインスタンスである
インスタンスに 1 GB 以上のメモリがある
インスタンスが高可用性インスタンスである
操作手順
インスタンスをまだ作成していない場合は、インスタンスを作成する際に読み書き分離を有効にできます。
既存のクラウドネイティブインスタンスがある場合は、直接読み書き分離を有効にすることができます。
よくある質問
Q:標準アーキテクチャインスタンスで読み書き分離を有効にすると、全体の帯域幅は増加しますか?
A:はい。読み書き分離を有効にすると、インスタンスの理論上の合計帯域幅は、インスタンス仕様の帯域幅 × ノードの総数 (例:96 MB/s × 3 ノード = 288 MB/s) になります。追加されたプロキシノードは、ほとんどの読み取りリクエストを読み取り専用レプリカに転送するため、マスターノードの帯域幅への負荷が軽減されます。ただし、実際の帯域幅は、ビジネスリクエストやクライアントなどの要因に影響されます。実際の帯域幅は、ストレステストの結果に従います。
Q:標準アーキテクチャインスタンスで読み書き分離を有効にした後、そのアーキテクチャをクラスタアーキテクチャに変更できますか?
A:はい。まず読み書き分離を無効にし、次にインスタンスアーキテクチャを変更する必要があります。
Q:読み書き分離が有効になっているかどうかを確認するにはどうすればよいですか?
A:インスタンスの [ノード管理] ページに移動して、[読み書き分離] オプションが有効になっているかどうかを確認できます。
Q:読み取りリクエストが読み取り専用レプリカにルーティングされないのはなぜですか?
A:デュアルゾーンの読み書き分離アーキテクチャでは、プライマリゾーンとセカンダリゾーンに個別のエンドポイントがあります。読み取りリクエストは、同じゾーン内のマスターノードまたは読み取り専用レプリカにのみルーティングされます。プライマリゾーンのエンドポイントのみを使用する場合、セカンダリゾーンの読み取り専用レプリカには読み取りリクエストはルーティングされません。近接アクセスと負荷分散を有効にするには、アプリケーションコードでプライマリゾーンとセカンダリゾーンのエンドポイントを明示的に区別し、セカンダリゾーンへのリクエストをその特定のエンドポイントにルーティングする必要があります。