关于Redis - 哨兵模式

单纯主从模式存在主机宕机问题,Redis 2.8提供哨兵工具实现自动化监控和故障恢复。本文介绍了哨兵的功能,如监控主从、选举新主机等,还说明了其配置、启动方式、基本命令,详细阐述了哨兵选举的过程、评估条件及配置广播等内容。

 

       单纯的主从模式还是会存在问题,一旦主机宕机,这个主从就没有办法维持下去。同时,从机也会不能正常工作(这里的正常工作指的主从的运作体系)。

    Redis 2.8中新提供了哨兵工具来实现自动化的系统监控和故障恢复功能。

   

目录

一、简单说说哨兵:

二、哨兵的配置:

三、启动方式:

四、关于哨兵的一些基本命令

五、关于哨兵选举:


一、简单说说哨兵:

   其实在配置文件内就可以看到:

  ① 主机无法正常工作的情况下选择副本以升级为 master(主机)

  ② 监控主从数据库是否正常运行

 ③ 哨兵配置的时,哨兵之间其实也会相互监控(基于第一点)

 

二、哨兵的配置:

其实官方文档也存在:https://redis.io/topics/sentinel

从源码/自己编译好的代码中获取:

这里设置三个哨兵,以达成后面的需求:

端口号:26379、26380、26381

Tip:为什么我会用两个以上哨兵

 

基本修改操作:


daemonize yes 
# 守护线程 这里便于后台运行

pidfile /var/run/redis-26379_sentinel.pid 
# 文件名自定义,文件存放位置也是自定义

logfile "./logs/sentinel_26379.log" 
# 该项可不设置,默认输出到/dev/null,若没文件夹需先建立,与之前主从时并无差异

dir./
# 工作目录,除非本身配置文件存放不同文件夹下,否则还是自定义这个地址,参考主从部分

sentinel monitor mymaster 127.0.0.1 6379 2
# mymaster 为主机别名,需要在 A-z 0-9 和 ".-_".之内的字符组成
# 后面分别为 ip地址, 端口号 , 以及当主机宕机时多少个哨兵投票就可以决定新的主机;
# 这里面若是配置多个,则监听多个主机

#++++++++++++假设主服务器设置了密码++++++++++++++
# 格式:sentinel auth-pass <master-name> <password>

sentinel auth-pass mymaster coffeeandice 

# mymaster 是主服务器别名(自定义的),coffeeandice是主服务器设置的密码


sentinel down-after-milliseconds mymaster 30000

# 是尝试连续ping 主服务器失败时坚持的时间,单位为毫秒 ,mymaster 为主机名称

 

三、启动方式:

一、直接哨兵可执行文件:

redis-sentinel sentinel.conf

二、使用redis-server可执行文件,以哨兵模式启动它: 

redis-server sentinel.conf --sentinel

启动完毕后:哨兵会有不一样的标识

 

 

查看日志:(这里示例端口为 26380的哨兵)

清晰的展示了主从关内容详情

+monitor master mymaster 127.0.0.1 6379 quorum 2  # 配置文件内的宕机选举人数

+slave slave ..  表示从服务器参数

 

 

四、关于哨兵的一些基本命令

 其实这部分内容上面的官方文档也有提及

$ redis-cli -p 26379  

# 这里可以是任意一个哨兵的端口号

① 获取主服务器的某些参数

127.0.0.1:26379> sentinel master mymaster

② 获取所有从服务器的信息

127.0.0.1:26379> SENTINEL slaves mymaster

③ 获取其他哨兵的信息

127.0.0.1:26379> SENTINEL sentinels mymaster

④ 让主机暂时休眠,代替宕机

redis-cli -p 6379 DEBUG sleep 30

# 如果存在密码 ,则加上参数 -a 后接密码
eg: redis-cli -p 6379 -a coffeeandice DEBUG sleep 30

 获取主机地址 及其端口号信息

127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster

⑤ 用于新增监听一个主机

SENTINEL MONITOR <name> <ip> <port> <quorum> 
# 对应上述配置文件设置内容,可以在运行时执行

⑤ 用于撤销监听一个主机

SENTINEL REMOVE <name> 
# name代表主机的名称,当初设置的别名

⑥ 用于设置配置文件

SENTINEL SET <name> <option> <value> 
# 参数可以根据 *.conf 进行设置

#若需要保存更新到配置文件内,可以搭配 SENTINEL flushconfig,重新刷新进入磁盘内

 

五、关于哨兵选举:

 我们可以根据上面的休眠命令来得到如下结果:

  主机宕机,先是继续持续尝试访问旧主机,直到等到配置或者默认配置的条件时,开始执行投票,选举新的主机的一个过程;

 

自动扫描哨兵与从服务器

哨兵启动后,会与要监控的master建立相当于俩条连接:

  1. 一条连接用来订阅master的_sentinel_:hello频道与获取其他监控该master的哨兵节点信息
  2. 另一条连接定期向master发送INFO等命令获取并同步r本身的信息
  3. 自动搜索的过程中,如果发现已经有一个哨兵runid相同或同一地址(ip和端口),则之前匹配的所有哨兵记录清空,重新添加哨兵

与master建立连接后,哨兵会执行三个操作,这三个操作的发送频率都可以在配置文件中配置:

     1、定期向master和slave发送INFO命令
     2、定期向master个slave的_sentinel_:hello频道发送自己的信息
     3、定期向master、slave和其他哨兵发送PING命令

 

  选举与优先级

从服务器选择过程评估关于其的以下信息:[ 下面条件是优先级的,不会并行 ]

  1. 与主服务器断开的时间。
  2. 从服务器的优先级。[replica-priority]
  3. 复制抵消处理。
  4. 运行ID。

    ①一个从发现断开主超过十倍配置的主超时(down-after-milliseconds选项),加上 主也不是可用的节点时, 哨兵会认为是不适合故障转移的节点。

(down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state

 ② 顾名思义是对比 replica-priority 的配置值


 ③ 可以对比偏移值来选取【即offeset】

 

④ 以运行的pid 大小来选取,最好不要轮到这个配置,最小者成为主服务器

 

 

广播配置

待选举完成后,将通过__sentinel__:hello发布/订阅频道广播配置;

因为每一个配置都有不同的版本号,版本就越大 则是最新,待选举完成后广播出去, 所有其他实例将看到这个配置并相应地将更新他们的配置,因为新的配置版本号最大,为最新。

### 部署 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值