5.redis-哨兵模式

01-哨兵模式概述

  • 如果master宕机, 我们该怎么办?

    • ①关闭所有slave
    • ②选举新的master, 建立新的主从结构
  • 存在的问题

    • ①关闭期间, 谁来提供数据服务
    • ②选举新master的标准是什么
    • ③原来的master恢复了怎么办
  • 哨兵模式

    • image-20230304103528448

    • sentinel是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制 选择新的master并将所有slave连接到新的master。

  • 作用

    • 监控:监控master和slave 不断的检查master和slave是否正常运行 master存活检测、master与slave运行情况检测
    • 通知(提醒) 当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知
    • 自动故障转移 断开master与slave连接,选取一个slave作为新的master,将其他slave连接新的master,并告 知客户端新的服务器地址

02-哨兵模式配置

  • 配置说明

    # 设置哨兵监听的主服务器信息,
    # sentinel_number表示参与投票的哨兵数量,哨兵总数量的一半加1
    sentinel monitor <master_name> <master_host> <master_port> <sentinel_number>
    
    # 设置判定服务器宕机时长,该设置控制是否进行主从切换,单位:毫秒
    sentinel down-after-milliseconds <master_name> <million_seconds>
    
    # 设置故障切换的最大超时时间,单位:毫秒
    sentinel failover-timeout <master_name> <million_seconds>
    
    # 设置主从切换后,同时进行数据同步的slave数量,数值越大,要求网络资源越高,同步时间越长
    sentinel parallel-syncs <master_name> <sync_slave_number>
    

03-哨兵模式搭建及演示

  • 需求

    • 1个主机(6379), 2个从机(26379, 26380), 3个哨兵(36379, 36380, 36381).
  • redis-6379.conf

    port 6379
    daemonize no
    # logfile "log-6379.log"
    maxclients 100000
    timeout 0
    loglevel debug
    
    
    # RDB设置
    # 1.设置rdb文件名
    dbfilename "dump-6379.rdb"
    
    # 2.设置rdb文件存储路径
    dir /usr/local/redis-6379/data
    
    # 3.设置存储rdb时是否压缩数据
    rdbcompression no
    
    # 4.设置读写文件过程是否进行RDB格式校验
    rdbchecksum no
    
    
    # 5.后台存储过程中如果出现错误现象,是否停止保存操作
    stop-writes-on-bgsave-error yes
    
    
    # 6.每隔10秒检测一次,有2个数据变化就执行bgsave指令
    save 10 2
    
    
    # AOF设置
    # 1.开启aof持久化功能
    appendonly yes
    # 2.设置aof文件名
    appendfilename 'appendonly-6379.aof'
    # 4.设置aof策略
    appendfsync everysec
    
    
    # 5.当前aof文件大小达到64mb,自动触发AOF重写
    auto-aof-rewrite-min-size 64mb
    # 5.当前aof文件大小比之前aof文件大小增加了100%,自动触发AOF重写
    auto-aof-rewrite-percentage 100
    
    
    protected-mode no
    
  • redis-26379.conf/redis-26380.conf

    port 26379
    daemonize no
    # logfile "log-26379.log"
    maxclients 100000
    timeout 0
    loglevel debug
    
    
    # RDB设置
    # 1.设置rdb文件名
    dbfilename "dump-26379.rdb"
    
    # 2.设置rdb文件存储路径
    dir /usr/local/redis-26379/data
    
    # 3.设置存储rdb时是否压缩数据
    rdbcompression no
    
    # 4.设置读写文件过程是否进行RDB格式校验
    rdbchecksum no
    
    
    # 5.后台存储过程中如果出现错误现象,是否停止保存操作
    stop-writes-on-bgsave-error yes
    
    
    # 6.每隔10秒检测一次,有2个数据变化就执行bgsave指令
    save 10 2
    
    
    # AOF设置
    # 1.开启aof持久化功能
    appendonly yes
    # 2.设置aof文件名
    appendfilename 'appendonly-26379.aof'
    # 4.设置aof策略
    appendfsync everysec
    
    
    # 5.当前aof文件大小达到64mb,自动触发AOF重写
    auto-aof-rewrite-min-size 64mb
    # 5.当前aof文件大小比之前aof文件大小增加了100%,自动触发AOF重写
    auto-aof-rewrite-percentage 100
    
    
    protected-mode no
    
    
    #主机ip和主机port
    slaveof 192.168.216.110 6379
    
  • redis-36379.conf/redis-36380.conf/redis-36381.conf

    # 设置哨兵的端口
    port 36379
    daemonize no
    dir /usr/local/redis-36379/data
    
    # 设置哨兵监控的master信息:host、port、参与投票的哨兵数量
    sentinel monitor mymaster 192.168.216.110 6379 2
    # master宕机5秒后,进行主从切换
    sentinel down-after-milliseconds mymaster 5000
    # master宕机3分钟后,如果主从切换还没成功,那么就彻底失败
    sentinel failover-timeout mymaster 180000
    # 主从切换后,数据同步的从机数量为1
    sentinel parallel-syncs mymaster 1
    # 主从切换过程中,如果有问题发生,那么就终止切换
    sentinel deny-scripts-reconfig yes
    
    
    # 设置master的访问密码
    # sentinel auth-pass mymaster root
    
  • ④启动主机

    • image-20230304111819035
  • ⑤启动从机

    • image-20230304111852246
  • ⑥启动哨兵

    • image-20230304111920666
  • ⑦查看主机信息

    • image-20230304112147348
  • ⑧查看从机信息

    • image-20230304112220016
  • ⑨查看哨兵信息

    • image-20230304112314436
  • ⑩主机宕机, 查看主从切换

    • 让redis-6379宕机

