zoukankan      html  css  js  c++  java
  • Redis高可用哨兵模式

    在日常的 Redis 的master-slave模式下,我们一般为了实现读写分离,这样不但可以提高效率,同时在master出现故障时,我们关闭slave的只读模式,让应用去连接slave完成服务的正常使用。Sentinel可以帮助我们自动完成切换。
    Sentinel是独立于Redis-server运行的一个分布式的服务。在Sentinel部署的时候,是不需要修改任何redis的配置的。Sentinel可以在运行过程中,不断的去探测redis集群中master和slave的状态,在判断出有节点故障时,可以通过Sentinel本身的API或者其他应用程序发出通知,多个Sentinel可以通过投票等方式,实现故障转移。把一个其他slave服务器升级为master。用来替换失效的master。最后通过Sentinel的服务返回给客户端一个新地址。保障应用正常运行。

    toc

    Sentinel安装与配置

    这里用不同的端口来区分,就不打开太多服务器了

    Redis服务搭建主从复制,其中Master为192.168.1.1,这里就不演示过程了,不会的出门左拐看Redis主从架构

    Sentinel配置

    在Redis源码包中有Sentinel配置文件的模板,可以复制出来修改也可以不用模板直接写

    port 26379       ## 端口
    daemonize yes      ## 后台启动
    dir /soft/redis/data    ## 工作目录
    logfile "/soft/redis/log/sentinel.log"    ## 日志目录
    sentinel monitor mymaster 192.168.1.1 6379 2   ## 监控master,当判断失效时,至少需要2个sentinel判定master失败才可以。
    sentinel down-after-milliseconds mymaster 10000    ## Sentinel 判断master失效的时间,单位为毫秒。
    sentinel parallel-syncs mymaster 1   # 故障转移后每次有多少个slave向slave发起复制请求。
    sentinel failover-timeout mymaster 60000  #1、同一个Sentinel对同一个master两次tailover的间隔。
    
    #########################我是分割线#########################
    #以下配置是当所有Sentinel节点启动之后,自动写入的配置
    
    //自动发现的两个slave节点
    sentinel konwn-slave mymaster 192.168.1.2 6379
    sentinel konwn-slave mymaster 192.168.1.3 6379
    //自动发现的两个Sentinel节点
    sentinel known-sentinel mymaster 192.168.1.2 26379 814149a8600fede18177b7cc0611a86eab61699c
    sentinel known-sentinel mymaster 192.168.1.3 26379  9ec521108aacc04347b0b5aa36d32680f394dc4b
    sentinel current-epoch 0 #当前配置信息版本,如果配置文件发生变化,版本信息也会变化。

    启动Sentinel

    ## 第一种启动方式(推荐)
    [root@Master ~]# /soft/redis/bin/redis-sentinel /soft/redis/conf/sentlnel.conf 
    ## 第二种启动方式
    [root@Master ~]# /soft/redis/bin/redis-server /soft/redis/conf/sentlnel.conf --sentinel

    三台服务器都配置启动后,查看Sentinel配置文件,多出来发现其他角色信息。

    Sentinel工作原理解释

    1)一般每个Sentinel服务器都需要 每间隔 10s 一次的频率向一直的master和slaves 发送INFO命令。通过这个任务可以发现Slaves节点是否增加或者删除。当一个Master被标记为下线时,会修改为每秒发送一次命令。

    2)每个Sentinel以每秒钟一次的频率向已知的master、slaves以及其他的Sentinel实例发送一个 ping 命令。如果 ping 命令无法得到一个有效的回复,并且距离上次响应时间超过down-after-milliseconds 选项设定的值,则会被标记为主观下线

    3)每个Sentinel会以每2秒一次的频率,通过发布订阅的功能,向其他被它监视的所有主服务器和从服务器的Sentinel发送hello包,信息中包含了Sentinel的IP地址、端口号和运行ID(runid)

    如何发现Redis-Server的Slave

    1.执行任务1,发送 INFO 命令,通过解析 INFO 命令的返回值,发现Slave的节点,并对Slave进行监控。这也就是为什么在Sentinel配置的时候,不需要配置Redis-Server从节点的信息的原因。

    2.信息拓扑 INFO 命令查看到Redis-Server拓扑发生主从切换,或者增加删除节点时,都可以实时更新到Sentinel的监控列表。

    Sentinel如何发现其他节点

    1.执行任务3 每个Sentinel都订阅了被它监视的所有主服务器和从服务器的Sentinel:hello频道,查找之前未出现过的Sentinel(looking for unknown sentinels)。当一个Sentinel发现一个新的Sentinel时,它会将新的Sentinel添加到一个列表中,并与该节点创建连接,这个列表保存了Sentinel已知的,监视同一个主服务器的所有其他Sentinel。

    2.Sentinel发送的信息还包括完整的主服务器的当前配置。如果一个Sentinel包含的主服务器的配置比Sentinel发送的配置要旧,那么这个Sentinel会立即更新配置。

    3.Sentinel节点之间的交换主节点状态信息,会作为后边客观下线以及领导者选举的依据。

    如何判定节点失败

    1.通过以上的任务,我们可以发现新的Redis-Server节点,也可以获取最新信息,以及获取Sentinel的节点信息。

    2.通过定时任务2,每秒钟向Redis-Server的Master以及Slave节点。以及Sentinel的其他节点发送 ping 命令。

    3.通过与每个节点的心跳检测,实现对每个节点的监控(Redis以及Sentinel),这个任务是节点判定失败的重要依据。

    4.例如Sentinel-1发现某个节点相应超过down-after-milliseconds时间段没有有效回复,Sentinel节点会判定为失败和标记下线。这个行为叫做主观下线。

    5.当Sentinel主观下线的节点时redis的master的时候,Sentinel会通过sentinel is master-down-by-addr 命令向其他的Sentinel节点询问对主节点的判断。当超过设定的票数时(我们三个节点,设定票数2,忘记的回顾一下前边配置),该节点会做出客观下线的决定。客观下线一旦判定之后,后边大家就都知道了,就开始切换了。

  • 相关阅读:
    Kali linux 2016.2 的 plyload模块之meterpreter plyload详解
    Kali linux 2016.2(Rolling)的利用MSF攻击windows小案例(exploits + payloads + taegets)(博主推荐)
    Kali linux 2016.2(Rolling)中的payloads模块详解
    Kali linux 2016.2(Rolling)中的Exploits模块详解
    Kali linux 2016.2(Rolling)中的Metasploit如何更新与目录结构初步认识
    MetaSploit攻击实例讲解------社会工程学set攻击(kali linux 2016.2(rolling))(详细)
    访问Storm ui界面,出现Nimbus Summary或Supervisor Summary时有时无的问题解决(图文详解)
    访问Storm ui界面,出现org.apache.storm.utils.NimbusLeaderNotFoundException: Could not find leader nimbus from seed hosts ["master"]. Did you specify a valid list of nimbus hosts for confi的问题解决(图文详解)
    访问Storm ui界面,出现org.apache.storm.utils.NimbusLeaderNotFoundException: Could not find leader nimbus from seed hosts ["master" "slave1"]. Did you specify a valid list of nimbus hosts for confi的问题解决(图文详解)
    [转]W3C 验证 there is no attribute target for this element
  • 原文地址:https://www.cnblogs.com/songguoyou/p/11884192.html
Copyright © 2011-2022 走看看