redis(十一):redis cluster[1]

1.hash取余

增加一个节点,
在这里插入图片描述
数据迁移量接近百分之80
在这里插入图片描述
多倍扩容减少数据迁移量(也就是node增加数量直接增加1倍或多倍)
在这里插入图片描述

2.一致性hash

我们做一个token环,n1到n4一共4个节点平均管理这2的32次方个token。

增加一个节点5,n1,n3,n4不会受到影响,只有n2上的数据才会被部分受到影响。特别别是当节点有1000个节点时,收到的节点小于1000分之1.

缺点:这种做法无法使数据达到负载均衡,因为n5和n2的数据量比其他节点少了。如果想要负载均衡,必须(在原来4个节点基础上)一次性增加4个节点。
在这里插入图片描述

3.虚拟插槽

每个node管理一个槽范围,一个key过来就和16383取余,得到它应该交给哪个插槽。

和一致性hash相比,虚拟插槽可以解决数据分布不均匀的场景,每个node数据量按百分比分配。而且使用crc16算法计算hash值,保证hash值的均匀分布。
在这里插入图片描述

4.redis集群和普通redis的区别

节点配置文件指定为集群模式。
在这里插入图片描述
meet:不同节点之间发送一个心跳,
在这里插入图片描述
需要手动指定槽的范围和对应的节点
在这里插入图片描述

5.安装

在一个机器上模拟redis-cluster

进入redis

vi redis-8000.conf

# 加入下面的内容#######################################

port 8000
daemonize yes
dir "/usr/local/redis/data"
logfile "/usr/local/redis/logs/redis-8000.log"
dbfilename "dump-8000.rdb"
cluster-enabled yes
#记录集群的信息
cluster-config-file nodes-8000.config 
# 挂了一个节点集群任然可用
cluster-require-full-coverage no

复制六分份并启动

sed 's/8000/8001/g' redis-8000.conf > redis-8001.conf
sed 's/8000/8002/g' redis-8000.conf > redis-8002.conf
sed 's/8000/8003/g' redis-8000.conf > redis-8003.conf
sed 's/8000/8004/g' redis-8000.conf > redis-8004.conf
sed 's/8000/8005/g' redis-8000.conf > redis-8005.conf
redis-server redis-8000.conf
redis-server redis-8001.conf
redis-server redis-8002.conf
redis-server redis-8003.conf
redis-server redis-8004.conf
redis-server redis-8005.conf

启动成功
在这里插入图片描述
data目录下看到最新的配置
在这里插入图片描述
与其他节点握手,达成联通

redis-cli -p 8000 cluster meet 127.0.0.1 8001
redis-cli -p 8000 cluster meet 127.0.0.1 8002
redis-cli -p 8000 cluster meet 127.0.0.1 8003
redis-cli -p 8000 cluster meet 127.0.0.1 8004
redis-cli -p 8000 cluster meet 127.0.0.1 8005

查看连接信息

redis-cli -p 8000 cluster nodes

在这里插入图片描述
开始分配槽:先写一个脚本

vi addslots.sh 
# 下面是节点的内容##################################################
start=$1
end=$2
port=$3
for slot in `seq ${start} ${end}`
do
  echo "slot:${slot}"
  redis-cli -p ${port} cluster addslots ${slot} #添加槽的命令
done

执行分配槽

sh addslots.sh 0 5461 8000 # 给8000端口分配0到5461的槽 
sh addslots.sh 5462 10922 8001 # 给8001端口分配5462到10922的槽
sh addslots.sh 10923 16383  8002 # 给8002端口分配10923到16383的槽

分配槽信息:
在这里插入图片描述
让7003成为7000的从节点

redis-cli -p 8003 cluster replicate 00fa02f71547052d197bc6ee8c8a2aca2d2ce4f0

查看
在这里插入图片描述
查看槽cluster slots
在这里插入图片描述
集群可用
在这里插入图片描述
官方给也提供了Ruby脚本,可以更加快速的部署cluster

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值