[個人翻訳]Redisクラスタ教程(中)
13996 ワード
前のページ:
http://www.cnblogs.com/li-peng/p/6143709.html
公式原文の住所:
https://redis.io/topics/cluster-tutorial
レベルが限られています。もし読んでいるうちに、翻訳の不合理なところがあったら、メッセージをください。できるだけ早く修正します。ありがとうございます。
creat-cluster角本を使ってRedisクラスタを作成します。
構成によってRedisクラスタを作成したくない場合、上に説明したように手動で単独のインスタンスを実行したくない場合、ここにはもっと簡単なシステムがあります。
Redisのリリース版の中のutils/creat-clusterディレクトリを見るだけでいいです。中にはcreate-clusterというコーナーブックがあります。3つのマスタノードと3つのスレーブノードを含む6ノードのクラスターを起動するためには、以下のコマンドを入力します。
1.reat-cluster start
2.creat-cluster create
第2ステップでは、Redis-tribユーティリティプログラムがクラスタのレイアウトを受信したい場合、yesと答えます。
今はあなたのクラスタと対話できます。最初のノードはデフォルトで30000ポートを使って起動します。操作が完了すると、次のコマンドを使ってクラスタを停止します。
1.reat-cluster stop
このディレクトリ内のREADMEファイルを読んでください。
クラスタと遊ぶ
この段階でRedisクラスタにはクライアントライブラリの実装が足りないという問題があります。
以下は私の知っている実現です。
> redis-rb-clusterは私(@antirez)がRubyで実現しました。他の言語の参考にします。これは元のredis-rbをめぐる簡単な包装であり、クラスタとの通信の最小意味を効率的に実現している。
> redis-py-clusterredis-rb-clusterのPython移植バージョンは、redis-pyのほとんどの機能をサポートします。まだ積極的な開発中です。
> 流行の Predisは現在もRedisクラスタをサポートしており、最近更新されたばかりであり、積極的な開発中である。
> 最も多いjavaクライアントを使って、Jedisは最近Redisクラスタに対するサポートを追加しました。プロジェクトREADMEで確認します。
Jedis Custer 章節
> Stock Exchange.Redis C38089;のサポートを提供します。(しかも大多数のNET言語に適用されます。VB、F铉など)
> redis-go-cluster Node.jsとio.jsのサポートを提供します。これはthunk/promiseに基づくredisクライアントであり、パイプとクラスタを含んでいます。
> redis-go-clusterはRedigo library clientを基本クライアントとするGo言語のRedisクラスタを使用して実現し、結果集約によりMGET/MSETを実現する。
> GitHub上のRedis unstable分岐内のredis-cliユーティリティは-cスイッチを使用して起動する時に最も基本的なクラスタサポートを実現した。
テストRedisクラスタの最も簡単な方法は、上記のいずれかのクライアントを使用することを試みるか、または単にredis-cliコマンドラインツールである。
redis-cliを用いたインタラクションの例を以下に示す。
角本で作成したクラスタを使用すると、あなたのノードが異なるポートを傍受し、デフォルトでは30000から開始することができます。
Redis-cliはクラスタに対するサポートが非常に基本的であるため、彼は常にRedisクラスタノードを使用してクライアントを正しいノードにリダイレクトする。完璧なクライアントは、より良く行うことができ、正確なノードに直接接続するために、hashスロットとノードアドレスのマッピングをキャッシュする。このマッピングは、クラスタ構成が変更された場合のみ更新されます。例えば、フェイルオーバ後、またはシステム管理者がアドレスを介してクラスタ層を変更したり、ノードを削除したりした後です。
redis-rb-clusterのインスタンスプログラムを作成します。
redisクラスタを操作する方法を示し、これらのようにフェイルオーバを実行する前に、またはリピートする前に、いくつかの例示的なプログラムを作成する必要があり、少なくとも簡単なRedisクラスタクライアント相互作用の意味を理解することができる。
このように、一例を実行して、ノードを故障させるか、または再スライスを開始して、リアル環境におけるRedisクラスタの挙動を理解することができる。これはクラスタがコマンドに書き込まれていないときに何が起こったかを知るために非常に有用ではない。
このセクションでは、redis-rb-clusterの基本的な使い方を2つの例で説明します。次は最初の一つです。これはredis-rb-clusterのバージョン内のexample.rbファイルです。
http://www.cnblogs.com/li-peng/p/6143709.html
公式原文の住所:
https://redis.io/topics/cluster-tutorial
レベルが限られています。もし読んでいるうちに、翻訳の不合理なところがあったら、メッセージをください。できるだけ早く修正します。ありがとうございます。
creat-cluster角本を使ってRedisクラスタを作成します。
構成によってRedisクラスタを作成したくない場合、上に説明したように手動で単独のインスタンスを実行したくない場合、ここにはもっと簡単なシステムがあります。
Redisのリリース版の中のutils/creat-clusterディレクトリを見るだけでいいです。中にはcreate-clusterというコーナーブックがあります。3つのマスタノードと3つのスレーブノードを含む6ノードのクラスターを起動するためには、以下のコマンドを入力します。
1.reat-cluster start
2.creat-cluster create
第2ステップでは、Redis-tribユーティリティプログラムがクラスタのレイアウトを受信したい場合、yesと答えます。
今はあなたのクラスタと対話できます。最初のノードはデフォルトで30000ポートを使って起動します。操作が完了すると、次のコマンドを使ってクラスタを停止します。
1.reat-cluster stop
このディレクトリ内のREADMEファイルを読んでください。
クラスタと遊ぶ
この段階でRedisクラスタにはクライアントライブラリの実装が足りないという問題があります。
以下は私の知っている実現です。
> redis-rb-clusterは私(@antirez)がRubyで実現しました。他の言語の参考にします。これは元のredis-rbをめぐる簡単な包装であり、クラスタとの通信の最小意味を効率的に実現している。
> redis-py-clusterredis-rb-clusterのPython移植バージョンは、redis-pyのほとんどの機能をサポートします。まだ積極的な開発中です。
> 流行の Predisは現在もRedisクラスタをサポートしており、最近更新されたばかりであり、積極的な開発中である。
> 最も多いjavaクライアントを使って、Jedisは最近Redisクラスタに対するサポートを追加しました。プロジェクトREADMEで確認します。
Jedis Custer 章節
> Stock Exchange.Redis C38089;のサポートを提供します。(しかも大多数のNET言語に適用されます。VB、F铉など)
> redis-go-cluster Node.jsとio.jsのサポートを提供します。これはthunk/promiseに基づくredisクライアントであり、パイプとクラスタを含んでいます。
> redis-go-clusterはRedigo library clientを基本クライアントとするGo言語のRedisクラスタを使用して実現し、結果集約によりMGET/MSETを実現する。
> GitHub上のRedis unstable分岐内のredis-cliユーティリティは-cスイッチを使用して起動する時に最も基本的なクラスタサポートを実現した。
テストRedisクラスタの最も簡単な方法は、上記のいずれかのクライアントを使用することを試みるか、または単にredis-cliコマンドラインツールである。
redis-cliを用いたインタラクションの例を以下に示す。
$ redis-cli -c -p 7000
redis 127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:7002
OK
redis 127.0.0.1:7002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7000
OK
redis 127.0.0.1:7000> get foo
-> Redirected to slot [12182] located at 127.0.0.1:7002
"bar"
redis 127.0.0.1:7000> get hello
-> Redirected to slot [866] located at 127.0.0.1:7000
"world"
角本で作成したクラスタを使用すると、あなたのノードが異なるポートを傍受し、デフォルトでは30000から開始することができます。
Redis-cliはクラスタに対するサポートが非常に基本的であるため、彼は常にRedisクラスタノードを使用してクライアントを正しいノードにリダイレクトする。完璧なクライアントは、より良く行うことができ、正確なノードに直接接続するために、hashスロットとノードアドレスのマッピングをキャッシュする。このマッピングは、クラスタ構成が変更された場合のみ更新されます。例えば、フェイルオーバ後、またはシステム管理者がアドレスを介してクラスタ層を変更したり、ノードを削除したりした後です。
redis-rb-clusterのインスタンスプログラムを作成します。
redisクラスタを操作する方法を示し、これらのようにフェイルオーバを実行する前に、またはリピートする前に、いくつかの例示的なプログラムを作成する必要があり、少なくとも簡単なRedisクラスタクライアント相互作用の意味を理解することができる。
このように、一例を実行して、ノードを故障させるか、または再スライスを開始して、リアル環境におけるRedisクラスタの挙動を理解することができる。これはクラスタがコマンドに書き込まれていないときに何が起こったかを知るために非常に有用ではない。
このセクションでは、redis-rb-clusterの基本的な使い方を2つの例で説明します。次は最初の一つです。これはredis-rb-clusterのバージョン内のexample.rbファイルです。
1 require './cluster'
2
3 if ARGV.length != 2
4 startup_nodes = [
5 {:host => "127.0.0.1", :port => 7000},
6 {:host => "127.0.0.1", :port => 7001}
7 ]
8 else
9 startup_nodes = [
10 {:host => ARGV[0], :port => ARGV[1].to_i}
11 ]
12 end
13
14 rc = RedisCluster.new(startup_nodes,32,:timeout => 0.1)
15
16 last = false
17
18 while not last
19 begin
20 last = rc.get("__last__")
21 last = 0 if !last
22 rescue => e
23 puts "error #{e.to_s}"
24 sleep 1
25 end
26 end
27
28 ((last.to_i+1)..1000000000).each{|x|
29 begin
30 rc.set("foo#{x}",x)
31 puts rc.get("foo#{x}")
32 rc.set("__last__",x)
33 rescue => e
34 puts "error #{e.to_s}"
35 end
36 sleep 0.1
37 }
このプログラムは に なことをしました。 はfooという でキーを つずつ してnumberとしています。このプログラムを すれば、その は のコマンドフローです。 SET foo 0 SET foo 1 SET foo 2 And so forth…
このプログラムは のアプリケーションより に えるが、 ではなく、 にエラー を するように されているので、クラスタと する は、Begin recueブロックにそれぞれ まれる。
プログラムの14 のコードは に いところです。 はRedisクラスタオブジェクトを し、スタートノードのリストをパラメータとして して、このオブジェクトを することができます。
ノードはクラスタ のすべてのノードを としない。 なのは、 なくとも1つのノードがアクセス であることである。 redis-rb-clusterがノードに できる り、スタートリストは されます。 の しいクライアントにもこのような があることを してください。
はすでにRedisクラスタオブジェクトの を しました。
rc では、 なredisオブジェクトインスタンスを するようにこのオブジェクトを するつもりです。
これは かに しました。
18から26 :この を すると、foo 0からやり したくないので、このカウントをRedisに します。 のコードはこのカウンタを み るように されています。あるいはこのカウンタが しない は0に されます。
しかし、 がどのようなwhileサイクルであるかに してください。クラスタが じられていても、エラーに りたいからです。 なアプリケーションではないので、このような が です。
28から37 は なループを し、キーを したり、エラーメッセージを したりします。
サイクルの にsleepを び しました。あなたのテストでクラスタに き む が いなら、sleepを します。(ここは なサイクルに して、もちろん の ではありません。このようにベストな で、 10 k ops/sが られます。)。
には なプログラムについては、 に にフォローされることができます。 き み を くします。
このアプリケーションを すると の が します。ruby ./example.rb
1
2
3
4
5
6
7
8
9
^C (I stopped the program here)
これはとても いプログラムではありません。 でもっといいものを います。でも、プログラムが されてから、 を けている に が こったかを られます。
クラスタの (Reshading)
これからクラスタの を みるつもりです。そのためには、example.rbプログラムの を する がありますので、プログラムの に があるかどうかを できます。 じようにスライス は、より しい き み のために、スリープコールを したいかもしれません。
スライスを するということは、 には、Redis−tribユーティリティを してクラスタの を するように、ハッシュスロットをノードのセットから のノードに させることを する。
のコードを するだけで、スライスの が されます。 ./redis-trib.rb reshard 127.0.0.1:7000
あなたが するべきなのはノードを してください。redis-tribは に のノードを つけます。
に のサポートが です。このノードからスロットの5%だけを のノードに するとは えません。だから い わせから めます。まず、どのぐらいの きさの を りたいですか?How many slots do you want to move (from 1 to 16384)?
1000 のハッシュ・スロットセグメントを してもいいです。 がまだsleepを しないで されているなら、いくつかの なキーがすでに まれています。
この 、redis-tribはスライスの が かを る があります。つまり、ハッシュ・スロットを するノードである。 のマスタノード、つまり127.1.0.1:7000を いますが、インスタンスを するノードIDが です。redis-tribによってもう つのリストに されましたが、 であれば、よく のコマンドを ってノードIDを します。$ redis-cli -p 7000 cluster nodes | grep myself
97a3a64667477371c4479320d683e4c8db5858b1 :0 myself,master - 0 0 0 connected 0-5460
okですので、 たちのターゲットノードは97 a 3 a 646464677371 c 4479320 d 683 e 4 c 8 db 5858 b 1です。
これらのキーはどのノードから りたいのかを ねられます。 のすべてのマスタノードからいくつかのハッシュスロットを り すためには、allを するだけです。
の では、 Redis-tribがノードから のノードのスロットに する を て、ノードごとに のノードに する のキーのために1つのポイントを します。
スライスの であなたの の には がありません。 の 、あなたが えている り、あなたの なプログラムを も したり、 したりすることができます。
スライスが わったら、 のコマンドを ってクラスタの をテストできます。
はすべてのスロットをカバーするが、これらのプライマリノード127.1.0.1:7000は、より くのハッシュスロットを し、 6461.