Docker搭建redis集群

当我们缓存数据量比较大时,如何实现能?

3种:

1.哈希取余分区

优点: 简单粗暴,直接有效,只需要预估好数据规划好节点;

缺点:进行扩容或者缩容就比较麻烦

2.一致性哈希算法分区

优点

一致性哈希算法的容错性

容错性

假设Node C宕机,可以看到此时对象A、B、D不会受到影响,只有C对象被重定位到Node D。一般的,在一致性Hash算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间数据,其它不会受到影响。简单说,就是C挂了,受到影响的只是B、C之间的数据,并且这些数据会转移到D进行存储。

一致性哈希算法的扩展性

扩展性

数据量增加了,需要增加一台节点NodeX,X的位置在A和B之间,那收到影响的也就是A到X之间的数据,重新把A到X的数据录入到X上即可,不会导致hash取余全部数据重新洗牌。

缺点

一致性哈希算法的数据倾斜问题

Hash环的数据倾斜问题

一致性Hash算法在服务节点太少时,容易因为节点分布不均匀而造成数据倾斜(被缓存的对象大部分集中缓存在某一台服务器上)问题

3.哈希槽分区

在数据和节点之间加入了一层,把这层称为哈希槽(slot),用于管理数据和节点之间的关系

3主3从redis集群配置

前提已经拉取redis(6.0.8)镜像:

 关闭防火墙+启动docker后台服务

新建6个docker容器redis实例

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382 
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383 
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384 
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385 
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

执行结果:

 进入容器:docker exec -it redis-node-1 /bin/bash

ip为自己真实ip

--cluster-replicas 1 表示为每个master创建一个slave节点

redis-cli --cluster create 172.21.64.23:6381 172.21.64.23:6382 172.21.64.23:6383 172.21.64.23:6384 172.21.64.23:6385 172.21.64.23:6386 --cluster-replicas 1

 

 上图为3主3从

链接进入6381作为切入点,查看集群状态

链接进入6381作为切入点,查看节点状态

redis-cli -p 6381

cluster info

 

cluster nodes

 如果仅仅使用redis-cli -p 6381进入redis中是单机版,但是现在使用的是集群,所以要使用redis-cli -p 6381 -c

 查看集群信息:redis-cli --cluster check 172.21.64.:6381

 主从容错切换迁移

如果有一台主机down机,如:docker stop redis-node-1
进入docker exec -it redis-node-2 /bin/bash查看

查看上图中,redis-node-1停机后,它的从机(redis-node-6)升为master
如果想要恢复之前的redis-node-1为主,redis-node-6为从机,需要以下步骤:

启动:docker start redis-node-1
关闭:docker stop redis-node-6
重新启动:docker start redis-node-6
等一会,查看

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值