Redis哨兵模式部署(超详细)

news/2024/10/21 11:36:40/

哨兵模式特点

主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel模式应运而生。sentinel中文含义为哨兵,顾名思义,它的作用就是监控redis集群的运行状况,此模式具有如下一些特点:

  • sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义;
  • 当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master;
  • 当master重新启动后,它将不再是master,而是做为slave接收新的master的同步数据;
  • sentinel因为也是一个进程,所以有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群;
  • 多sentinel配置的时候,sentinel之间也会自动监控;
  • 当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中;
  • 一个sentinel或sentinel集群可以管理多个主从Redis,多sentinel也可以监控同一个redis
  • sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也可能会挂掉。

哨兵工作原理

1.哨兵节点通过发送命令来监控Redis服务器的状态。它会定期向主节点和从节点发送PING命令,检查节点是否存活。
2.当主节点发生故障或不可用时,哨兵节点会进行故障检测。它会询问其他哨兵节点是否已经发现了主节点的故障,并尝试达成共识。
3.如果多数哨兵节点都认为主节点故障,那么它们会选举新的主节点。选举的原则是选择一个具有最高优先级的从节点,如果没有从节点则选择一个具有最高优先级的哨兵节点。
4.一旦新的主节点被选出,哨兵节点会更新所有其他从节点的配置信息,使它们成为新主节点的从节点。
5.当故障的主节点恢复时,哨兵节点会将其重新加入到主从复制环境中,并将其设置为新主节点的从节点。
6.通过哨兵模式,Redis可以实现高可用性和故障恢复。当主节点发生故障时,哨兵节点可以自动切换为新的主节点,使系统可以在故障期间继续提供服务。同时,哨兵节点可以监控并修复其他节点的故障,确保整个Redis集群处于可用状态。
在这里插入图片描述

服务器准备

示例:

hostsIP 服务
midware-171(主)192.168.3.171 redis、sentinel
midware-172(从)192.168.3.172 redis、sentinel
midware-173(从)192.168.3.173 redis、sentinel

关闭所有服务器防火墙:

$ systemctl stop firewalld.service

修改所有服务器的hosts:

$ vim /etc/hosts

添加以下内容:

192.168.3.171 midware-171 
192.168.3.172 midware-172
192.168.3.173 midware-173

资源准备:
redis 下载地址:
http://download.redis.io/releases/

部署前须知

  1. 为了实现高可用的部署,您至少需要三个 Sentinel 实例。
  2. 这三个 Sentinel 实例应该放置在被认为会独立故障的计算机或虚拟机上。例如,不同的物理服务器或在不同可用区执行的虚拟机。
  3. Sentinel + Redis 分布式系统不保证在故障期间保留已确认的写入,因为 Redis 使用异步复制。
  4. 您的客户端需要支持 Sentinel。流行的客户端库支持 Sentinel,但并非所有库都支持。
  5. 在搭建生产环境投入生产之前最好测试高可用性是否工作,如果未经测试,您可能有配置错误,上线后为时已晚时(例如凌晨3点主服务器停止工作)才会显现出来。

Redis 主从搭建

Redis 安装

在所有服务器执行
注意: 新版本redis自带哨兵,不需要单独安装

$ cd /usr/local/src
$ wget http://download.redis.io/releases/redis-6.2.14.tar.gz
$ tar -xvf redis-6.2.14.tar.gz
$ cd redis-7.2.14/
$ make
$ make PREFIX=/usr/local/redis-6.2.14 install

修改linux内核参数

修改Linux 内存分配的策略:
# 临时生效

sysctl  -w  vm.overcommit_memory=1

# 永久生效

echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf && sysctl -p
\ 可选值:0,1,2。
\ 0,:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
\ 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
\ 2: 表示内核允许分配超过所有物理内存和交换空间总和的内存。

修改Linux内核对于TCP连接队列的长度上限值:

echo ' net.core.somaxconn =1024' >> /etc/sysctl.conf && sysctl –p

Redis 主配置

dir "/usr/local/redis-6.2.14/data"
logfile "/usr/local/redis-6.2.14/logs/redis.log"
masterauth "123456"
requirepass "123456"
protected-mode no
port 6379
tcp-backlog 511
timeout 0
maxclients 20000
tcp-keepalive 300
daemonize yes
maxmemory 8gb  #推荐设为物理内存一半
maxmemory-policy allkeys-lru
pidfile "/var/run/redis_6379.pid"
loglevel notice
databases 16
#save <seconds> <changes>save 900 1save 300 10save 60 10000
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
replica-read-only yes
replica-priority 100
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
slowlog-log-slower-than 10000
slowlog-max-len 1024

Redis 从配置

1.masterauth: 以认证的方式连接到master。 如果master中使用了“密码保护”,slave必须交付正确的授权密码,才能连接成功。“requirepass”配置项指定了当前server的密码。此配置项中值需要和master机器的“requirepass”保持一致。
2.slaveof : 将当前服务器转变为指定服务器的从属服务器(slave server)。

