Redis集群

Redis有三种集群方式:主从复制,哨兵模式和集群。

 

1 主从复制

在主从复制中,数据库分为俩类,主数据库(master)和从数据库(slave)。其中主从复制有如下特点:

  •     主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库
  •     从数据库一般都是只读的,并且接收主数据库同步过来的数据
  •     一个master可以拥有多个slave,但是一个slave只能对应一个maste

主从复制工作机制(全量复制和增量复制)

当slave启动后,主动向master发送SYNC命令。master接收到SYNC命令后在后台执行bgsave命令保存快照(RDB持久化)和缓存保存快照这段时间的命令,然后将保存的快照文件和缓存的命令发送给slave。slave接收到快照文件和命令后加载快照文件和缓存的执行命令。复制初始化后,master每次接收到的写命令都会同步发送给slave,保证主从数据一致性。

主从配置

redis默认是主数据,所以master无需配置,我们只需要修改slave的配置即可。

//设置需要连接的master的ip端口:
slaveof 192.168.0.107 6379

//连接成功进入命令行后,可以通过以下命令行查看连接该数据库的其他库信息:
info replication

 

 

 缺点:不提供容错和恢复功能,意思是Master挂了后,不会自动选举Master。

 

2 哨兵

哨兵的作用是监控 redis系统的运行状况,他的功能如下:

  • 监控主从数据库是否正常运行
  • master出现故障时,自动将slave转化为master
  • 多哨兵配置的时候,哨兵之间也会自动监控
  • 多个哨兵可以监控同一个redis

哨兵工作机制

哨兵进程启动时会读取配置文件的内容,通过sentinel monitor master-name ip port quorum查找到master的ip端口。一个哨兵可以监控多个master数据库,只需要提供多个该配置项即可。

哨兵启动后,会与要监控的master建立俩条连接:

  •     一条连接用来订阅master的_sentinel_:hello频道与获取其他监控该master的哨兵节点信息
  •     另一条连接定期向master发送INFO等命令获取master本身的信息

与master建立连接后,哨兵会执行三个操作,这三个操作的发送频率都可以在配置文件中配置:

  •     定期向master,slave发送INFO命令
  •     定期向master,slave的_sentinel_:hello频道发送自己的信息
  •     定期向master,slave和其他哨兵发送PING命令

哨兵配置

哨兵配置的配置文件为sentinel.conf,设置主机名称,地址,端口,以及选举票数即恢复时最少需要几个哨兵节点同意。

//只要配置需要监控的master就可以了,哨兵会监控连接该master的slave。
sentinel monitor mymaster 192.168.0.107 6379 1

//启动哨兵节点:
redis-server sentinel.conf --sentinel &

//可以在任何一台服务器上查看指定哨兵节点信息:
bin/redis-cli -h 192.168.0.110 -p 26379 info Sentinel

 

 

 缺点:无法在线扩容。

 

3 集群

使用集群,只需要将每个数据库节点的cluster-enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行。

主从模式实现了数据的热备份,哨兵模式实现了redis的高可用。但是有一个问题,这两种模式都没有解决,这两种模式都只能有一个master节点负责写操作,在高并发的写操作场景,master节点就会成为性能瓶颈。

如图所示集群模式其实就是多个主从复制的结构组合起来的,每一个主从复制结构可以看成一个节点,那么上面的Cluster集群中就有三个节点。

 

缺点:

1)客户端的实现会更加复杂

2)Slave节点只是一个冷备节点,不提供分担读操作

3)对于Redis里面的批量操作指令会有限制

 

 

 

资源:

https://blog.csdn.net/sun_lm/article/details/123467103

https://bukecode.blog.csdn.net/article/details/79931791

 

posted @ 2022-11-22 21:01  NingShare  阅读(66)  评论(0编辑  收藏  举报