Docker容器技术--安装Redis集群

Docker容器技术–安装Redis集群

概念及原理

何为Redis集群

Redis集群是一个分布式系统,通过对Redis的水平扩容,实现了对大量数据的存储和高效处理。广泛应用于各种需要高性能高可用性高扩展性的场景中。

功能实现原理

  • Redis集群通过启动多个Redis节点,并将整个数据库分布存储在这些节点中,每个节点存储总数据的一部分。这种设计可以有效地避免单点故障,提高系统的可用性和容错性。

  • 在集群中,每个节点都知道彼此之间的关系,并知道自己的角色和在集群环境中的位置。它们之间可以交互和通信,如通过ping pong等方式保持联系。客户端只需要和集群中的任意一个节点建立连接,就可以与整个集群进行交互。

  • Redis集群使用哈希槽机制来自动将数据分配到不同的节点上,保证每个节点上存储的数据量不会过大,并实现数据自动分片负载均衡等功能。这种机制可以有效地提高数据的处理效率,适用于实时计算、高并发队列和分布式锁等场景。

  • 在搭建Redis集群时,常用的结构是三主三从,即三个主节点和三个从节点。每个主节点都配备一个从节点,用于在主节点出现故障时进行故障恢复。这种结构具有较好的容错性,能够确保系统的稳定运行。

集群安装

  • 首先新建6个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
    
  • 进入容器redis-node-1,并为6台机器构建集群关系

    进入容器

    docker exec -it redis-node-1 /bin/bash
    

    构建主从关系

    redis-cli --cluster create 192.168.1.3:6381 192.168.1.3:6382 192.168.1.3:6383 192.168.1.3:6384 192.168.1.3:6385 192.168.1.3:6386 --cluster-replicas 1
    	192.168.1.3:宿主机IP
    	--cluster-replicas 1:表示为每个master创建一个slave节点
    
  • 查看集群状态
    连接进入6381作为切入点

    redis-cli -p 6381
    

    查看集群状态

    cluster info			//查看集群信息
    cluster nodes		//查看节点信息
    

验证Redis集群

主从扩容

  • 新建两个节点
    新建6387、6388两个节点
    docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
    
    docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
    
  • 将新增的6387节点作为加入集群
    docker exec -it redis-node-7 /bin/bash
    redis-cli --cluster add-node 192.168.1.3:6387 192.168.1.3:6381
    
  • 重新分配槽号
    为何要重新分配槽号
    因为新加入的节点都是master,并且不会分配任何slot槽位,我们要手动为新节点分配hash槽。而且由于重新分配成本太高,所以前3个节点会各自匀出来一部分给新节点,例如:从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387
    redis-cli --cluster reshard 192.168.1.3:6381
    
  • 为主节点分配从节点
    为主节点6387分配从节点6388
    redis-cli --cluster add-node 192.168.1.3:6388 192.168.1.3:6387 --cluster-slave --cluster-master-id xxx
    	xxx:6387的编号,按照实际情况填写
    
  • 检查集群情况
    redis-cli --cluster check 192.168.1.3:6381
    

主从缩容

  • 目的:使一对主从节点下线
  • 首先检查集群情况,获得6388节点ID
    redis-cli --cluster check 192.168.1.3:6381
    
  • 删除从节点
    redis-cli --cluster del-node 192.168.111.147:6388 xxx
    	xxx:6388节点的ID
    
    此时可再次检查一下集群,可发现6388节点已被删除
  • 清空主节点槽号,并重新分配
    将6387的槽号清空,并分配个节点6381
    redis-cli --cluster reshard 192.168.1.5:6381 --cluster-from “6387节点ID” --cluster-to ”6381节点ID“ --cluster-slots 8192
    	--cluster-slots 8192:6387节点上共有8192个槽位
    
  • 删除主节点
    redis-cli --cluster del-node 192.168.111.147:6387 xxx
    	xxx:6387节点的ID
    
  • 最后再检查一次集群清空,看是否已删除两个节点
    redis-cli --cluster check 192.168.1.3:6381
    
  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值