简介
集群模式是实际使用最多的模式。
Redis Cluster是社区版推出的Redis分布式集群解决方案,主要解决Redis分布式方面的需求,比如当遇到单机内存,并发和流量等瓶颈时,Redis Cluster能祈祷很好的负载均衡的目的。
为什么使用redis-cluster?
为了在大流量访问下提供稳定的业务,集群化是存储的必然形态
未来的发展趋势肯定是云计算和大数据的紧密集合
只有分布式架构能满足要求
Redis Cluster集群描述
Redis集群搭建方案:
1、Twitter开发的twemproxy
2、豌豆荚开发的codis
3、redis官方的redis-cluster redis3.0版本后支持
Redis Cluster采用无中心结构,每个节点保存数据和整个集群状态 ,每个节点和其他所有节点连接。
Redis Cluster集群节点最小配置6个节点以上(3主3从),其中主节点提供读写操作,从节点作为备用节点,不提供请求,只作为故障转移使用。
Redis Cluster集群特点
1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
2、节点的fail是通过集群中超过半数的节点检测失效时才生效
3、客户端与redis节点直连,不需要中间proxy层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
4、redis-cluster把所有的物理节点映射到【0-16383】slot上(不一定是平均分配),cluster负责维护
5、Redis集群预分好16384个哈希值,当需要在redis集群中放置一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在0-16383之间的哈希值,redis会根据节点数最大致均等的将哈希值映射到不同的节点
Redis Cluster容错
容错性,是指软件检测应用程序所运行的软件或硬件中发生的错误并从错误中恢复的能力,通过可以从系统的可靠性、可用性、可测性等几方面来衡量。
1、什么时候判断master不可用?
投票机制,投票过程是集中中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉。
2、什么时候整个集群不可用(cluster_state:fail)?
如果集群任意master挂掉,且当前master没有slave,集群进入fail状态,也可以理解成集群的slot映射【0-16383】不完整时进入fail状态,如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态
Redis Cluster节点分配
Redis Cluster采用虚拟槽分区,所有的键根据哈希函数映射到0-16383个整数槽内,每个节点负责维护一部分槽以及槽所映射的键值数据
三个主节点分别是A、B、C三个节点,他们可以是一台机器上的三个端口,也可以是三台不同的服务器,那么采用哈希槽(hash slot)的方式来分配16384个slot的话,他们三个节点分别承担的slot区间是:
节点A:覆盖 0-5460
节点B:覆盖5461-10922
节点C:覆盖10923-16383
Redis Cluster集群搭建
集群搭建参考官网:http://redis.io/topics/cluster-tutorial
redis集群需要至少三个master节点,每个master再搭建一个slave节点,总共6个redis节点,这里用一台机器部署6个redis实例,三主三从,搭建集群步骤如下:
1、创建Redis节点安装目录
mkdir redis-cluster
2、在redis-cluster目录下,创建7000-7005个文件夹
mkdir 7000 7001 7002 7003 7004 7005
3、将redis.conf分别拷贝到7000-7005文件夹下
cd /home/redis/app/redis-6.0.5
cp redis.conf /home/redis/app/redis-cluster/700*
4、修改Redis配置文件
#关闭保护模式
protected-mode no
port 7000
#开启集群模式
cluster-enabled yes
cluster-config-file nod