Redis Cluster 单机部署

高可用架构-Redis Cluster

Redis服务器支持单机、主从复制、Sentinel、集群部署,部署架构也是由简单到复杂,Redis Cluster 集群架构是官方推荐应对大数据量、大并发场景部署方案。Redis的架构变迁如下图所示,其归属就是Redis Cluster

在这里插入图片描述

Redis Cluster是Redis的分布式实现,其设计主要目标如下:

  • 高性能 高扩展 - 支持线性扩展 最高可达1000个节点。没有中间代理 使用异步复制
  • 允许范围内的写入安全机制 - 系统以最大努力的方式确保主节点写入安全操作,但并不是100%
  • 高可用 - 在节点不可用的情况下,Redis Cluster集群能够保证其他节点的可用性。同时每个主节点可设置最少一个副本节点

不同于Redis Sentinel ,Redis Cluster 采用将数据进行分割处理,每个节点存储整个数据集的一部分,同时为了保证架构的高可用性,每个节点允许N个副本进行数据备份。Redis Cluster 集群将数据从逻辑上分成 16384个Hash 槽,每个Node节点承担16384个槽中的一部分数据。假设Redis Cluster 有三个Node节点,则数据分布如下

SlotsNode
0 - 5460Node #0
5461 - 10922Node #1
10923 - 16383Node #2

简单的原理先介绍到这里,现在开始动手在本地搭建一个Cluster 集群。

单机集群

创建配置

在单机上设置三个节点(Redis Cluster要求最少三个节点),占用端口分别为 60000、60001、60002;使用一下shell脚本自动生成三个节点的配置文件

# 创建 redis_cluster.sh 文件内容如下
for i in 0 1 2 
do
 p=$((6000 + i))
 mkdir -p node_$p 
 cat << EOF > node_$p/redis.conf
 port $p
 cluster-enabled yes
 cluster-config-file cluster.conf
 cluster-node-timeout 5000
 daemonize yes
 appendonly yes
EOF
done
# 对 redis_cluster.sh 文件进行授权
chmod u+x *.sh
# 运行文件
./redis_cluster.sh 
# 查看目录
AndydeMacBook-Pro:cluster andy$ ls
node_6000		node_6001		node_6002		redis_cluster.sh

已经自动生成三个节点的配置文件,下面简单介绍一下配置文件的内容

配置说明

# 查看文件内容
more node_6000/redis.conf
 # 节点占用端口
 port 6000
 # 启动Redis Cluster 集群 
 cluster-enabled yes
 # 定义集群节点 配置存储文件名称
 cluster-config-file cluster.conf
 # 心跳 (ping) 超时时间
 cluster-node-timeout 5000
 # 以后台进程启动
 daemonize yes
 # 开启aof 持久化
 appendonly yes

运行节点

# 编写 run_cluster.sh 批量运行集群
for i in 0 1 2;
  do cd node_$((6000 + i));
redis-server redis.conf& cd -; 
done
# 对 run_cluster.sh 文件进行授权
chmod u+x *.sh
# 运行文件
AndydeMacBook-Pro:cluster andy$ ./run_cluster.sh 
/Users/andy/tool/util/redis-stable/cluster
/Users/andy/tool/util/redis-stable/cluster
/Users/andy/tool/util/redis-stable/cluster

在这里插入图片描述

如上,三个节点已经正常运行。

创建集群

# 使用一下命令创建cluster , 在中途输入yes 使用系统自动分配的hash槽 进行初始化
redis-cli --cluster create 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002

在这里插入图片描述

客户端连接

测试Redis Cluster是否工作正常。

AndydeMacBook-Pro:~ andy$ redis-cli -c -p 6000
# x 的key 的hash 槽是 16287 被分配到 6002节点进行存储
127.0.0.1:6000> set x world
-> Redirected to slot [16287] located at 127.0.0.1:6002
OK
# hello 的key 的hash 槽是 866 被分配到 6000节点进行存储
127.0.0.1:6002> set hello world
-> Redirected to slot [866] located at 127.0.0.1:6000
OK

使用redis-cli 连接集群时,需要加上 -c 参数,否则就会出现 (error) MOVED 16287 127.0.0.1:6002错误

img

至此,单机Cluster架构已经搭建完毕,但是似乎并不满足高可用的设计初衷,因为任意节点不可用都会导致服务不正常,接下来我们为每个节点创建一个从节点,复制主节点的数据。

单机主从Cluster

三个主节点 + 三个从节点 那么最少需要创建6个节点才能满足高可用的要求。启动集群也非常的简单,只需要使用标志–cluster replica 1,就能自动创建集群

创建配置

# 重新创建一个 cluster_salve 文件夹  更改 redis_cluster.sh 的内容
for i in 0 1 2 3 4 5
do
 p=$((6000 + i))
 mkdir -p node_$p
 cat << EOF > node_$p/redis.conf
 port $p
 cluster-enabled yes
 cluster-config-file cluster.conf
 cluster-node-timeout 5000
 daemonize yes
 appendonly yes
EOF
done
# 运行脚本
AndydeMacBook-Pro:cluster_slave andy$ ./redis_cluster.sh 

运行节点

# run_cluster.sh 内容如下
for i in 0 1 2 3 4 5;
  do 
  p=$((6000 + i))
  cd node_$p;
redis-server redis.conf& cd -; 
done
# 运行脚本
AndydeMacBook-Pro:cluster_slave andy$ ./run_cluster.sh 

创建集群

AndydeMacBook-Pro:cluster_slave andy$ redis-cli --cluster create 127.0.0.1:6000 127.0.0.1:6001 \
> 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 \
> --cluster-replicas 1

在这里插入图片描述

Cluster 基本命令

查看节点信息

AndydeMacBook-Pro:cluster_slave andy$ redis-cli -c -p 6000 cluster nodes
f6c144b0743c9d32fb85d14fb3508e2a7310a3e7 127.0.0.1:6003@16003 slave 35cf7788e843934944d9690d6d627e6ae56ca7bf 0 1670682923682 1 connected
15a4bd4db978a14458bd0da6d967acf2e4a76214 127.0.0.1:6001@16001 master - 0 1670682922000 2 connected 5461-10922
24fd38e6d58d3969cacd1ee26a6a113fa88d181f 127.0.0.1:6004@16004 slave 15a4bd4db978a14458bd0da6d967acf2e4a76214 
...

查看集群信息

AndydeMacBook-Pro:cluster_slave andy$ redis-cli -c -p 6000 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
....

查看节点ID

127.0.0.1:6000> cluster myid
"35cf7788e843934944d9690d6d627e6ae56ca7bf"
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值