dir "/usr/local/redis-6.2.14/data"
logfile "/usr/local/redis-6.2.14/logs/redis.log"
masterauth "123456"
requirepass "123456"
protected-mode no
port 6379
tcp-backlog 511
timeout 0
maxclients 10000
tcp-keepalive 300
daemonize yes
maxmemory 8gb
maxmemory-policy allkeys-lru
pidfile "/var/run/redis_6379.pid"
loglevel notice
databases 16
replicaof 192.168.3.171 6379
#save <seconds> <changes>save 900 1save 300 10save 60 10000
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
replica-read-only yes
replica-priority 99
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
slowlog-log-slower-than 10000
slowlog-max-len 1024

Redis 启动

依次启动所有服务器上的redis 服务

$ /usr/local/redis-6.2.14/bin/redis-server /usr/local/redis-6.2.14/redis.conf

查看主从Redis 状态

启动所有服务器后,查看所有redis 节点状态
主服务器:
在这里插入图片描述

从服务:
在这里插入图片描述
在这里插入图片描述

哨兵配置

redis的安装目录下有个文件sentinel.conf,这就是哨兵的配置文件。它和redis.conf文件在同级目录
创建sentinel工作目录:

mkdir /usr/local/redis-6.2.14/sentinel

sentinel.conf配置

$ vim /usr/local/redis-7.2.14/sentinel.conf
sentinel.conf 信息
protected-mode no
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
loglevel notice
logfile "/usr/local/redis-6.2.14/logs/sentinel.log"
dir "/usr/local/redis-6.2.14/sentinel"
sentinel monitor mymaster 192.168.3.171 6379 2
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 30000
sentinel resolve-hostnames yes
sentinel announce-hostnames yes

启动哨兵服务

/usr/local/redis-6.2.14/bin/redis-sentinel /usr/local/redis-6.2.14/sentinel.conf

查看启动状态

在这里插入图片描述

注: 一主两从三哨兵,证明集群正常

主从切换测试

在主节点上停止服务,模拟故障,主从发生切换
在这里插入图片描述

查看sentinel日志如下:

tail -f /usr/local/redis-6.2.14/logs/sentinel.log

在这里插入图片描述

查看主节点 已发生切换
在这里插入图片描述

恢复原主服务并查看主从状态
在这里插入图片描述

查看sentinel状态
在这里插入图片描述

注: 一主两从三哨兵,证明集群正常。并在故障时主从能正常切换


http://www.ppmy.cn/news/1540781.html

相关文章

多模态大语言模型(MLLM)-Blip3/xGen-MM

论文链接&#xff1a;https://www.arxiv.org/abs/2408.08872 代码链接&#xff1a;https://github.com/salesforce/LAVIS/tree/xgen-mm 本次解读xGen-MM (BLIP-3): A Family of Open Large Multimodal Models 可以看作是 [1] Blip: Bootstrapping language-image pre-training…

ESP32-C3实现非易失变量(Arduino IDE )

1效果 网页输入数据&#xff0c;串口打印数据。掉电后数据还在 2源码 #include <WiFi.h> // 包含WiFi库&#xff0c;用于处理WiFi连接 #include <WebServer.h> // 包含WebServer库&#xff0c;用于创建Web服务器 #include <Preferences.h> // 包含Prefere…

【java数据结构】栈

【java数据结构】栈 一、栈的概念二、 栈的使用三、 栈的模拟实现(数组)构造方法size()empty()push()pop()peek() 四、 栈的模拟实现(链表)构造方法size()empty()push()pop()peek() 五、 栈的例题 此篇博客希望对你有所帮助&#xff08;帮助你了解栈&#xff09;&#xff0c;不…

Python爬虫介绍

在互联网上&#xff0c;信息就像散落的珍珠&#xff0c;而Python爬虫就是帮你把它们串起来的线。无论你是想要分析市场趋势、研究社交媒体行为&#xff0c;还是简单地收集数据做报告&#xff0c;Python爬虫都能帮你高效完成任务。 是一种使用Python编程语言编写的自动化脚本&a…

MarkDown---标题

软件下载网址&#xff1a;Typora 官方中文站 程序员必备软件MarkDown&#xff0c;这个软件能提升自己的文件整理效率&#xff0c;日常用于对接接口等等操作都离不开MarkDown。 下载软件后&#xff0c;如果需要激活清查看我这篇文章&#xff1a; Typora序列号激活_typora激活…

视频转文字工具搜集

视频转文字工具是一种能够将视频中的音频内容转化为文字的软件或在线服务。这类工具通常支持多种视频格式和语言&#xff0c;适用于不同的场景和需求。以下是一些推荐的视频转文字工具及其特点&#xff1a; 媒关系&#xff1a;这是一款免费的视频转文字工具&#xff0c;支持多种…

keepalived(高可用)+nginx(负载均衡)+web

环境 注意&#xff1a; (1) 做高可用负载均衡至少需要四台服务器&#xff1a;两台独立的高可用负载均衡器&#xff0c;两台web服务器做集群 (2) vip&#xff08;虚拟ip&#xff09;不能和物理ip冲突 (3) vip&#xff08;虚拟ip&#xff09;最好设置成和内网ip同一网段&#xf…

在知网上快速引用相关文献

1.在百度界面中搜索“知网”&#xff08;或在地址栏中输入知网的链接“https://www.cnki.net/”&#xff09; 2.点开搜索到的知网&#xff0c;点开后出现以下界面。 3.在主题中输入关键字&#xff0c;如“JAVA”&#xff0c;之后点击搜索。出现下述界面 4.在该界面中点击 这个…