1 描述:
在master-slave的一个组群中,sentinel系统用于监视master状态,当master宕机,自动根据规则从slave中选取新的master,这个新的master用以代替旧的master接收请求。
当旧的master再次上线,它会作为新master的slave运行;
2 启动
$ redis-sentinel sentinel.conf
或者
$ redis-server sentinel.conf --sentinel
作为sentinel启动的服务器,客户端可以发送的命令只有PING、SENTINEL、INFO、SUBSCRIBE、UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSCRIBE,启动也不会再加载AOF、RDB文件了
3 配置
sentinel monitor mymaster 127.0.0.1 6379 2 ##监视的主机 ip/端口/将这个master判定失效至少需要2个sentinel同意【1】
sentinel down-after-milliseconds mymaster 60000 ## Sentinel认为服务器已经下线所需要的ms数
sentinel failover-timeout mymaster 180000 ## 故障转移的最大等待时间,ms,如果这个时间内,故障转移还没有执行,则此次转移失败
sentinel parallel-syncs mymaster 1 ## 在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长
4 主观失效和客观失效
主观失效:一个sentinel判断服务器下线,根据down-after-milliseconds的设置值
客观失效:一个sentinel系统判断master服务器下线(达到【1】处的配置值),只有在客观失效的情况下,master服务器才开始执行故障转移(failover)
5 master选举规则
Disconnection time from the master.
Slave priority. ## slave-priority 10,25,100,值越小越优先被选中
Replication offset processed. ##复制偏移量,偏移量越大越优先被选中
Run ID. ##服务器的runId,越小,越优先被选中
1 作用:
是redis提供的分布式数据库方案,通过分片(sharding)进行数据共享,并提供复制和故障转移的功能;
当集群中的某个节点不可达时,可以继续处理命令;
2 集群的数据分片
cluster没有使用一致性hash,而是引入了哈希槽,共计16384个,cluster节点各自负责一部分的哈希槽(hash slot)(每个 key通过CRC16校验后对16384取模来决定放置哪个槽)
当多个key同属于一个分片时,可以同时操作多key,否则,不可以;
3 集群的容错性(主从复制模型)
当一部分节点不可达,而不影响集群的使用,redis使用主从复制模型。即 每个master都有对应的slave,当某个master不可达时,集群会选取它的slave作为新的master来继续提供服务;
4 集群不能保证强一致性(因为出于低延迟和高性能的考虑,主从复制是异步执行的)
5 配置
port 7000
cluster-enabled yes ## 打开服务器的集群模式
cluster-config-file nodes.conf ## 保存节点配置文件的默认路径,文件在集群创建或者修改时自动生成和修改
cluster-node-timeout 5000 ## 节点不可用的最大等待时间
附,缓存更新?
1 命中:当查询从缓存中读取到内容时,直接返回;
2 miss : 从持久层中读取到内容,保存在缓存中并返回;
3 更新:数据变更时,先更新数据库,然后更新缓存;