Redis 读写分离和哨兵机制

使用场景
  • 单节点的 redis 不能支持很高的并发,需要通过多台机器提高并发能力

读写分离架构图
  • 一般读写分离是一主多从,一台主机,两台从机,当三台还不能够满足并发时,需要再加机器的架构图,如果一台 master 挂多台 salve 节点,master 节点 cpu 负担会偏高,可以通过 slave 再挂 slave 节点,进行数据同步,将数据同步的压力分摊到从节点
一主多从配置
  • 使用 redis 5.0 或以上版本
  • 查看 redis 主从信息
    info replication
  • 配置 redis.conf
    • 主节点不需要配置,配置从节点
    • 从节点配置主节点信息:replicaof masterip masterport
    • 从节点配置主节点密码:masterauth master-password
    • 从节点配置数据是否只读:replica-read-only yes
    • 从节点配置磁盘化复制:repl-diskless-sync no (默认磁盘化复制,如果需要通过无磁盘化复制,配置改成 yes,通过 tcp 通讯复制,内网通讯较好,磁盘不理想的情况下可配置)
    • 无磁盘化数据同步等待时间 repl-diskless-sync-delay 5

哨兵机制
  • redis 的一主多从架构提升了并发能力,但并不是高可用,当 master 节点宕机就无法提供写数据的服务,所以需要通过哨兵机制提供高可用
  • sentinel(哨兵) 用于监控 redis 集群中 master 状态的工具,是 redis 高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些 master 服务的所有从服务,当某个 master 服务宕机后,会把这个 master 下的某个从服务升级为 master 来替代已宕机的 master 继续.工作

哨兵机制配置
  • 创建并配置 sentinel.conf 配置文件
  • 配置 sentinel.conf 文件
    • sentinel 通讯端口
      port 26379
    • sentinel 进程文件
      pidfile “/usr/local/redis/sentinel/redis-sentinel.pid”
    • sentinel 进程目录
      dir “/usr/local/redis/sentinel”
    • 指定 redis 是否要用守护线程的方式启动
      daemonize yes
    • 是否支持远程连接
      protected-mode no
    • sentinel 日志文件
      logfile “/usr/local/redis/sentinel/redis-sentinel.log”
    • 配置哨兵,mymaster 是主节点名称
      sentinel monitor mymaster 127.0.0.1 6379 2
    • 密码
      sentinel auth-pass
    • master 被 sentinel 认定为失效的间隔时间
      sentinel down-after-milliseconds mymaster 30000
    • 剩余的 slaves 重新和新的 master 做同步的并行个数
      sentinel parallel-syncs mymaster 1
    • 主备切换的超时时间,哨兵要去做故障转移,这个时候哨兵也是一个进程,如果他没有去执行,超过这个时间后,会由其他的哨兵来处理
      sentinel failover-timeout mymaster 180000

哨兵常用命令
  • 启动哨兵
    redis-sentinel redis-sentinel.conf
  • 查看 mymaster 下的 master 节点信息
    sentinel master mymaster
  • 查看 mymaster 下的 slaves 节点信息
    sentinel slaves mymaster
  • 查看 mymaster下的哨兵节点信息
    sentinel sentinels mymaster

一主多从和哨兵的缺点
  • 这样的架构能够很大程度提升 redis 的读写能力,但是有个问题是:当 redis 的数据量过大,达到单台机器不能完全存储缓存数据的时候,一主多从的架构就需要借助其他的中间件来实现分布式的存储,例如:codis 或者 twemproxy,将单台机器的数据拆分到多台机器上
  • 随着 redis 不断在发展,redis 也不断有新的版本,现在的 redis 集群模式,可以做到在多台机器上,部署多个 redis 实例,每个实例存储一部分的数据,同时每个 redis 主实例可以挂 redis 从节点,就是说如果 redis 主节点宕机,会自动切换到 redis 从节点
  • 现在 redis 的新版本,基本上都是用 redis cluster,也就是 redis 原生支持的 redis 集群模式

参考文档
  • redis 官方文档:https://redis.io/docs/
  • redis 根目录文件:redis.conf 和 sentinel.conf,里面每个配置都有详细说明
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tytler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值