04-哨兵模式工作流程

  • ①监控: 哨兵监控获取主从服务器的状态

    • gaev45ywrg3te2faq
  • ②通知: 发现主从机有异常, 通知其他哨兵

    • yg5w34raehw4ayhr34fe
  • ③故障转移

    • hy3e4aswybg5u57erd

      • 主观下线: 一个哨兵发现有问题
      • 客观下线: 所有哨兵发现有问题
    • tgq3au7yh8j564req23w

      • 选举哨兵代表
    • tg3qa4wer4yw637tse4wy

    • 哨兵代表根据算法选举新的主机

    • 自动建立新的主机和从机结构

### 部署 Redis Sentinel 哨兵模式 Redis Sentinel 是用于监控 Redis 实例并实现高可用性的工具。以下是关于其部署和配置的关键点: #### 启动 Redis 主从节点 为了使 Redis Sentinel 正常工作,需要先设置好主从复制结构。可以通过以下方式启动多个 Redis 实例作为主服务器和从服务器。 ```bash ./redis-server /path/to/redis_master.conf --port 6379 ./redis-server /path/to/redis_slave1.conf --port 6380 --slaveof 127.0.0.1 6379 ./redis-server /path/to/redis_slave2.conf --port 6381 --slaveof 127.0.0.1 6379 ``` 上述命令分别启动了一个主实例(端口 `6379`)和两个从实例(端口分别为 `6380` 和 `6381`),其中从实例通过参数 `--slaveof` 设置为主实例的副本[^4]。 #### 配置 Redis Sentinel 文件 创建一个名为 `sentinel.conf` 的配置文件,并添加如下内容来定义哨兵的行为: ```conf # 定义监听端口 port 26379 # 指定被监视的主数据库名称、IP地址及端口号 sentinel monitor mymaster 127.0.0.1 6379 2 # 当前 quorum 参数表示至少有 2 台哨兵同意才能判定主库失效 quorum 表示多少台哨兵认为 master 不可用时触发 failover 流程 # 自动发现其他哨兵节点 sentinel down-after-milliseconds mymaster 5000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 60000 ``` 此部分设置了哨兵去监测名为 `mymaster` 的主数据库及其关联的从属者们的状态变化情况[^3]。 #### 启动 Redis Sentinel 利用之前准备好的配置文件运行哨兵进程: ```bash ./redis-sentinel /path/to/sentinel.conf ``` 这一步会依据指定路径下的配置文件初始化相应的哨兵服务。 --- ### 部署 Redis Cluster 集群环境 对于更复杂的场景,则可以考虑构建完整的 Redis Cluster 来提供分布式存储能力。下面介绍基本步骤: #### 准备多份独立的 Redis 配置文件 每一份都需要单独设定不同的 TCP 端口以便区分各个成员之间的通信渠道。例如: ```conf port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes ``` 这里启用了集群支持 (`cluster-enabled`) 并指定了持久化选项(`appendonly`) ,同时允许自动生成节点间关系描述文档(nodes-*.conf)[^2]。 #### 开始各组件的服务 按照预先规划的数量逐一激活这些预设完毕后的个体单元体: ```bash for port in {7000..7005}; do ./redis-server /path/to/redis_$port.conf; done ``` 这样就拥有了六个处于待命状态中的候选参与者可供后续操作调配使用了。 #### 创建实际意义上的逻辑上的整体集合体系 借助官方提供的脚本完成最后组装动作: ```bash yes | redis-cli --cluster create \ 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \ 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \ --cluster-replicas 1 ``` 该指令将把前面提到过的那些零散部件组合成具有冗余备份特性的正式生产级别规模大小不一但相互协作配合默契的整体解决方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钱要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值