主从复制以及哨兵模式可以提高读的并发,但是单个master容量有限,数据达到一定程度会有瓶颈,这个时候可以通过水平扩展为多master-slave成为集群,支持海量数据,实现高可用与高并发。
哨兵模式其实也是一种集群,他能够提高读请求的并发,但是容错方面可能会有一些问题,比如master同步数据给slave的时候,这其实是异步复制吧,这个时候master挂了,那么slave上的数据就没有master新,数据同步需要时间的,1-2秒的数据会丢失。master恢复并转换成slave后,新数据则丢失。
构建Redis集群,需要至少3个节点作为master,以此组成一个高可用的集群,此外每个master都需要配备一个slave,所以整个集群需要6个节点,这也是最经典的Redis集群,也可以称之为三主三从,容错性更佳。下面我使用了六台虚拟机做演示。
# 开启集群模式 cluster-enabled yes # 每一个节点需要有一个配置文件,需要6份。每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由redis自己维护,我们不用管。如果你要重新创建集群,那么把这个文件删了就行 cluster-config-file nodes-6379.conf # 超时时间,超时则认为master宕机,随后主备切换 cluster-node-timeout 5000 # 开启AOF appendonly yes
如果启动过程出错,把rdb等文件删除清空
##### # 注意1:如果你使用的是redis3.x版本,需要使用redis-trib.rb来构建集群,最新版使用C语言来构建了,这个要注意 # 注意2:以下为新版的redis构建方式 ##### # 创建集群,主节点和从节点比例为1,1-3为主,4-6为从,1和4,2和5,3和6分别对应为主从关系,这也是最经典用的最多的集群模式 redis-cli --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1
slots:槽,用于装数据,主节点有,从节点没有
# 任意一个节点都可执行 redis-cli -a 密码 --cluster check 192.168.10.120:6379
master节点有槽,slave没有,槽是用来存储缓存数据的,槽总共有16384个,平均分配给每个master,一个缓存数据进来,会根据它的key的哈希算法 (hash(key) % 16384),来得到一个数值,这个数据就会存到对应数值的槽里面。
可以选任意一个节点执行
redis-cli -c -a 密码 -h 192.168.10.120 -p 6379
进入客户端后
# 查看集群信息 cluster info # 查看节点信息 cluster nodes
在当前节点下keys *
命令只能查看本节点存储的key,看不到其他节点的,但是通过get key
命令是可以获取到整个集群中的值的,不限于本节点。set key value
命令也是针对整个集群的数据存储,get和set命令会重定向到对应节点中。
spring: redis: password: 123456 cluster: nodes: 192.168.10.118:6379,192.168.10.119:6379,192.168.10.120:6379,192.168.10.121:6379,192.168.10.122:6379,192.168.10.123:6379