1. ホーム
  2. データベース
  3. レディス

redisクラスタ構築プロセス (非常に詳細、初心者向け)

2022-01-20 08:03:48

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をよろしくお願いします