Redis 高可用架构最佳实践 深藏阁楼爱情的钟 2022-05-29 05:55 160阅读 0赞 **Redis 高可用架构最佳实践** **1. Redis sentinel原理** Sentinel 集群通过给定的配置文件发现 master,启动时会监控 master。通过向 master 发送 info 信息获得该服务器下面的所有从服务器。 Sentinel 集群通过命令连接向被监视的主从服务器发送 hello 信息 (每秒一次),该信息包括 Sentinel 本身的 IP、端口、id 等内容,以此来向其他 Sentinel 宣告自己的存在。 Sentinel 集群通过订阅连接接收其他 Sentinel 发送的 hello 信息,以此来发现监视同一个主服务器的其他 Sentinel;集群之间会互相创建命令连接用于通信,因为已经有主从服务器作为发送和接收 hello 信息的中介,Sentinel 之间不会创建订阅连接。 Sentinel 集群使用 ping 命令来检测实例的状态,如果在指定的时间内(down-after-milliseconds)没有回复或则返回错误的回复,那么该实例被判为下线。 当 failover 主备切换被触发后,failover 并不会马上进行,还需要 Sentinel 中的大多数 Sentinel 授权后才可以进行 failover,即进行 failover 的 Sentinel 会去获得指定 quorum 个的 Sentinel 的授权,成功后进入 ODOWN 状态。如在 5 个 Sentinel 中配置了 2 个 quorum,等到 2 个 Sentinel 认为 master 死了就执行 failover。 Sentinel 向选为 master 的 slave 发送 SLAVEOF NO ONE 命令,选择 slave 的条件是 Sentinel 首先会根据 slaves 的优先级来进行排序,优先级越小排名越靠前。如果优先级相同,则查看复制的下标,哪个从 master 接收的复制数据多,哪个就靠前。如果优先级和下标都相同,就选择进程 ID 较小的。 Sentinel 被授权后,它将会获得宕掉的 master 的一份最新配置版本号 (config-epoch),当 failover 执行结束以后,这个版本号将会被用于最新的配置,通过广播形式通知其它 Sentinel,其它的 Sentinel 则更新对应 master 的配置。 1 到 3 是自动发现机制: 以 10 秒一次的频率,向被监视的 master 发送 info 命令,根据回复获取 master 当前信息。 以 1 秒一次的频率,向所有 redis 服务器、包含 Sentinel 在内发送 PING 命令,通过回复判断服务器是否在线。 以 2 秒一次的频率,通过向所有被监视的 master,slave 服务器发送当前 Sentinel master 信息的消息。 4 是检测机制,5 和 6 是 failover 机制,7 是更新配置机制。 **2. 高可用架构** Redis Sentinel 集群 + 内网 DNS + 自定义脚本 Redis Sentinel 集群 + VIP + 自定义脚本 封装客户端直连 Redis Sentinel 端口 JedisSentinelPool,适合 Java PHP 基于 phpredis 自行封装 Redis Sentinel 集群 + Keepalived/Haproxy Redis M/S + Keepalived Redis Cluster Twemproxy Codis **3. 具体参考链接** http://www.sohu.com/a/150426358\_505802
还没有评论,来说两句吧...