zoukankan      html  css  js  c++  java
  • Redis学习笔记(六、哨兵)

    目录:

    • 基本概念
    • 环境部署
    • 哨兵原理
    • 哨兵命令

    基本概念:

    1、什么是哨兵

    我们先从字面意思来了解哨兵,哨兵是对执行警戒任务的士兵的统称;在redis中哨兵也是一样,他监控着redis服务器的状态。

    2、为什么要有哨兵

    当redis主服务器发生故障时我们需要进行故障转移,也就是将从节点晋升为主节点;但这个过程有些繁琐,且容易出错,而且运维人员也不可能一天24小时守着;针对于这一些问题,我们redis的开发人员便创造了哨兵,已解决这类问题。

    )哨兵故障转移的过程:发现故障 -> 选出新节点 -> 复制新节点

    a、主节点发生故障时,客户端连接主节点失败,其它的从节点与主节点的复制中断

    b、当超过一定数量的从节点发现主节点宕机后,会从这些从节点中选举出一个节点,并对其执行slaveof no one命令使其成为一个新的主节点

    c、当从节点晋升主节点时会更新应用方主节点信息,并重启应用方

    d、其它的从节点会取去复制这个新的主节点,slaveof host port

    e、待原来的主节点恢复后,便会复制新的主节点

    自动化故障转移需要解决的问题

    a、判断节点不可达的机制是否健全和标准

    b、如果有多个从节点,怎样保证只有一个晋升为主节点

    c、通知客户端有新的主节点的机制是否健全

    3、哨兵架构

    环境部署:

    方案:一主两从三哨兵

    1、文件配置

    )配置主节点;启动命令:redis-server redis-6379.conf

    # 已守护进程方式运行

    daemonize yes

    # 配置日志文件

    logfile 6379.log

    # 配置RDB文件

    dbfilename dump-6379.rdb

    )配置从节点;启动命令:redis-server redis-6380.conf,redis-server redis-6381.conf

    # 已守护进程方式运行

    daemonize yes

    # 配置日志文件

    logfile 6380.log

    # 配置RDB文件

    dbfilename dump-6380.rdb

    # 设置主节点

    slaveof 127.0.0.1 6379

     

    6381与6380同理

    )配置sentinel节点;启动命令:redis-server sentinel-26379.conf --sentinel

    port 26379

    daemonize yes

    logfile "26379.log"

    # 监控127.0.0.1:6379这个主节点,别名sentinel-master,至少2个Sentinel节点认为失败时做故障转移;sentinel monitor <master-name> <ip> <port> <quorum>;;

    sentinel monitor yunxi-master 127.0.0.1 6379 2

    # 超过指定秒没有收到节点回复,判为故障下线;sentinel down-after-milliseconds <master-name> <times>

    sentinel down-after-milliseconds yunxi-master 30000

    # 故障转移时的从节点向主节点发起并发复制请求的数量;sentinel parallel-syncs <master-name> <nums>

    sentinel parallel-syncs yunxi-master 1

    # 故障转移超时时间;sentinel failover-timeout <master-name> <times>

    sentinel failover-timeout yunxi-master 180000

    2、部署技巧

    )为了实现真正的高可用,不要将sentinel节点部署在同一台物理机上,因为如果这台物理机故障的话便会影响所以的sentinel节点

    )最少部署3个以上的奇数节点,这样能提高sentinel判断故障的准确性,以及更好的满足票数过半的选举策略

    )每个业务场景部署一套sentinel

    哨兵原理:

    1、哨兵通过三个job组成

    )每隔10秒,每个sentinel会向主节点发送info命令,以获取redis节点的当前状态(为什么不需要显示的监控从节点呢,因为主节点的replication中包含了从节点的信息)

    )每隔2秒,每个sentinel节点回向redis发送__sentinel__:hello频道上发送自己对主节点的判断及自己节点的信息;同时每个sentinel节点也会订阅改频道,来了解其他sentinel节点对主节点的判断

    )每个1秒,sentinel节点回向主节点及其它从节点和sentinel节点发送ping命令做心跳检测

    2、主观下线和客观下线

    )主观下线:仅自己认为主节点宕机的下线模式

    当前sentinel节点发送ping做心跳,若超过down-after-milliseconds还未响应则做主观下线

    )客观下线:主节点实际下线

    该sentinel会向其他sentinel发送sentinel ismaster-down-by-addr命令,以得知其他sentinel节点对主节点的判断,若超过quorum数量的sentinel都认为主节点已宕机,则sentinel节点会对主节点做客观下线处理

    哨兵命令:

  • 相关阅读:
    SQL使用基本准则
    SQL使用技巧-或许你不知道的10条SQL技巧
    RabbitMQ安装遇到的坑
    编译安装python
    批量化杀死进程
    python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
    c++中 . 和 -> 的区别是什么?
    C语言中的malloc、new、memset函数解析
    C语言中static关键字用法
    struct和typedef struct的区别
  • 原文地址:https://www.cnblogs.com/bzfsdr/p/11547229.html
Copyright © 2011-2022 走看看