redis 高可用解决方案 (sentinel,cluster)

sentinel(哨兵)

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,越小,越优先被选中

cluster(集群)

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 更新:数据变更时,先更新数据库,然后更新缓存;

    


你可能感兴趣的:(分布式)