Redis クラスターのインストール用の断片化されたクラスター

1. シャードクラスターを使用する理由

マスター/スレーブとセントリーは、高可用性と高同時読み取りの問題を解決できます。しかし、まだ未解決の問題が 2 つあります。

  • 大容量データストレージの問題
  • 高同時書き込みの問題は、センチネル モードの本質が依然としてマスター/スレーブ モードであることです。マスター/スレーブ モードでは、ノードを追加して読み取り同時実行機能を拡張できますが、書き込みを拡張する方法はありませんslave。そしてストレージ機能。

上記の問題は、シャード クラスターを使用することで解決できます。シャード クラスターの特徴は次のとおりです。

  • クラスターには複数のクラスターがありmaster、それぞれにmaster異なるデータが保存されます。
  • それぞれにmaster複数のslaveノードを含めることができます。
  • masterpingお互いの健康状態をモニタリングすることで。
  • クライアント要求はクラスター内の任意のノードにアクセスでき、最終的には正しいノードに転送されます。

2. シャードクラスターの概要

シャード クラスターはRedis複数のマスター/スレーブ構造の組み合わせであり、各マスター/スレーブ構造にはマスター インスタンスと複数のスレーブ インスタンスがあります。Redisデータ量が増加した場合、シャード クラスターを水平に拡張でき、キー値が指定されたインスタンスに配置されるため、システムの単一マスター ノードへの依存が軽減され、それによってサービスの読み取りおよび書き込みパフォーマンスが向上しますRedis

ここに画像の説明を挿入

3. ハッシュスロット

Redis各ノードは合計スロット ( )masterにマッピングされますハッシュ スロットはデータ パーティションに似ています。各キーと値のペアは、その値に従ってハッシュ スロットにマップされます。特定の実行プロセスは 2 つのステップに分かれています。0~1638316384hash slotkey

  • キーと値のペアに従ってkey、アルゴリズムに従って値をCRC16計算します16bit
  • 次に、16bit値のペアを使用して16384係数を取得し0~16383、範囲内の係数を取得します。各係数は、対応する番号を持つハッシュ スロットを表します。各ノードは、スロットの一部を処理する責任があります。Redisクラスター内にmasterノードがある場合はABC、範囲各ノードが担当するスロットは次のとおりです。
masterノード 処理スロット
A 0-5460
B 5461-10922
C 10923-16383

ここに画像の説明を挿入

クラスター情報を表示すると、次のことがわかります。

注: **データはkeyノードではなくスロットにバインドされます。**このバインディングの利点は、クラスターが拡張してノードが増加するか、ダウンタイムによってmasterノードが減少する場合、Redisスロットを生き残ったノードに転送する方が便利であり、データはスロット転送に続くため、元のデータを見つけることができることです。場所の位置。

Rediskeyスロット値は、次の 2 つの場合に、 の有効な部分に従って計算されます

  • key「{}」が含まれており、「{}」に少なくとも 1 文字が含まれており、「{}」の部分が有効な部分です
  • key「{}」は含まれていません。全体がkey有効な部分です

4. シャードクラスターを構築する

4.1. クラスター構造

シャード クラスターには多数のノードが必要です。ここでは、masterそれぞれmaster1 つのノードを含む3 つのノードで最小限のシャード クラスターを構築しますslave。構造は次のとおりです。

ここに画像の説明を挿入

ここでは、同じ仮想マシン内で 6 つのインスタンスを起動してredis、断片化されたクラスターをシミュレートします。

IP ポート 役割
10.0.4.10 7001 master
10.0.4.10 7002 master
10.0.4.10 7003 master
10.0.4.10 8001 slave
10.0.4.10 8002 slave
10.0.4.10 8003 slave

4.2. インスタンスと設定の準備

以前のディレクトリ 7001、7002、および 7003 を削除し、ディレクトリ 7001、7002、7003、8001、8002、および 8003 を再作成します。

# 进入/home/redis目录
cd /home/redis
# 删除旧的,避免配置干扰
rm -rf 7001 7002 7003
# 创建目录
mkdir 7001 7002 7003 8001 8002 8003

