Redis 集群技术介绍

时间:2021-09-15 18:32:20   收藏:0   阅读:34

1. 主从复制(从可以作为备份,故障必须手动切换)

1.1 全量同步

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。

1.2 增量同步

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。

1.3 Redis主从同步策略

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

需要注意:如果多个Slave断线了,需重启时,因为只要Slave启动,就会发送sync请求和主机全量同步,当多个同时出现的时候,可能会导致Master IO剧增宕机。

1.4 部分重新同步

从Redis 2.8开始,如果遭遇连接断开,重新连接之后可以从中断处继续进行复制,而不必重新同步。

1.5 无磁盘复制

使用这种设置时,子进程直接将RDB通过网络发送给从服务器,不使用磁盘作为中间存储。

1.6 配置

slaveof <masterip> <masterport>

1.7 只读从服务器

这个行为是由Redis.conf文件中的 slave-read-only 参数控制的,可以在运行中通过 CONFIG SET 来启用或者禁用。

1.8 限制有N个以上从服务器才允许写入

但是,因为Redis使用的是异步主从复制,没办法确保从服务器确实收到了要写入的数据,所以还是有一定的数据丢失的可能性。

min-slaves-to-write 3
min-slaves-max-lag 10

1.9 通过redis实现服务器崩溃等数据恢复

1.9.1 RDB方式 (默认)

save 900 1 #900秒内有至少1个键被更改则进行快照
save 300 10 #300秒内有至少10个键被更改则进行快照
save 60 10000 #60秒内有至少10000个键被更改则进行快照

RDB文件是经过压缩(可以配置 rdbcompression 参数以禁用压缩节省CPU占用)的二进制格式,所以占用的空间会小于内存中的数据大小,更加利于传输。

1.9.2 AOF方式(类似MySQL数据库二进制日志方式)

appendonly yes

AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:

appendfilename appendonly.aof
auto-aof-rewrite-percentage 100  # 当目前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据
auto-aof-rewrite-min-size 64mb   # 允许重写的最小AOF文件大小
# appendfsync always  # 每次执行写入都会执行同步,最安全也最慢
appendfsync everysec  # 默认,每秒执行一次同步操作
# appendfsync no      # 不主动进行同步操作,而是完全交由操作系统来做(即每30秒一次),最快也最不安全

Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。

此时重新启动Redis后Redis会使用AOF文件来恢复数据,因为AOF方式的持久化可能丢失的数据更少。

到底选择什么呢?下面是来自官方的建议

实际上,当Redis服务器挂掉时,重启时将按照以下优先级恢复数据到内存。

2. 哨兵模式(无法进行主从切换?)

Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。

sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。

Sentinel作用:

3. 集群模式(推荐生产环境使用!)

这是Redis3.0之后,官方推出的server端集群方案。

Redis Cluster并非使用Porxy模式来连接集群节点,而是使用无中心节点的模式来组建集群。

在Cluster出现之前,只有Sentinel保证了Redis的高可用性。

Redis Cluster实现在多个节点之间进行数据共享,即使部分节点失效或者无法进行通讯时,Cluster仍然可以继续处理请求。

若每个主节点都有一个从节点支持,在主节点下线或者无法与集群的大多数节点进行通讯的情况下, 从节点提升为主节点,并提供服务,保证Cluster正常运行。

Redis Cluster的节点分片是通过哈希槽(hash slot)实现的,每个键都属于这16384(0~16383)个哈希槽的其中一个,每个节点负责处理一部分哈希槽。

核心的三个目标:

原文:https://www.cnblogs.com/varden/p/15255580.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!