读写分离
单机redis qps大概上万到几万不等
通过读写分离达到10万+qps
架构一主多从,master负责写,slave负责读
数据从master同步到slave
可以水平扩容
replication
master异步复制到slave
一个master可以配置多个slave
slave可以连接其他slave
slave复制不会block master工作
slave复制过程中,读操作使用旧数据,复制完成时,需要删除旧数据集加载新数据集,此时对外暂停服务
slave横向扩容提高读吞吐量
master需要做持久化,否则master宕机重启所有slave清空
主从复制原理
master开启线程,rdb发送给slave,slave把磁盘上的rdb加载到内存
master内存缓存新数据,发送给slave
第二次连接只会发送slave缺少的数据
端点续传
slave从上次复制的offset开始复制
无磁盘化复制
master不落地磁盘
# 开启无磁盘化复制
repl-diskless-sync yes
# 等待时长
repl-diskless-sync-delay 5
过期key处理
slave不会过期key,master过期key或者通过lru淘汰key,模拟del命令发送给slave
主从深入剖析
slave内部定时任务check是否有master需要socket连接
如果master配置了requirepass,则slave发送masterauth口令认证
master启动全量复制
master接收新数据异步发送给slave
master保存每个slave的offset
slave发现master runid变化触发全量复制
千兆网卡一般每秒100mb,6g文件很可能超过60秒,slave会认为传送失败,需要调大timeout
主从架构部署
# 从节点配置
slaveof redis-01 6379
# 绑定ip
bind 192.168.68.102
# 从节点强制接收请求(默认开启)
slave-read-only yes
# 从节点配置主节点口令
masterauth redis-pass
# 主节点配置口令
requirepass redis-pass
# 绑定ip
bind 192.168.68.101
# 分别启动主节点和从节点redis
# 主节点redis-cli指定口令
redis-cli -a redis-pass
# 主节点设置key后从节点可以get key
qps压测
使用redis-benchmark
redis-benchmark -h 127.0.0.1
生产环境网络请求本身就有开销,redis吞吐不一定这么高
复杂操作\大串数据拼接
主从架构99.99%高可用
slave挂掉不会影响可用性
master挂掉系统不可用
redis高可用,主备切换,把某个slave转化为master
sentinel node监控master
网友评论