- 全量同步是当第一次从服务器连接上主服务器时进行的同步,在全量同步期间,主服务器还会有新的写操作过来,这时候主服务器会把这些操作放入到缓冲区 。master创建快照并发送给slave(将此期间的写入放入缓冲区)master向slave同步缓冲区的写操作命令同步增量阶段
- 增量同步是全量同步之后的一个正常操作的过程master每执行一个写操作,都会将该命令发送到slave
- 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集群特点集群中的各个实例(节点)彼此互联,通过ping-pong机制节点失效判断(fail): 需要集群中所有的master投票, 经过半数以上的节点检测失效时才生效
- 客户端与Redis节点是直连,不需要经过任何代理
- Redis-cluster把所有物理节点映射到[0-16383]slot上,cluster负责维护node -- slot -- value注:redis集群内置了16384个slot,当客户端保存一个key-value时,redis先对key使用crc16算法算出一个结果,然后把结果对16384取余,Redis会把16384个slot均等的分配到各个节点上 。每个节点都包含了一个各个node的信息
- 集群失效判断如果集群任意master挂掉,且该master没有slave时 。集群挂掉 。因为16384个hash槽不完整集群超过半数的master挂掉,不管是否有slave 。
- 注: 为什么是16384个槽?(自我描述: redis对一个key进行crc16算法, 产生一个16位(bit)的hash值, 那么该算法可以产生65536个值, 但为什么不是65536个槽, 而是16384个槽呢? 原因有几点: 1. 与Redis的心跳机制有关, redis两个节点在发生心跳的时候, 消息头中包含如myslots[CLUSTER_SLOTS/8], 所以如果发送65536个这样的信息, 就需要65536 * 8 * 1024 = 8K, 太大, 浪费带宽; 2. 实际16384个槽已经足够用, 因为当redis的节点超过1000时, 整个集群的效率会非常低, 会造成网络拥堵. 因此作者建议不要超过1000个节点)
推荐阅读
- 什么是工艺花茶,调味茶是什么
- 企业VPN数据传输流量走向解密
- 玫瑰茶的功效与禁忌,玫瑰花茶泡水喝的功效
- 昆仑雪菊的冲泡方法,冲泡小诀窍
- 新疆野生胎菊的功效,由内而外的美
- 丰胸花茶有哪些,茉莉花茶的产地有哪些
- 白梅花的功效与作用,苹果花的功效与作用
- 枸杞茉莉花茶的功效,喝茉莉花茶的好处和功效作用
- 玫瑰花茶搭配大全,玫瑰花茶怎么泡
- 明目花茶搭配大全,巧喝花茶
