7.3. Redis データベースのシャーディングおよびレプリケーション
シャーディング (パーティショニングとも呼ばれる) とは、大規模なデータベースをシャードと呼ばれる小規模なデータベースに分割することを指します。レプリケーションでは、別のマシンでホストされる同じデータベースのコピーでデータベースがセットアップされます。
シャーディング
シャーディングにより、多くのリーダーインスタンスを容易に追加することができます。また、1 つのデータベースには収まらない非常に多くのデータがある場合や、CPU 負荷が 100% に近い場合にも役立ちます。
3scale の Redis HA では、以下の 2 つの理由によりシャーディングが重要となります。
- 大量のデータを分割およびスケーリングし、特定の指標に合わせてシャード数を調整することで、ボトルネックの回避に役立つ。
- 異なるノードに処理を分散させることで、パフォーマンスが向上する (例: 複数のマシンが同じクエリーで動作している場合)。
クラスターモードが無効な Redis データベースシャーディング用の 3 つの主要なソリューションを以下に示します。
- Amazon ElastiCache
- Redis sentinel による標準 Redis
- Redis Enterprise
レプリケーション
Redis データベースのレプリケーションにより、データセットを異なるマシンに複製して冗長性を確保します。レプリケーションを使用すると、リーダーがダウンした場合に Redis の動作を維持することができます。その後、データは 1 つのインスタンス (リーダー) からプルされ、高可用性が確保されます。
3scale の Redis HA を使用すると、データベースのレプリケーションにより、プライマリーシャードの高可用性レプリカが確保されます。基本的な動作は以下のとおりです。
- プライマリーシャードに障害が発生すると、レプリカシャードが自動的に新しいプライマリーシャードにプロモートされる。
- 元のプライマリーシャードが復旧すると、自動的に新しいプライマリーシャードのレプリカシャードになる。
Redis データベースレプリケーション用の 3 つの主要なソリューションを以下に示します。
- Redis Enterprise
- Amazon ElastiCache
- Redis sentinel による標準 Redis
twemproxy
を使用したシャーディング
Amazon ElastiCache および標準 Redis のシャーディングでは、キーに基づいてデータを分割します。特定のキーを与えられると探すシャードを認識するプロキシーコンポーネントが必要です (例: twemproxy
)。nutcracker としても知られる twemproxy
は Redis プロトコル用の軽量プロキシーソリューションで、割り当てられた特定のキーまたはサーバーのマッピングに基づいてシャードを検索します。twemproxy
により Amazon ElastiCache または標準 Redis インスタンスにシャーディング機能を追加すると、以下のメリットが得られます。
- データを自動的に複数のサーバーにシャーディングすることができる。
- 複数のハッシュモードをサポートし、一貫性のあるハッシュおよび分散できる。
- 複数のインスタンスで実行することができ、これによりクライアントは利用可能な最初のプロキシーサーバーに接続することができる。
- バックエンドのキャッシュサーバーへの接続数を減らすることができる。
Redis Enterprise は独自のプロキシーを使用するため、twemproxy
は必要ありません。