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 は必要ありません。