Redis哨兵配置实现服务高可用(1主1从1哨兵)

简介: Redis配置哨兵

#  


![0bc497118e24fb2b7a38d9cbf16e975b.jpeg](https://ucc.alicdn.com/images/user-upload-01/img_convert/0bc497118e24fb2b7a38d9cbf16e975b.jpeg)


为Redis提供了高可用解决方案。实际上这意味着使用Sentinel可以部署一套Redis,在没有人为干预的情况下去应付各种各样的失败事件。


下面是Sentinel的功能列表:


+   监控(Monitoring):Sentinel不断的去检查你的主从实例是否按照预期在工作。

+   通知(Notification):Sentinel可以通过一个api来通知系统管理员或者另外的应用程序,被监控的Redis实例有一些问题。

+   自动故障转移(Automatic failover):如果一个主节点没有按照预期工作,Sentinel会开始故障转移过程,把一个从节点提升为主节点,并重新配置其他的从节点使用新的主节点,使用Redis服务的应用程序在连接的时候也被通知新的地址。

+   配置提供者(Configuration provider):Sentinel给客户端的服务发现提供来源:对于一个给定的服务,客户端连接到Sentinels来寻找当前主节点的地址。当故障转移发生的时候,Sentinels将报告新的地址。


* * *


# 前言


>**主从使用一主一从,然后使用sentinel进行高可用配置,当主服务器挂掉,从服务器自动升为主服务器。**


# 1.配置主服务器


```bash

# 使得Redis服务器可以跨网络访问(直接注释也行)bind 0.0.0.0#开启持久化appendonly yes# 设置密码requirepass "123456"#配置哨兵的访问此服务名的密码masterauth 123456

```


# 2.配置从服务器


```bash

# 使得Redis服务器可以跨网络访问(直接注释也行)bind 0.0.0.0#开启持久化appendonly yes# 设置密码requirepass "123456"# 指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置slaveof 192.168.11.128 6379# 主服务器密码,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置masterauth 123456

```


# 3.配置一个哨兵(配置sentinel.conf,这个配置文件一般都是在安装目录下)


```bash

#哨兵端口port 26380 # 禁止保护模式protected-mode no# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.11.128代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。sentinel monitor mymaster 192.168.11.128 6379 2# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码# sentinel auth-pass <master-name> <password>sentinel auth-pass mymaster 123456

```


# **哨兵docker配置**


**这边有个注意点,docker部署启动容器网络需要使用桥接模式host**


进入容器


```javascript

dockerexec -it  redis /bin/bash

```


```bash

#cd / (进入根目录)#apt-get update (更新依赖)#apt-get install -y vim (安装vim)#vim sentinel.conf  (建立sentinel配置文件保存退出,内容如下)

```


启动哨兵


```undefined

redis-sentinel sentinel.conf

```


> 如果配置,主服务器(master)出现故障后,哨兵选举新的主服务器(master)

>

> 的时间默认为3分钟


## 要想配置这个时间,我们先来了解下redis哨兵的选举机制


### 1、主观下线


Sentinel集群的每一个Sentinel节点会定时对redis集群的所有节点发心跳包检测节点是否正常。如果一个节点在`down-after-milliseconds`时间内没有回复Sentinel节点的心跳包,则该redis节点被该Sentinel节点主观下线。


### 2、客观下线


当节点被一个Sentinel节点记为主观下线时,并不意味着该节点肯定故障了,还需要Sentinel集群的其他Sentinel节点共同判断为主观下线才行。


该Sentinel节点会询问其他Sentinel节点,如果Sentinel集群中超过`quorum`数量的Sentinel节点认为该redis节点主观下线,则该redis客观下线。


如果客观下线的redis节点是从节点或者是Sentinel节点,则操作到此为止,没有后续的操作了;如果客观下线的redis节点为主节点,则开始故障转移,从从节点中选举一个节点升级为主节点。


### 3、Sentinel集群选举Leader


如果需要从redis集群选举一个节点为主节点,首先需要从Sentinel集群中选举一个Sentinel节点作为Leader。


每一个Sentinel节点都可以成为Leader,当一个Sentinel节点确认redis集群的主节点主观下线后,会请求其他Sentinel节点要求将自己选举为Leader。被请求的Sentinel节点如果没有同意过其他Sentinel节点的选举请求,则同意该请求(选举票数+1),否则不同意。


如果一个Sentinel节点获得的选举票数达到Leader最低票数(`quorum``Sentinel节点数/2+1`的最大值),则该Sentinel节点选举为Leader;否则重新进行选举。


![20190202175541832.png](https://ucc.alicdn.com/images/user-upload-01/20190202175541832.png)


### 4、Sentinel Leader决定新主节点


当Sentinel集群选举出Sentinel Leader后,由Sentinel Leader从redis从节点中选择一个redis节点作为主节点:


1.  过滤故障的节点

2.  选择优先级`slave-priority`最大的从节点作为主节点,如不存在则继续

3.  选择复制偏移量(数据写入量的字节,记录写了多少数据。主服务器会把偏移量同步给从服务器,当主从的偏移量一致,则数据是完全同步)最大的从节点作为主节点,如不存在则继续

4.  选择`runid`(redis每次启动的时候生成随机的`runid`作为redis的标识)最小的从节点作为主节点


![watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpYW9Ib25nSEI=,size_16,color_FFFFFF,t_70#pic_center](https://ucc.alicdn.com/images/user-upload-01/20201015105208279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpYW9Ib25nSEI=,size_16,color_FFFFFF,t_70#pic_center)


### 了解了选举机制我们来看看sentinel.conf的具体配置


 

1.


```bash

sentinel down-after-milliseconds <master-name> <milliseconds> sentinel down-after-milliseconds mymaster 30000

```


这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30秒


```bash

sentinel parallel-syncs <master-name> <numslaves>

```


这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。

相关文章
|
7月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
807 25
|
8月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
10月前
|
NoSQL 安全 Linux
设置Redis在CentOS7上的自启动配置
这些步骤总结了在CentOS 7系统上设置Redis服务自启动的过程。这些命令提供了一个直接且明了的方式,确保Redis作为关键组件在系统启动时能自动运行,保障了依赖于Redis服务的应用的稳定性和可用性。
759 9
|
NoSQL Ubuntu 网络安全
在 Ubuntu 20.04 上安装和配置 Redis
在 Ubuntu 20.04 上安装和配置 Redis 的步骤如下:首先更新系统包,然后通过 `apt` 安装 Redis。安装后,启用并启动 Redis 服务,检查其运行状态。可选配置包括修改绑定 IP、端口等,并确保防火墙设置允许外部访问。最后,使用 `redis-cli` 测试 Redis 功能,如设置和获取键值对。
659 1
|
缓存 NoSQL Redis
Redis原理—3.复制、哨兵和集群
详细介绍了Redis的复制原理、哨兵原理和集群原理。
|
存储 监控 NoSQL
NoSQL与Redis配置与优化
通过合理配置和优化Redis,可以显著提高其性能和可靠性。选择合适的数据结构、优化内存使用、合理设置持久化策略、使用Pipeline批量执行命令、以及采用分布式集群方案,都是提升Redis性能的重要手段。同时,定期监控和维护Redis实例,及时调整配置,能够确保系统的稳定运行。希望本文对您在Redis的配置与优化方面有所帮助。
257 23
|
存储 负载均衡 NoSQL
搭建高可用及负载均衡的Redis
通过本文介绍的高可用及负载均衡Redis架构,可以有效提升Redis服务的可靠性和性能。主从复制、哨兵模式、Redis集群以及负载均衡技术的结合,使得Redis系统在应对高并发和数据一致性方面表现出色。这些配置和技术不仅适用于小型应用,也能够支持大规模企业级应用的需求。希望本文能够为您的Redis部署提供实用指导和参考。
948 9
|
存储 监控 NoSQL
NoSQL与Redis配置与优化
通过合理配置和优化Redis,可以显著提高其性能和可靠性。选择合适的数据结构、优化内存使用、合理设置持久化策略、使用Pipeline批量执行命令、以及采用分布式集群方案,都是提升Redis性能的重要手段。
284 7
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]