ホームページ  >  記事  >  データベース  >  Redis の Cluster クラスターについて説明する記事

Redis の Cluster クラスターについて説明する記事

青灯夜游
青灯夜游転載
2021-07-23 10:21:592870ブラウズ

この記事では、Redis のクラスター クラスターについて紹介し、TCP ポート、データ シャーディングを確認し、Docker を使用して 3 つのマスターと 3 つのスレーブを持つ Redis クラスターを構築する方法を学びます。

Redis の Cluster クラスターについて説明する記事

Redis クラスター (Redis クラスター)

Redis クラスター は Redis 分散型です実装。 データを Redis クラスター に転送すると、データは自動的に断片化され、各 Redis ノードに保存されます。 [関連する推奨事項: Redis ビデオ チュートリアル ]

シングルポイント Redis と比較して、Redis クラスターは、一部のノードに障害が発生した場合や通信できなくなった場合でも実行を継続できます。ただし、重大なサーバー障害が発生した場合 (たとえば、サーバーの半分以上が使用不可になった場合)、クラスターは機能を停止します。

Redis クラスター TCP ポート

各 Redis クラスター ノードは 2 つの TCP 接続を開く必要があります。 1 つはクライアントにサービスを提供するために使用される通常の TCP ポートで、デフォルトは 6379 です。 2 番目のポートはクラスター バスに使用され、デフォルト設定は 16379 で、バイナリ プロトコルのノード間通信チャネルです。ノードは、障害の検出、構成の更新、フェイルオーバーの承認などのためにクラスター バスを利用します。

  • クライアントはクラスター バス ポートとの通信を試みるべきではなく、常に通常の Redis コマンド ポートとの通信を試行する必要があります。ただし、必ずファイアウォールで両方のポートを同時に開いてください。そうしないと、Redis クラスター ノードが開かれなくなります。意思疎通ができません。コマンド ポートとクラスタ バス ポートのオフセットは固定であり、常に 10000 です。
  • 両方の TCP ポートが同時に開かれていない場合、クラスターは正しく動作しません。
  • クラスター バスは、ノード間のデータ交換に異なるバイナリ プロトコルを使用します。これは、非常に少ない帯域幅と処理時間でノード間で情報を交換するのに適しています。

#Redis クラスターのデータ シャーディング

Redis クラスターは一貫したハッシュを使用せず、ハッシュ スロットを使用します。 #hash_slot

のもの。 Redis クラスターには 16384 のハッシュ スロットがあります。Redis に Key-Value

のペアを保存するときは、指定されたキーのハッシュ スロットを計算する必要があります。この方法では、最初にキーの CRC16 を計算し、次に計算結果のモジュロ 16384 を取得します:

hash_slot = CRC16(key) mod 16384

Everyone in the Key Redis クラスター Redis ノードはそれぞれハッシュ スロットのサブセットを担当するため、3 つのノードからなるクラスターがある場合:

ノード A には 0 ~ 5500 のハッシュ スロットが含まれます。

    ノード B には、5501 ~ 11000 のハッシュ スロットが含まれています。
  • ノード C には、11001 から 16383 までのハッシュ スロットが含まれています。
  • これにより、クラスター内のノードの追加と削除が簡単になります。たとえば、新しいノード D を追加する場合、いくつかのハッシュ スロットをノード A、B、C から D に移動する必要があります。同様に、ノード A をクラスターから削除したい場合は、A が提供するハッシュ スロットを B と C に移動するだけです。ノード A が空の場合は、クラスターから完全に削除できます。
あるノードから別のノードへのハッシュ スロットの移動にはダウンタイムが必要ないため、ノードが保持するハッシュ スロットの追加、削除、または割合の変更にはダウンタイムは必要ありません。

次に、docker を使用して、3 つのマスターと 3 つのスレーブを持つ Redis クラスターを構築します。

Docker を使用して RedisCluster を構築する

Redis 構成

port ${PORT}                                       ##节点端口
protected-mode no                                  ##开启集群模式
cluster-enabled yes                                ##cluster集群模式
cluster-config-file nodes.conf                     ##集群配置名
cluster-node-timeout 5000                          ##超时时间
cluster-announce-ip 192.168.1.XX                   ##实际为各节点网卡分配ip  先用一个ip代替
cluster-announce-port ${PORT}                      ##节点映射端口
cluster-announce-bus-port 1${PORT}                 ##节点总线端口
appendonly yes                                     ##持久化模式
カスタムを作成するネットワーク

docker network create redis-net
カスタム パス

mkdir -p /usr/redis_cluster
cd /usr/redis_cluster
カスタム パスの下に conf およびデータ ターゲットを生成し、構成情報を生成します

for port in `seq 6001 6006`; do
    mkdir -p ./${port}/conf
    touch ./${port}/conf/redis.conf 
    mkdir -p ./${port}/data 
    echo "port ${port}" >>./${port}/conf/redis.conf
    echo "protected-mode no" >>./${port}/conf/redis.conf
    echo "cluster-enabled yes" >>./${port}/conf/redis.conf
    echo "cluster-config-file nodes.conf" >>./${port}/conf/redis.conf
    echo "cluster-node-timeout 5000" >>./${port}/conf/redis.conf
    echo "cluster-announce-ip 192.168.1.XX" >>./${port}/conf/redis.conf
    echo "cluster-announce-port ${port}" >>./${port}/conf/redis.conf
    echo "cluster-announce-bus-port 1${port}" >>./${port}/conf/redis.conf
    echo "appendonly yes" >>./${port}/conf/redis.conf
done
cluster-announce-ip 192.168.1.XX の IP はコンテナ間の通信用の IP である必要があり、以前に追加したネットワークで表示できます。

    合計 6 つのフォルダー (6001 から 6006) が生成されます。各フォルダーには data フォルダーと conf フォルダーが含まれ、conf には redis.conf 構成ファイルが含まれます。
  • Redis コンテナーの開始

for port in `seq 6001 6006`; do \
  docker run -d --privileged=true -p ${port}:${port} -p 1${port}:1${port}\
  -v $PWD/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -v $PWD/${port}/data:/data \
  --restart always --name redis-${port} --net redis-net \
  redis:5.0.5 redis-server /usr/local/etc/redis/redis.conf; \
done
クラスターの開始

# 进入任意Redis容器
docker exec -it redis-6001 /bin/bash
# 初始化Redis集群命令
redis-cli --cluster create 172.19.0.2:6601 172.19.0.3:6602 172.19.0.4:6603 172.19.0.5:6604 172.19.0.6:6605 172.19.0.7:6606 --cluster-replicas 1
作成が成功したら、redis を使用できます。 -cli コマンドは、Redis サービスの 1 つに接続します。

    # 单机模式启动
    redis-cli -h 127.0.0.1 -p 6001
    # 集群模式启动
    redis-cli -c -h 127.0.0.1 -p 6001
  • その後、クラスター ノード コマンドを使用してノード情報を表示し、それが期待どおりであることを確認できます。 3 つのマスターと 3 つのスレーブの
参考ドキュメント

    Redis 公式ドキュメント
  • その他のプログラミング 関連知識については、
  • プログラミング ビデオ
をご覧ください。 !

以上がRedis の Cluster クラスターについて説明する記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は掘金--新海で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。