次の内容を含む新しい/home/redisファイルを以下に準備します。redis.conf

port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /home/redis/6379/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /home/redis/6379
# 绑定地址
bind 0.0.0.0
# 让redis后台运行
daemonize yes
# 注册的实例ip
replica-announce-ip 10.0.4.10
# 保护模式
protected-mode no
# 数据库数量
databases 16
# 日志
logfile /home/redis/6379/run.log

このファイルを各ディレクトリにコピーします。

# 进入/home/redis
cd /home/redis
# 执行拷贝
echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf

各ディレクトリの下を変更しredis.conf、ディレクトリと一致するように 6379 を変更します。

# 进入/home/redis目录
cd /home/redis
# 修改配置文件
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf

4.3. 起動

バックグラウンド起動モードが構成されているため、サービスを直接起動できます。

# 进入/home/redis目录
cd /home/redis
# 一键启动所有服务
printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-server {}/redis.conf

PS 経由でステータスを表示します。

ps -ef | grep redis

検出サービスは正常に開始されました:

ここに画像の説明を挿入

すべてのプロセスを閉じたい場合は、次のコマンドを実行できます。

ps -ef | grep redis | awk '{print $2}' | xargs kill

または (この方法をお勧めします):

printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-cli -p {} shutdown

4.4. クラスターの作成

サービスは開始されていますが、現在は各サービスが連携せずに独立しています。

クラスタを作成するにはコマンドを実行する必要があります。Redis5.0以前はクラスタを作成するのが面倒でしたが、5.0 以降はクラスタ管理コマンドが に統合されましたredis-cli

1)Redis5.0以前

Redis5.0以前のクラスター コマンドは、redisインストール パッケージを使用してsrc/redis-trib.rb実装されました。言語で書かれているredis-trib.rbためインストール環境が必要です。rubyruby

# 安装依赖
yum -y install zlib ruby rubygems
gem install redis

次に、次のコマンドを使用してクラスターを管理します。

# 进入redis的src目录
cd /home/redis/redis-6.2.4/src
# 创建集群
./redis-trib.rb create --replicas 1 10.0.4.10:7001 10.0.4.10:7002 10.0.4.10:7003 10.0.4.10:8001 10.0.4.10:8002 10.0.4.10:8003

2)Redis5.0後で

Redis6.2.4バージョン、クラスター管理を使用し、それに統合されていますredis-cli。形式は次のとおりです。

redis-cli --cluster create --cluster-replicas 1 10.0.4.10:7001 10.0.4.10:7002 10.0.4.10:7003 10.0.4.10:8001 10.0.4.10:8002 10.0.4.10:8003

コマンドの説明:

  • redis-cli --clusterまたは./redis-trib.rb: クラスタ操作コマンドを表します
  • create: クラスターの作成を表します
  • --replicas 1または--cluster-replicas 1:masterクラスタ内のそれぞれのコピー数が 1 であることを指定し、节点总数 ÷ (replicas + 1)このとき取得した数がmasterその数になります。したがって、ノード リストの最初のノードは、他のノードはすべて、異なるノードにランダムに割り当てられたノードにnなります。masterslavemaster

実行後の様子:

ここに画像の説明を挿入

ここでの問題は、上記の方法でクラスターを作成することです。問題がない場合は、次を入力するyesと、クラスターの作成が開始されます。

ここに画像の説明を挿入

次のコマンドを使用してクラスターのステータスを表示できます。

redis-cli -p 7001 cluster nodes

ここに画像の説明を挿入

4.5. テスト

ノード 7001 に接続してデータを保存してみます。

# 连接
redis-cli -p 7001
# 存储数据
set num 123
# 读取数据
get num
# 再次存储
set a 1

結果は悲劇的です:

ここに画像の説明を挿入

redis-cliクラスターの操作中に、パラメーターを追加する必要があります-c

redis-cli -c -p 7001

今回はうまくいきます:

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_37726813/article/details/130915763