Clusterを構成してみようというエントリです。Clusterを構成して遊んだこともあるので、こちらを見つつどう変わっていったかを確認していきたいと思います。5.0の更新内容は、こちらにまとまっているので参考にさせていただきました。Clusterってなに?前回のエントリでも書いているのですが、おさらい的に。複数のRedisノードを使って構成するクラスタで、データは自動的にシャーディングして保持される一部のサーバーで障害があっても、処理を継続可能スレーブ(レプリカ)を持てるただ、大規模な障害(多数のマスターが停止するなど)が発生した場合は、クラスタは停止するそうです。通常のRedisと違ってTCPポートが2つ必要で、通常のRedisは(デフォルトで)6379ポートを使用しますが、10000を追加したポート(例えば16379)を使用します。このもうひとつのポートは、クラスタノード間での通信に使用され、障害検出、構成の更新、フェイルオーバーの許可などといった用途で使用されます。Cluster内のノードがうまく通信できなくなります。この10000というポートのオフセットは、固定みたいです。Clusterを構成するにはマスター数×2のノードが必要になります。3台分のデータを持ちたい時に、レプリカ数を1にすると、計6ノード必要になります、と。クラスタの構成時にレプリカ数を指定するのですが、初期ノード数がこの計算を下回るとエラーになります。今回使用しているRedisは、5.0.2です。サーバーは、Redis3台構成とします。IPアドレスの範囲は172.17.0.2〜4、ポートは標準の6379。Redis自体は、ビルド・インストール済みとします。各Redisサーバーの起動サーバーそれぞれに、設定ファイルを用意。yes設定は、ドキュメントを見つつ。Redisチュートリアルでは7000ポート以降を使用していますが、今回はデフォルトのポートをそのまま使うことにしました。パスワードは「redispass」としています。Clusterに関する設定は、こちらを参照。Cluster関連のパラメーターは、「cluster-enabled」、「cluster-config-file」、「cluster-node-timeout」の3つです。設定のサンプルは、こちらを参照。Clusterこの設定で、各Redisサーバーを起動します。Clusterを構成してみましょう。covered.クラスタが構成されました。各ノードのログには、クラスタ構成時にこんな感じのログが出力されます。ok今回は3ノードで構成しようとしているので、例えば「--cluster-replicas」を1より大きくすると、レプリカを作るだけのノード数が足りなくなるので、コマンドの実行に失敗します。required.つまり、今回の構成は耐障害性のない構成、すべてのノードがマスターノードとなっています。ところで、以前はこのコマンドは「redis-trib.rb」というRubyスクリプトで行っていました。5.0では、これがredis-cliで実行することが可能になっています。前までは、クラスタのチュートリアルもredis-cliのみの内容になっていたのですが、最近になってredis-trib.rbの内容も書くように修正されたみたいです。4および3は、まだredis-trib.rbを使うからでしょうかね。クラスタの情報を確認してみるクラスタの情報を見てみましょう。「redis-cli」を使います。cluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:3cluster_size:3cluster_current_epoch:3cluster_my_epoch:1cluster_stats_messages_ping_sent:35cluster_stats_messages_pong_sent:36cluster_stats_messages_sent:71cluster_stats_messages_ping_received:34cluster_stats_messages_pong_received:35cluster_stats_messages_meet_received:2cluster_stats_messages_received:71ノードの情報。0-5460この情報、設定項目「cluster-config-file」に記載された内容が出力されている感じがしますね。info」でも、似たような情報が得られます。--cluster」のヘルプは、「help」コマンドで確認できます。cluster.データを操作してみる続いて、データを操作してみましょう。「redis-cli」で接続。6379172.17.0.2:6379>なにも付けないと、キーの配置先によってはエラーになります。別のノードへのリダイレクトが必要になるからです。172.17.0.3:6379これを回避する...自動でリダイレクトしてもらうには、「-c」オプションを付けます。-c172.17.0.2:6379>今度はOKです。172.17.0.2:6379OKよくよく見ると、リダイレクトがかかると接続先のノードが切り替わっていますね...。info」で見れるんですね。average.ノードを追加する今度は、少し方向を変えて、ノードを追加してみましょう。今のクラスタに、172.17.0.5というIPアドレスを持つノードを追加してみます。add-node」を使用します。第1引数は新しいノード、第2引数は既存のノードです。correctly.ノードが追加されました...がスロットが割り当てられていません。average.この状態でも、クライアントからのリクエストには応じることができるみたいですが。172.17.0.3:6379"value1"では、リシャードしましょう。reshard」で実行します。4で4096でいきます。4096データを受け取るノードについて聞かれるので、今回追加したノードのIDを指定します。nodes」などで確認してもいいですし、リシャードの実行時にも表示されていますね。IDを指定すると、どのノードからデータを動かすか聞かれるので...今回は「all」を選んで全ノードから動かすようにします。(yes/no)?「yes」と回答。yesデータの移動が始まります。各ノード、4096スロットずつ割り当てられるように、リシャードできました、と。average.確認してみましょう。172.17.0.5:6379OK追加したノードにも、データが登録できました。ノードを削除する最後に、ノードを削除してみます。先ほど追加したノードを、クラスタから削除してみましょう。del-node」で行います。対象のノードのIPアドレス、ポート、ノードのIDが必要です。7a796a7fb7c4e61699717acaa7d39ec8cb130581ですが、これを実行すると、スロットが割り当てられているからかエラーになります。again.では、リシャードしましょうか...。covered.移動するスロットは、削除するノードが持っている数なので、4096。fbf478e684be17192c16a550bb4b85fa177262c2移動元となるノードは、削除対象とするノードを選びます。7a796a7fb7c4e61699717acaa7d39ec8cb1305812つ目以降にデータの移動元となるノードはないので、「done」。doneリシャードのプランが表示されるので、問題がなければ「yes」。yes今度は、ノードを削除できます(スロットの配置状況を確認するの忘れた...)。node.そして、削除したノードはシャットダウンします...。bye...クラスタから、ノードがいなくなりましたね。average.削除したノードが持っていたデータも、取得可能です。key7"value7"ところで、スロットの配分を見ると、ものすごくバランスが悪いです...。average.リバランスしましょう。172.17.0.4:6379#####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################スロットのリバランスが完了、です。5.0で、クラスタを構成したり、操作をいくつかやってみました。5はてなブログをはじめよう!Kazuhiraさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。