一篇文章读懂redis( 三 )

  • 全量同步是当第一次从服务器连接上主服务器时进行的同步,在全量同步期间,主服务器还会有新的写操作过来,这时候主服务器会把这些操作放入到缓冲区 。master创建快照并发送给slave(将此期间的写入放入缓冲区)master向slave同步缓冲区的写操作命令同步增量阶段
  • 增量同步是全量同步之后的一个正常操作的过程master每执行一个写操作,都会将该命令发送到slave
redis哨兵机制
  • redis主从复制的缺点是当有Redis主服务器进行宕机时,不能进行动态的选举 。需要使用Sentinel机制完成动态选举 。
  • 因此Sentinel进程的作用:监控master的状态(实际上也可以监控slave),在master宕机之后完成动态的选举 。
  • 如果有master或者slave宕机,可以通过脚本向管理员发送通知(短信或邮件) 。即Monitoring 和 Notification.
 
  • sentinel动态选举过程(Automatic failover):检测到master出现异常将其中一个slave复制为新的master当有slave请求master时返回新的master地址注: master和slave的redis.conf,和sentinel.conf都会发生变化,
  • sentinel故障分析过程sentinel会以每秒1次的频率发送ping命令到Master, Slave 和 其他Sentinel若回复ping命令超时(sentinel.conf文件中指定的down-after-milliseconds),则该实例会被标记为SDOWN(主管下线)如果有足够数量(sentinel.conf中指定的)的Sentinel都将该实例标记为SDOWN,则该实例变为ODOWN
  • 监控的主机名称为master,地址和IP,当有2个quorum认为mymaster失联时,则标记为ODOWN sentinel monitor mymaster 127.0.0.1 6379 2注意:虽然没有写监控slave,但是slave是被自动检测的虽然指定了ODOWN的数量,但是还是需要大多数的Sentinel同意来开启故障转移
 
sentinel一些配置
  • port 26379(default)
  • dir /tmp(工作目录)
  • 当实例开启了requirepass foobared,需要在sentinel.conf中添加如下配置sentinel auth-pass <master-name> <password>sentinel down-after-milliseconds <master-name> <milliseconds>sentinel parallel-syncs <master-name> <numreplicas> 当master发生故障时,最多有几个slave同时对master进行更新
  • sentinel failover-timeout mymaster 180000(这个超时时间有4种用途)所有slave对新的master进行更新时所需的最大时间,如果超过这个时间,则parallel-syncs无效,变为一次只能有一个更新同一个Sentinel对同一个master两次failover之间的间隔时间取消一个正在failover的实例所允许的最大时间(取消的前提是配置文件还未发生变化)slave从一个错误的master同步数据到纠正为从正确的master同步数据所需要的最大时间
  • 脚本脚本返回1,则会重试,默认重试10次脚本返回值 > 2,不重试脚本执行中中断,则和返回1效果一样当一个脚本执行超过60秒,则会被一个SIGKILL信号终止,然后重试
  • 通知型脚本sentinel notification-script mymaster /var/redis/notify.sh当系统有sdown或者ODOWN时会向管理员发送短信或邮件,该通知接收两个参数,事件类型和事件描述注:如果配置了该脚本,那么该脚本必须存在且是可执行的,否则无法启动Sentinel
  • 客户端重新配置主节点参数脚本sentinel client-reconfig-script <master-name> <script-path>当master发生改变,执行该脚本通知客户端主机的新地这些参数将会被传递到该脚本:<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>state 一直是 failoverrole 是 observer或者leaderfrom-:老的master的IP和端口号,to-:新的master的IP和端口号
Redis 集群redis 集群保证了高可用