この記事では、Redis のクラスター クラスターについて紹介し、TCP ポート、データ シャーディングを確認し、Docker を使用して 3 つのマスターと 3 つのスレーブを持つ Redis クラスターを構築する方法を学びます。
Redis クラスター は Redis 分散型です実装。 データを Redis クラスター に転送すると、データは自動的に断片化され、各 Redis ノードに保存されます。 [関連する推奨事項: Redis ビデオ チュートリアル ]
シングルポイント Redis と比較して、Redis クラスターは、一部のノードに障害が発生した場合や通信できなくなった場合でも実行を継続できます。ただし、重大なサーバー障害が発生した場合 (たとえば、サーバーの半分以上が使用不可になった場合)、クラスターは機能を停止します。
各 Redis クラスター ノードは 2 つの TCP 接続を開く必要があります。 1 つはクライアントにサービスを提供するために使用される通常の TCP ポートで、デフォルトは 6379 です。 2 番目のポートはクラスター バスに使用され、デフォルト設定は 16379 で、バイナリ プロトコルのノード間通信チャネルです。ノードは、障害の検出、構成の更新、フェイルオーバーの承認などのためにクラスター バスを利用します。
のもの。 Redis クラスターには 16384 のハッシュ スロットがあります。Redis に Key-Value
のペアを保存するときは、指定されたキーのハッシュ スロットを計算する必要があります。この方法では、最初にキーの CRC16 を計算し、次に計算結果のモジュロ 16384 を取得します:hash_slot = CRC16(key) mod 16384
Everyone in the Key Redis クラスター Redis ノードはそれぞれハッシュ スロットのサブセットを担当するため、3 つのノードからなるクラスターがある場合:
ノード A には 0 ~ 5500 のハッシュ スロットが含まれます。
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 donecluster-announce-ip 192.168.1.XX の IP はコンテナ間の通信用の IP である必要があり、以前に追加したネットワークで表示できます。
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
以上がRedis の Cluster クラスターについて説明する記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。