Redis Cluster

276 阅读3分钟

Redis Cluster 是 Redis 的分布式解决方案,在 3.0 版本正式推出,有效地解决了 Redis 分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用 Cluster 架构方案达到负载均衡的目的。

1. 参考资料

《Redis 开发与运维》

2. 集群基本原理

Redis Cluster 采用虚拟槽分区,所有的键根据哈希函数映射到 0 ~ 16383 整数槽内,计算公式: slot = CRC16(key) &16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。

Redis 虚拟槽分区的特点:

  • 解耦数据和节点之间的关系,简化了节点扩容和收缩难度
  • 节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据
  • 支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景。

3. 搭建集群

3.1 节点准备

ip端口角色配置文件名
192.168.51.1456379主节点--
192.168.51.1466379主节点cluster.conf
192.168.51.1476379主节点cluster.conf
192.168.51.1486379从节点cluster.conf
192.168.51.1496379从节点cluster.conf
192.168.51.1416379从节点cluster.conf

3.2 启动节点

在各个服务器上运行如下指令

cd /usr/local/redis

redis-server ./conf/cluster.conf

3.3 节点握手

192.168.51.145 节点上依次执行如下指令

cd /usr/local/redis

redis-cli -a foobared

cluster meet 192.168.51.146 6379

cluster meet 192.168.51.147 6379

cluster meet 192.168.51.148 6379

cluster meet 192.168.51.149 6379

cluster meet 192.168.51.141 6379

3.4 分配槽

通过 cluster addslots 命令为节点分配槽,在本次实验中,将 16384 个槽,平均分配至 192.168.51.145, 192.168.51.146 192.168.51.147 三个节点中

执行如下指令

redis-cli -h 192.168.51.145 -a foobared -p 6379 cluster addslots {0..5461}

redis-cli -h 192.168.51.146 -a foobared -p 6379 cluster addslots {5462..10922}

redis-cli -h 192.168.51.147 -a foobared -p 6379 cluster addslots {10923..16383}

3.5 为主节点绑定从节点

实验进行到现在,目前还有 3 个节点没有使用,这三个节点分别为: 192.168.51.148, 192.168.51.149, 192.168.51.141。作为一个完整的集群,每个负责处理槽的节点应该具有从节点,保证当它出现故障时可以自动进行故障转移。集群模式下,Redis 节点角色分为主节点和从节点。首次启动的节点和被分配槽的节点都是主节点,从节点负责复制主节点槽信息和相关的数据。 使用 redis replicate {nodeId} 命令让一个节点成为从节点。

主节点 ip主节点 port从节点 ip从节点 port
192.168.51.1456379192.168.51.1486379
192.168.51.1466379192.168.51.1496379
192.168.51.1476379192.168.51.1416379

登录 192.168.51.148 执行如下命令

cd /usr/local/redis

redis-cli -a foobared

// cluster replicate {192.168.51.145 节点ID}

cluster replicate 9b5a996bd1bfde43adcc8923d3a183053346dd75

image.png

登录 192.168.51.149 执行如下命令

cd /usr/local/redis

redis-cli -a foobared

// cluster replicate {192.168.51.146 节点ID}

cluster replicate 72c3f823a265004ce1595b09df2d143e553fd487

image.png

登录 192.168.51.141 执行如下命令

cd /usr/local/redis

redis-cli -a foobared

// cluster replicate {192.168.51.147 节点ID}

cluster replicate 46d3b15d1cab7191d0051e6d1ed84397eec62d0b

至此,redis cluster 集群已经搭建完毕,通过 cluster nodescluster info 命令可以看出效果

image.png

4. 自动化脚本搭建集群关系

在 192.168.51.145 上执行如下命令,脚本会自动分配槽点信息,会自动分配主从信息

// redis-cluster 自动分配脚本:

redis-cli -a foobared  --cluster create --cluster-replicas 1 192.168.51.145:6379 192.168.51.146:6379 192.168.51.147:6379 192.168.51.148:6379 192.168.51.149:6379 192.168.51.141:6379

5. 配置文件地址

链接:https://pan.baidu.com/s/1cBNyRH-iMq5PA7R-CZkLAQ

提取码: c0ak