Redis系列二:redis集群高可用

本文介绍了RedisCluster的分布式解决方案,讨论了其高可用性、虚拟槽分区原理和集群搭建过程,包括手动和自动方式。同时,文章提到了RedisCluster的限制,如键的批量操作和事务支持。此外,还详细阐述了如何进行节点扩容、缩容和故障转移操作。
摘要由CSDN通过智能技术生成

Redis集群的概念:
  RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当一个服务挂了可以快速的切换到另外一个服务,当遇到单机内存、并发等瓶颈时,可使用此方案来解决这些问题

一、分布式数据库概念

  1. 分布式数据库把整个数据按分区规则映射到多个节点,即把数据划分到多个节点上,每个节点负责整体数据的一个子集。比如我们库有900条用户数据,有3个redis节点,将900条分成3份,分别存入到3个redis节点
    在这里插入图片描述
    2. 分区规则:

    常见的分区规则哈希分区和顺序分区,redis集群使用了哈希分区,顺序分区暂用不到,不做具体说明;
    rediscluster采用了哈希分区的“虚拟槽分区”方式(哈希分区分节点取余、一致性哈希分区和虚拟槽分区),其它两种也不做介绍,有兴趣可以百度了解一下

3. 虚拟槽分区(槽:slot)

RedisCluster采用此分区,所有的键根据哈希函数(CRC16[key]&16383)映射到0-16383槽内,共16384个槽位,每个节点维护部分槽及槽所映射的键值数据
哈希函数: Hash()=CRC16[key]&16383 按位与
槽与节点的关系如下
在这里插入图片描述

在这里插入图片描述
redis用虚拟槽分区原因:解耦数据与节点关系,节点自身维护槽映射关系,分布式存储

4. redisCluster的缺陷:

a,键的批量操作支持有限,比如mset, mget,如果多个键映射在不同的槽,就不支持了
b,键事务支持有限,当多个key分布在不同节点时无法使用事务,同一节点是支持事务
c,键是数据分区的最小粒度,不能将一个很大的键值对映射到不同的节点
d,不支持多数据库,只有0,select 0
e,复制结构只支持单层结构,不支持树型结构。

二、集群环境搭建-手动篇

部署结构图:6389为6379的从节点,6390为6380的从节点,6391为6381的从节点
在这里插入图片描述1.在/usr/local/bin/目录下新建一个文件夹clusterconf,用来存放集群的配置文件

  1. 分别修改6379、 6380、 7381、 6389、 6390、 6391配置文件
    以6379的配置为例:
    port 6379 //节点端口
    cluster-enabled yes //开启集群模式
    cluster-node-timeout 15000 //节点超时时间(接收pong消息回复的时间)
    cluster-config-file /usr/localbin/cluster/data/nodes-6379.conf 集群内部配置文件
    其它节点的配置和这个一致,改端口即可

  2. 配置完后,启动6个redis服务

./redis-server clusterconf/redis6379.conf &
./redis-server clusterconf/redis6380.conf &
./redis-server clusterconf/redis6381.conf &
./redis-server clusterconf/redis6389.conf &
./redis-server clusterconf/redis6390.conf &
./redis-server clusterconf/redis6391.conf &
在这里插入图片描述
4. 各节点启动后,使用cluster meet ip port与各节点握手,是集群通信的第一步(关键步骤1:集群搭建-与各节点握手)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值