Redis之集群部署、哨兵集群

目录

  • Redis之集群部署、哨兵集群
    • 1.解决redis单线程问题
    • 2.Redis cluster
    • 4.哨兵集群sentinel
    • 5.哨兵组件主要功能

Redis之集群部署、哨兵集群

1.解决redis单线程问题

redis是单线程的,我们现在服务器都是多核的,那不是很浪费?

是的他是单线程的,但是,我们可以通过在单机开多个Redis实例。

2.Redis cluster

既然提到了单机会有瓶颈,那是怎么解决这个瓶颈的?

我们用到了集群的部署方式也就是Redis cluster,并且是主从同步读写分离,类似Mysql的主从同步,Redis cluster 支撑 N 个 Redis master node,每个master node都可以挂载多个 slave node。
这样整个 Redis 就可以横向扩容了。如果你要支撑更大数据量的缓存,那就横向扩容更多的 master 节点,每个 master 节点就能存放更多的数据了

那问题就来了,他们之间是怎么进行数据交互的?以及Redis是怎么进行持久化的?Redis数据都在内存中,一断电或者重启不就木有了嘛?

跟我前面提到的数据持久化的RDB和AOF有着比密切的关系了
我先说下为啥要用主从这样的架构模式,前面提到了单机QPS是有上限的,而且Redis的特性就是必须支撑读高并发的,一台机器又读又写,效率太低,但是让这个master机器去写,数据同步给别的slave机器,他们都拿去读,分发掉大量的请求那是不是好很多,而且扩容的时候还可以轻松实现水平扩容
注:QPS Queries Per Second 是每秒查询数 ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力
slave:附从、奴隶、美[sleɪv]

Redis之集群部署、哨兵集群_第1张图片

回归正题,说下数据怎么同步的:
启动一台slave 的时候,他会发送一个psync命令给master ,如果是这个slave第一次连接到master,他会触发一个全量复制。master就会启动一个线程,生成RDB快照,还会把新的写请求都缓存在内存中,RDB文件生成后,master会将这个RDB**发送给slave的,slave拿到之后做的第一件事情就是写进本地的磁盘,然后加载进内存,然后master会把内存里面缓存的那些新命名都发给slave。
tip:大家需要记得的就是,RDB快照的数据生成的时候,缓存区也必须同时开始接受新请求,不然你旧的数据过去了,你在同步期间的增量数据咋办?是吧?

数据传输的时候断网了或者服务器挂了怎么办啊?

传输过程中有什么网络问题啥的,会自动重连的,并且连接之后会把缺少的数据补上的。

4.哨兵集群sentinel

redis还有其他保证集群高可用的方式么?

有哨兵集群sentinel
哨兵必须用三个实例去保证自己的健壮性的,哨兵+主从并不能保证数据不丢失,但是可以保证集群的高可用
为啥必须要三个实例呢?我们先看看两个哨兵会咋样:

Redis之集群部署、哨兵集群_第2张图片

master宕机了 ,s1和s2两个哨兵只要有一个认为你宕机了就切换了,并且会选举出一个哨兵去执行故障,但是这个时候也需要大多数哨兵都是运行的。
那这样有啥问题呢?M1宕机了,S1没挂那其实是OK的,但是整个机器都挂了呢?哨兵就只剩下S2了,没有哨兵去允许故障转移了,虽然另外一个机器上还有R1,但是故障转移就是不执行。
经典的哨兵集群是这样的:

Redis之集群部署、哨兵集群_第3张图片

M1所在的机器挂了,哨兵还有两个,两个人一看他不是挂了嘛,那我们就选举一个出来执行故障转移不就好了

5.哨兵组件主要功能

小的总结下哨兵组件的主要功能:
1)集群监控:负责监控 Redis master 和 slave 进程是否正常工作。
2)消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
3)故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
4)配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。

你可能感兴趣的:(Redis,redis,数据库,java)