redisクラスタ構築プロセス (非常に詳細、初心者向け)
Redisクラスタの構築
redis クラスタのビルドを開始する前に、redis スタンドアロンのビルドプロセスを簡単に確認しましょう。
- redisのtarballをダウンロードし、zipファイルを解凍する。
- 解凍したredisファイルのディレクトリ(Makefileファイルがあるところ)に移動し、redisソースファイルをコンパイルします。
- コンパイルしたredisソースファイルを/usr/local/redisディレクトリにインストールします。/localディレクトリにredisディレクトリがない場合、自動的に新しいredisディレクトリが作成されます。
- usr/local/redis/binディレクトリに移動し、直接. /redis-serverでredisを起動します(この時、フロントエンドのredisを起動します)。
- 解凍したredisファイルからredis.confファイルを/usr/local/redis/binディレクトリにコピーし、そのredis.confファイル -> daemonize: no を daemonize: yse に修正することで、redis起動方法をバックエンド起動に変更します。
- を経由して /bin ディレクトリに移動します。/redis-server redis.confでredisを起動します(この時点ではバックグラウンド起動)。
- まとめると、redisスタンドアロンのインストールは完了です。
図解入りの詳細な手順は、->を参照してください。
redis入門
/{br
饒舌なのはご容赦ください。さて、この話題に戻りましょう ----redis cluster build!
I. Redisクラスタの紹介
/{h2
{レディス
redisは、多くのインターネット企業に支持されているオープンソースの鍵価値ストレージシステムです。redisは、バージョン3.0以前はシングルトンモードのみをサポートし、バージョン3.0以降ではクラスタのみをサポートします。
-
redisクラスタは、中央ノードやプロキシノードを持たない、完全に分散化されたP2Pモデルを使用しています。
-
redisクラスタは統一されたエントリポイントを持たず、クライアントはクラスタ内の任意のノードに接続し、クラスタ内のノードは互いに通信し(PING-PONGメカニズム)、各ノードがredisインスタンスとなります。
-
クラスタの高可用性を実現するために、つまりノードの健全性(正常に使えるかどうか)を判断するために、redis-clusterは投票によるフォールトトレランス機構を備えています。クラスタ内の半分以上のノードがハングしたと投票したら、そのノードはハング(失敗)するのです。これが、ノードがダウンしているかどうかの判定方法です。
-
では、クラスタがハングアップしているかどうかは、どのように判断するのでしょうか。-> クラスタ内のいずれかのノードがハングアップし、そのノードのスレーブノード(バックアップノード)が存在しない場合、そのクラスタはハングアップします。これが、クラスタがハングアップしているかどうかの判断方法です。
-
では、なぜいずれかのノードがハングアップした場合(スレーブノードがない場合)、クラスタがハングアップするのでしょうか?-> クラスタには16384個のスロット(ハッシュスロット)が組み込まれており、すべての物理ノードはこの16384個の[0-16383]スロットにマッピングされているか、スロットが各ノードに均等に割り当てられているためです。Redisクラスタにデータ(Key-Value)を格納する必要がある場合、Redisはまずこのキーに対してcrc16アルゴリズムを実行し、結果を取得する。この結果は16384にリマップされ、スロット[0-16383]のいずれかに対応し、どのノードにkey-valueを格納するかを決定する。そのため、あるノードがハングアップすると、そのノードに対応するスロットは利用できなくなり、クラスタは正常に動作しなくなります。
-
まとめると、1つのRedisクラスタは理論上、最大16384のノードを持つことができます。
II. クラスタ構築のために必要な環境
2.1 Redisクラスタは最低3ノード必要です。投票によるフォールトトレランス機構では、半数以上のノードが、ノードがハングする前にハングしたと考える必要があるため、2ノードではクラスタを構成することができないからです。
2.2 クラスタの可用性を高めるには、各ノードにスレーブノード、つまりバックアップノードが必要なので、Redisクラスタは最低でも6台のサーバが必要です。私はそんなに多くのサーバを持っておらず、そんなに多くの仮想マシンを起動できないので、ここでは擬似的に分散クラスタを構築しました。つまり、6つのRedisインスタンスが仮想的に動作するサーバを、ポート番号を(7001-7006)に変更して構築しました。もちろん、実際の本番Redisクラスタは、ここと同じように構築します。
2.3 rubyのインストール
3、具体的なクラスタ構築の手順は以下の通りです(ファイアウォールをOFFにすることに注意)。
3.1 クラスタノードを格納するために、usr/localディレクトリにredis-clusterディレクトリを新規に作成します。
3.2 redisディレクトリの下のbinディレクトリにあるファイルを全て/usr/local/redis-cluster/redis01ディレクトリにコピーします。ここにはredis01ディレクトリはないので、自動的に作成されますのでご安心ください。コマンドは以下の通りです(カレントパスに注意してください)。
cp -r redis/bin/ redis-cluster
3.3 redis01 ディレクトリからスナップショットファイル dump.rdb を削除し、同ディレクトリ内の redis.cnf ファイルを修正します。
ポート番号を7001に変更します(デフォルトは6379)。
クラスタ有効のコメントをオンにする yes
3.4 redis-cluster/redis01 ファイルを redis-cluster ディレクトリ (redis02-redis06) に 5 部コピーし、Redis クラスタの 6 ノードを模擬して 6 個の redis インスタンスを作成します。そして、残りの5つのファイルの下にあるredis.conf内のポート番号を、以下の図のようにそれぞれ7002~7006に変更します。
redis02-06ディレクトリを作成します。
redis.confファイルを修正して、ポート番号をそれぞれ7002-7006にします。
3.5 次に、すべてのredisノードを起動します。一つ一つ起動するのは面倒なので、ここでstart-all.shというコマンドで、以下の内容のredisノード一括起動用スクリプトファイルを作成します。
cd redis01
. /redis-server redis.conf
cd .
cd redis02
. /redis-server redis.conf
cd .
cd redis03
. /redis-server redis.conf
cd .
cd redis04
. /redis-server redis.conf
cd .
cd redis05
. /redis-server redis.conf
cd .
cd redis06
. /redis-server redis.conf
cd .
3.6 起動スクリプトファイルを作成したら、次のコマンドで実行できるようにパーミッションを変更します。
chmod +x start-all.sh
3.7 start-all.shスクリプトを実行し、6つのredisノードを起動します。
3.8 OK、では6つのredisノードが無事起動し、その後正式にクラスターを構築できるようになった、以上が準備状況です。写真が長いから面倒くさいと思わないでください、実は上記の手順は、redisインスタンスを6台(6ノード)作成して起動するという一文で済むのです。
クラスタを構築するには、redisを解凍したファイルのソースコードにあるツール(スクリプトファイル)を使用する必要があります。このツールはrubyのスクリプトファイルなので、ツールの実行にはrubyの実行環境が必要で、これはjvm上でjava言語を実行するのと同じことです。そのため、以下のコマンドでrubyをインストールする必要があります。
yum install ruby
ここではredis-3.0.0.gemを使用していますが、redisのバージョンとrubyパッケージのバージョンを一致させる必要があります。
{redisのパッケージのバージョンとrubyのパッケージのバージョンは同じであるべきです。
Rubyパッケージをサーバーにインストールする:図のように、まずダウンロードしてインストールする必要があります。
インストールコマンドは以下の通りです。
gem install redis-3.0.0.gem
3.9 前項でrubyツールに必要な実行環境とrubyパッケージがインストールされ ているので、rubyスクリプトツールをusr/local/redis-clusterディレクトリにコピ ーします。さて、このrubyスクリプトツールはどこにあるのでしょうか?前述したように、redisの解凍ファイルのソースコード、redis/srcディレクトリのredis-trib.rbファイルの中に入っているのです。
3.10 このrubyツール(redis-trib.rb)を以下のコマンドでredis-clusterディレクトリにコピーします。
cp redis-trib.rb /usr/local/redis-cluster
このスクリプトファイルを元に、以下のコマンドでクラスタを構築します。
. /redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:700
注:ここでは、サーバーのIPに対応するIPアドレスを入力する必要があります。
/{br
手動でyesを入力する必要がある箇所があります。
以上で、Rediクラスタの構築は完了です。なお、最後の段落は、各ノードに割り当てられたスロット(ハッシュスロット)を示しています。ここでは合計6つのノードがあり、そのうち3つがスレーブノードなので、3つのマスターノードがそれぞれ0-5460, 5461-10922, 10933-16383ソルトをマップしています。
3.11 最後に、クラスタノードを接続するには、どれか1つを接続するだけです。
redis01/redis-cli -p 7001 -c
注意:必ず-cを付けてください。そうしないと、ノード間の自動ジャンプができません! 下図のように、保存されたデータ(key-value)は各ノードに均等に分散されていることがわかります。
IV. 結論
ふぅ~~~~~~~~~~~~~~~~~~~~~~~~~、やっとRedisクラスタをセットアップすることができました。
/{br
全体のプロセスは、実際には非常に簡単ですが、この記事は、主にエントリレベルのパートナーのために、多くの写真を挿入するので、それは長いようだ、私はあなたがより多くを理解することを願って、不適切な場合、我々は〜を修正するために願っています。
最後に、redis clusterの基本コマンドを2つ追加します。
/{br
1. 現在のクラスタ情報を表示する
クラスタ情報
2. クラスタ内のノード数を確認する
クラスタノード
今回はredisクラスタ構築の手順(非常に詳しいので初心者向け)について紹介します。redisクラスタ構築に関連する内容はBinaryDevelopの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後ともBinaryDevelopをよろしくお願いします
関連
-
Redisクラスタのマスターノードとスレーブノードを縮小する詳細チュートリアル
-
redisキャッシュストレージのセッション原理機構
-
Redisによる分散ロック(setnx, getset, incr)の実装とタイムアウトの扱い方
-
redisでluaスクリプトを使用するためのチュートリアル
-
Redisで緯度・経度座標データを簡単に扱う方法
-
インタビューFAQです。Redisキャッシュとデータベース間のデータ整合性を確保する方法
-
redis分散ロック最適化の実装
-
Redisの高同期スパイクを防ぐために、ソースコードソリューションを売られすぎ
-
SpringBootがRedisの分散ロックを利用して並行処理の問題を解決することについて
-
インストール後、Redis-cliが動作しない(redis-cli: コマンドが見つからない)。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン