zoukankan      html  css  js  c++  java
  • redissentinel哨兵集群简单部署

    Redis Sentinel的主要功能

    Sentinel 的主要功能包括 主节点存活检测、主从运行情况检测、自动故障转移 (failover)、主从切换。Redis 的 Sentinel 最小配置是 一主一从。

    Redis 的 Sentinel 系统可以用来管理多个 Redis 服务器,该系统可以执行以下四个任务:

    监控

    Sentinel 会不断的检查 主服务器 和 从服务器 是否正常运行。

    通知

    当被监控的某个 Redis 服务器出现问题,Sentinel 通过 API 脚本 向 管理员 或者其他的 应用程序 发送通知。

    自动故障转移

    当 主节点 不能正常工作时,Sentinel 会开始一次 自动的 故障转移操作,它会将与 失效主节点 是 主从关系 的其中一个 从节点 升级为新的 主节点,并且将其他的 从节点 指向 新的主节点。

    配置提供者

    在 Redis Sentinel 模式下,客户端应用 在初始化时连接的是 Sentinel 节点集合,从中获取 主节点 的信息。

    主观下线和客观下线

    默认情况下,每个 Sentinel 节点会以 每秒一次 的频率对 Redis 节点和 其它 的 Sentinel 节点发送 PING 命令,并通过节点的 回复 来判断节点是否在线。

    主观下线

    主观下线 适用于所有 主节点 和 从节点。如果在 down-after-milliseconds 毫秒内,Sentinel 没有收到 目标节点 的有效回复,则会判定 该节点 为 主观下线。

    客观下线

    客观下线 只适用于 主节点。如果 主节点 出现故障,Sentinel 节点会通过 sentinel is-master-down-by-addr 命令,向其它 Sentinel 节点询问对该节点的 状态判断。如果超过 个数的节点判定 主节点 不可达,则该 Sentinel 节点会判断 主节点 为 客观下线。

    架构图如下

    master 、slave配置文件内容

    # cat 6380/redis-6380.conf
    
    port 6380
    logfile ""
    #调试时可打开日志
    #logfile "./redis-6380"
    #守护进程模式
    daemonize yes
    bind 127.0.0.1
    
    
    # cat 6381/redis-6381.conf 
    
    port 6381
    logfile "./redis-6381"
    daemonize yes
    replicaof 127.0.0.1 6380
    bind 127.0.0.1
    

    sentinel 配置文件内容

    cat 26379/redis-sentinel.conf
    
    
    port 26379
    # 守护进程模式
    daemonize yes
    pidfile /var/run/redis-sentinel.pid
    logfile ""
    #调试时可打开日志
    #logfile /var/log/redis/sentinel.log
    dir /tmp
    # 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
    # (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
    # slaves是自动发现,所以你没必要明确指定slaves。
    sentinel monitor mymaster 127.0.0.1 6380 2
    # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    # 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes
    
    cat 26380/redis-sentinel.conf
    
    port 26380
    daemonize yes
    pidfile /var/run/redis-sentinel.pid
    logfile /var/log/redis/sentinel.log
    dir /tmp
    sentinel monitor mymaster 127.0.0.1 6380 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes
    bind 127.0.0.1
     
    cat 26381/redis-sentinel.conf
    
    port 26381
    daemonize yes
    pidfile /var/run/redis-sentinel.pid
    logfile /var/log/redis/sentinel.log
    dir /tmp
    sentinel monitor mymaster 127.0.0.1 6380 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel deny-scripts-reconfig yes
    bind 127.0.0.1
    

    启动各服务

    redis-server 6380/redis-6380.conf 
    redis-server 6381/redis-6381.conf 
    redis-server 26379/redis-sentinel.conf --sentinel
    redis-server 26380/redis-sentinel.conf --sentinel
    redis-server 26381/redis-sentinel.conf --sentinel
    #启动后配置文件会被修改
    

    验证集群状态

    #连接到sentinel节点
    
    redis-cli -h 127.0.0.1 -p 26381
    
    #查询主节点状态
    
    127.0.0.1:26381> SENTINEL get-master-addr-by-name mymaster
    1) "127.0.0.1"
    2) "6380"
    
    
    127.0.0.1:26381> SENTINEL slaves mymaster
    127.0.0.1:26381> SENTINEL sentinels mymaster
    #第一个将提供有关连接到主服务器的从服务器的类似信息,
    #第二个将提供有关其他Sentinel的信息。
    
    #查询哨兵状态
    
    127.0.0.1:26381> info sentinel
    # Sentinel
    
    sentinel_masters:1
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
    master0:name=mymaster,status=ok,address=127.0.0.1:6380,slaves=1,sentinels=3
    
    #模拟故障  关闭主节点进程
    #再次查询
    
    127.0.0.1:26381> SENTINEL get-master-addr-by-name mymaster
    1) "127.0.0.1"
    2) "6381"
    
    #成功切换
    #验证成功
    
    

    参考资料

    https://www.cnblogs.com/bingshu/p/9776610.html 博客
    https://redis.io/topics/sentinel 官网资料

  • 相关阅读:
    软件开发各列阶段需要达到的目标和生成的成果
    SQL Server 2005 Express附加数据库为“只读”的解决方法
    System.Web.HttpException: Request timed out.
    [收藏]javascript keycode大全
    MS SQL Server中的CONVERT日期格式化大全
    转贴 对于大型公司项目平台选择j2ee的几层认识(一)
    项目经理:做好项目开始阶段的九条经验(1) 项目 技术应用
    .Net Core 实现账户充值,还款,用户登录(WebApi的安全)
    JS如何通过月份,计算月份相差几个月
    .Net core Api后台获取数据,异步方法中,数据需采用Linq分页
  • 原文地址:https://www.cnblogs.com/66li/p/12058737.html
Copyright © 2011-2022 走看看