Redis分布式集群--Redis Cluster高可用集群

Redis Cluster

Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用 ( HA ),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是实现数据分片(Data Sharding),不过同样可以实现HA,是官方当前推荐的方案

虽然主从复制和哨兵模式完美的解决了Redis的单机问题,但是Redis仍然存在着以下两个问题:

1、所有的写操作都集中到主服务器上,主服务器CPU压力比较大

2、不管是主服务器还是从服务器,它们都同样保存了redis的所有数据,随着数据越来越多,可能会出现内存不够用的问题

在Redis Sentinel模式中,每个节点需要保存全量数据,冗余比较多,而在RedisCluster模式中,每个分片只需要保存一部分的数据,对于内存数据库来说,还是要尽量的减少冗余。在数据量太大的情况下,故障恢复需要较长时间,另外,内存实在是太贵了

RedisCluster的具体实现细节是采用了Hash槽的概念,集群会预先分配16384个槽,并将这些槽分配给具体的服务节点,通过对Key进行CRC16(key)%16384运算得到对应的槽是哪一个,从而将读写操作转发到该槽所对应的服务节点。当有新的节点加入或者移除的时候,再来迁移这些槽以及其对应的数据。在这种设计之下,我们就可以很方便的进行动态扩容或缩容

Redis分布式集群--Redis Cluster高可用集群_第1张图片

操作流程

添加新节点

加偶数个节点(一主一备),避免单点故障

server1

mkdir /usr/local/redis_cluster

mkdir 700{1..6}

cd 7001

vim redis.conf

port 7001

端口7001,7002,7003,7004,7005,7006

cluster-enabled yes

开启集群

cluster-config-file nodes.conf

集群的配置,配置文件首次启动自动生成 7001,7002,7003,7004,7005,7006

cluster-node-timeout 15000

请求超时 默认15秒,可自行设置

appendonly yes

aof日志开启 有需要就开启,它会每次写操作都记录一条日志

daemonize yes

redis后台运行

redis-server ./redis.conf

目录 7002--7006 上述7001操作,编写配置文件
ps aux
可查看到 7001--7006 全部开启

创建redis-cluster集群

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

yes

redis-cli --cluster check 127.0.0.1:7001

检查所有node
server2为masker
server4为slave

server2

redis-cli -p 7002

shutdown

redis-cli --cluster check 127.0.0.1:7001

slave节点server4自动变为新的master

如果所保存的数据在server2的哈希槽点上,则我们在server4上面也能查找到数据

如果server4也shutdown,则数据不再显示

如需要显示所存在数据,则需要开启server2或server4

或者从新分配哈希槽点,数据会分配在新的server节点上

指定分配哈希槽数量

server1

redis-cli --cluster reshard 127.0.0.1:7001

100(自定义数量)

指定数量

redis-cli --cluster check 127.0.0.1:7001

查看分配数量

注意:

哈希槽数量大小分配不均匀,可能会导致数据同步不一致

平均分配哈希槽数量

server1

redis-cli --cluster rebalance --cluster -threshold 1 --cluster-use-empty-masters 127.0.0.1:7001

redis-cli --cluster check 127.0.0.1:7001

redis-cli -c -p 7001

info

get dataname
查看数据

你可能感兴趣的:(Redis)