2022-06-30 18:34:29 12阅读
建议:生产环境下的redis不要修改避免造成数据丢失
AOF的命令记录的频率也可以通过redis.conf文件来配
#表示每执行一次写命令,立即记录到AOF文件
appendsync always
#写命令执行完先放入缓冲区,然后每隔1秒将缓冲区数据写入到AOF文件,是默认方案
appendsync everysec
#写命令执行完先放入缓冲区,由系统决定何时将缓冲区内容写回磁盘
appendsync no
因为AOF是记录命令,所以AOF文件会比RDB文件大很多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。
Redis也会在出发阈值时自动去重写AOF文件,阈值也可以在Redis.conf中配置
#AOF文件比上次文件增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
#AOF文件体积超过多少就触发重写
auto-aof-rewrite-min-size 64mb
全量同步步骤
增量同步步骤
注意:repl_baklog大小有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致尚未备份的数据被覆盖,则无法基于log做增量同步,只能再次全量同步
Sentinel基于心跳机制检测服务状态,每隔1秒向集群的每个实例发送ping命令:
quorun的值最好超过sentinel实例数量的一半
一单发现master故障,sentinel需要在salve中选择一个新的master:
当选中了其中一个slave为新的master后(例如slave1),故障迁移的步骤如下:
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置
spring:
redis:
sentinel:
master: mymaster
nodes:
- 127.0.0.1:27001
- 127.0.0.1:27002
- 127.0.0.1:27003
配置主从读写分离
@Bean
public LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer(){
return configBuilder -> configBuilder.readFrom (ReadFrom.REPLICA_PREFERRED);
}
ReadFrom读取策略
•MASTER:从主节点读取
•MASTER_PREFERRED:优先从master节点读取,master不可用才读取replica
•REPLICA:从slave(replica)节点读取
•REPLICA _PREFERRED:优先从slave(replica)节点读取,所有的slave都不可用才读取master
主从和哨兵可以解决高可用,高并发读的问题,但是依然有两个问题没有解决:
使用分片集群可以解决上述问题
————————————————
版权声明:本文为CSDN博主「许喜朝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xu2414506319/article/details/123783617
2022-06-30 18:34:29 12阅读
建议:生产环境下的redis不要修改避免造成数据丢失
AOF的命令记录的频率也可以通过redis.conf文件来配
#表示每执行一次写命令,立即记录到AOF文件
appendsync always
#写命令执行完先放入缓冲区,然后每隔1秒将缓冲区数据写入到AOF文件,是默认方案
appendsync everysec
#写命令执行完先放入缓冲区,由系统决定何时将缓冲区内容写回磁盘
appendsync no
因为AOF是记录命令,所以AOF文件会比RDB文件大很多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。
Redis也会在出发阈值时自动去重写AOF文件,阈值也可以在Redis.conf中配置
#AOF文件比上次文件增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
#AOF文件体积超过多少就触发重写
auto-aof-rewrite-min-size 64mb
全量同步步骤
增量同步步骤
注意:repl_baklog大小有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致尚未备份的数据被覆盖,则无法基于log做增量同步,只能再次全量同步
Sentinel基于心跳机制检测服务状态,每隔1秒向集群的每个实例发送ping命令:
quorun的值最好超过sentinel实例数量的一半
一单发现master故障,sentinel需要在salve中选择一个新的master:
当选中了其中一个slave为新的master后(例如slave1),故障迁移的步骤如下:
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置
spring:
redis:
sentinel:
master: mymaster
nodes:
- 127.0.0.1:27001
- 127.0.0.1:27002
- 127.0.0.1:27003
配置主从读写分离
@Bean
public LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer(){
return configBuilder -> configBuilder.readFrom (ReadFrom.REPLICA_PREFERRED);
}
ReadFrom读取策略
•MASTER:从主节点读取
•MASTER_PREFERRED:优先从master节点读取,master不可用才读取replica
•REPLICA:从slave(replica)节点读取
•REPLICA _PREFERRED:优先从slave(replica)节点读取,所有的slave都不可用才读取master
主从和哨兵可以解决高可用,高并发读的问题,但是依然有两个问题没有解决:
使用分片集群可以解决上述问题
————————————————
版权声明:本文为CSDN博主「许喜朝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xu2414506319/article/details/123783617