使用场景
- 单节点的 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
- sentinel 通讯端口
哨兵常用命令
- 启动哨兵
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,里面每个配置都有详细说明
更多推荐
Redis 读写分离和哨兵机制
发布评论