redis分布式存储---哈希槽(实践篇之容错、扩容、缩容)

 redis针对大数据量做缓存的三种解决方案:

1、哈希取余分区:哈希取余分区_paper@planes的博客-CSDN博客_哈希取余..

2、一致性哈希算法分区:一致性哈希算法分区_paper@planes的博客-CSDN博客_一致性哈希分区

3、哈希槽分区:分布式存储---哈希槽的概念_paper@planes的博客-CSDN博客_哈希槽

正文:

  1、docker 3主 3从redis集群配置

         1、新建6个docker容器实例 

docker run -d --name redis-node-1 --net host --privileged=true -v /home/redis/share/redis-node-1:/data redis:latest --cluster-enabled yes --appendonly yes --port 6381 
(--net host:使用宿主机的IP和端口(默认),--cluster-enabled yes 是否开启集群) 
docker run -d --name redis-node-2 --net host --privileged=true -v /home/redis/share/redis-node-2:/data redis:latest --cluster-enabled yes --appendonly yes --port 6382 
docker run -d --name redis-node-3 --net host --privileged=true -v /home/redis/share/redis-node-3:/data redis:latest --cluster-enabled yes --appendonly yes --port 6383 
docker run -d --name redis-node-4 --net host --privileged=true -v /home/redis/share/redis-node-4:/data redis:latest --cluster-enabled yes --appendonly yes --port 6384 
docker run -d --name redis-node-5 --net host --privileged=true -v /home/redis/share/redis-node-5:/data redis:latest --cluster-enabled yes --appendonly yes --port 6385 
docker run -d --name redis-node-6 --net host --privileged=true -v /home/redis/share/redis-node-6:/data redis:latest --cluster-enabled yes --appendonly yes --port 6386

        2、进入容器redis-node-1并为6台机器构建集群关系

                1、进入容器

                2、构建主从关系

                        进入docker以后执行以下命令:

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

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

                        三台主节点

                         16384个hash槽全部分发完成

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

 2、主从容错切换迁移

        1、主6381和从机切换,先停止主机6381

        2、再次查看集群信息

        3、重启6381

        4、查看集群状态

                         重启后6381还是从机

3、主从扩容案例(三主三从变为四主四从)

        1、新建 6387、6388两个节点+新建后启动+查看是否8节点

docker run -d --name redis-node-7 --net host --privileged=true -v /home/redis/share/redis-node-7:/data redis:latest --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /home/redis/share/redis-node-8:/data redis:latest --cluster-enabled yes --appendonly yes --port 6388

        2、进入6387容器实例内部 

        3、将新增的6387节点(空槽号)作为master节点加入原集群 

                redis-cli --cluster add-node 自己实际的IP地址:6387 集群IP地址6381      

                

         4、检查集群情况第一次

        5、重新分派槽号 

                redis-cli --cluster reshard IP地址:端口号 16384/4=4096   平均分配

         6、检查集群情况第二次clear

                三台master机器每台匀出一点组成4096

         7、为主节点6387分配从节点6388

                redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点id

                 new node added correctly

4、主从缩容(四主四从变为三主三从)

        1、先清除节点6388

                 redis-cli --cluster del-node ip:从机port 从机节点id

         2、清出来的槽号重新分配

                 清洗完后6387变为6381的从节点 

        3、再删除6387            

       

         4、恢复成3主3从

 

                                                                                            

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言基于Redis实现的分布式限流是一种常见的解决方案,可以有效地控制系统的并发访问流量,防止系统被过多的请求压垮。 首先,分布式限流需要使用Redis的计数器功能。通过对每个请求进行计数,并设置一个时间窗口,可以统计在该窗口内的请求次数。当请求次数超过某个阈值时,可以拒绝该请求或者进行降级处理。 其次,为了保证分布式限流的准确性和高效性,需要使用Redis的原子操作,例如INCR、EXPIRE等。INCR命令可以原子地将计数器的值加1,并返回加1后的结果,而EXPIRE命令可以设置计数器的过期时间。通过这些原子操作,可以在多个节点之间共享计数状态,并且保证计数器的同步和高效性。 此外,为了保证系统的稳定性和可靠性,需要考虑设置适当的限流阈值和时间窗口大小。根据系统的负载情况和性能需求,可以调整这些参数,实现对系统流量的合理控制。 在实际应用中,可以使用Go语言的Redis客户端连接Redis服务器,并通过相关命令操作计数器。同时,还可以结合其他的组件和技术,如分布式锁、消息队列等,增强系统的稳定性和可扩展性。 总之,Go语言基于Redis实现的分布式限流是一种可行且有效的解决方案,可以帮助我们应对大流量的并发请求,保证系统的稳定运行。通过合理设定限流参数和灵活运用Redis的功能,我们可以实现流量控制、降级和保护系统免受恶意请求的攻击。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值