web-dev-qa-db-ja.com

Redisクラスター:マスターノードは3つ以上?

私はRedis 3のクラスター機能を評価しています(現在はRedis 2スタンドアロンを使用しています)。そのため、情報は http://redis.io/topics/cluster-tutorial

このドキュメントでは、非常に重要な情報を読みました。

期待どおりに機能する最小クラスターには、少なくとも3つのマスターノードを含める必要があることに注意してください。最初のテストでは、3つのマスターと3つのスレーブを持つ6ノードのクラスターを起動することを強くお勧めします。

本当ですか?私の考えでは、シャーディング機能(データはノード間で共有されます)を使用する場合は正しいですが、それが不要で、1つのノードのみにデータを保持したい場合はどうなりますか?

基本的に1つのマスターと2つのスレーブが必要です(そのため、1つのノードに障害が発生した場合にクラスターが稼働します)、本番環境でこの構成を使用できますか?はいの場合、禁忌は何ですか?

手伝ってくれてありがとうございます!

9
Mat

本当ですか?

はい、それがドキュメントにある理由です:)

私の考えでは、シャーディング機能(データはノード間で共有されます)を使用する場合は正しいですが、それが不要で、1つのノードのみにデータを保持したい場合はどうなりますか?

クラスターモードでRedisを使用することは、シャーディングを意味します。単一のインスタンスに満足している場合は、クラスターを使用しないでください。それ以外の場合は、基になる仮定についてさらに理解するために クラスター仕様自体 を参照してください。具体的には、最小限のクラスター構成の場合、パーティションの場合にクラスターの可用性を確保するために3つのマスターが必要になります。そうしないと、過半数に同意できなくなります。

5
Itamar Haber

Redisを使用してフェイルオーバーする場合は、最低3つのマスターノードと3つのスレーブノード(最低3つのサーバー、それぞれマスターとスレーブを実行)が必要です。

ハートビートなどの外部クラスタソフトウェアを使用する場合、1つはクラスタモードのマスターでもう1つはスレーブである2つのノードをセットアップし、すべての16384スロットをマスターに割り当て、マスターが次のときにフェイルオーバースクリプトを使用して「CLUSTER FAILOVER TAKEOVER」を実行できます。ダウン。もちろん、redisと一緒にフェイルオーバーするようにサービスIPをセットアップすることもできます。この追加の配置により、非クラスターredisクライアントも使用できるようになります。

実稼働は1年間実行され、数回フェイルオーバー(カーネル更新のためにマシンをリブート)し、これまでのところ運用チームから問題は報告されていません。

4
Ken Cheung

私はこの質問が古いことを知っていますが、同様の設定が必要な場合は、クラスターの代わりにマスタースレーブ構成を使用できます。必要なもの:

  • 2 Redisサーバー
  • 3ヘルスを監視してスプリットブレインを回避するRedis Sentinel
  • 誰がマスターであるかを確認する方法(私はいくつかのチェックコマンドでクライアントサーバーでHAProxyを使用しています)

十分にスマートにできる場合は、マスターに書き込み、すべてのノードから読み取ることができます。私はいくつかのWordpressサイトでこの設定を使用していますが、プラグインはマスターが誰であるかを検出するように作成されていないため、HAProxyを使用してマスターを検出し、すべてのトラフィックをそのノードに送信します。マスターノードが停止した場合、スレーブノードがマスターの役割を果たします(redis-sentinelがそれを管理します)HAProxyはマスターが変更されたことを検出し、すべてのトラフィックを受信するノードを変更します。

コードと例を投稿しないでください申し訳ありませんが、今はそれを行うことができません。

ご挨拶!!

4
Daniel Carrasco

本当ですか?

いいえ、それは本当に真ではありません。これは強力な推奨事項です(「期待どおりに機能する」言語からわかるように、データの耐久性が期待されず、データが失われることが予想される場合など)。can単一ノードのクラスターをセットアップします。クラスターモードをオフにするのではなく、なぜそうするのかは、あなた次第です。)

ですから、お勧めしませんがcanシングルノードクラスターをセットアップします(他の回答やドキュメントで説明されているすべての理由によります)。redisクラスターコードには何もありません。単純なユーザーを思いとどまらせるためにあるredis-trib.rbヘルパーでのチェック以外に、それはあなたを止めます。

そのチェックを回避し、単一ノードのクラスターを設定するには(それがあなたが望んでいることを確信している場合-ほぼ間違いなくそうです)、CLUSTER ADDSLOTS 1 2 3 ...を使用してノードにシャードを手動で割り当てることができます(など、すべての16384シャード)。または、Pythonバージョンのredis-tribを使用して、3ノードの安全性チェック(redis-trib.py create 127.0.0.1:6379)を実行しません。

3