SpringBoot 整合 Redis 哨兵机制_01

文章目录

    • 一、哨兵简述
      • 1. 哨兵能解决和未能解决的问题
      • 2. 哨兵的作用
      • 3. 哨兵的主要配置
      • 4. 哨兵综述
    • 二、搭建哨兵
      • 2.1. 思路分析
      • 2.2. 节点分布总览
      • 2.3. 哨兵配置
      • 2.4. 启动主从复制
      • 2.5. 启动哨兵:
    • 三、需求测试
      • 3.1. 评估预测
      • 3.2. 分别登录3个节点
      • 3.3. 破坏性模拟测试

一、哨兵简述

1. 哨兵能解决和未能解决的问题

哨兵机制解决的问题哨兵机制无法解决的问题
带有自动处理故障转移功能的主从架构无法解决现有系统单节点并发压力和物理上限问题

2. 哨兵的作用

作用说明
监控不断地轮训去检查主服务器和从服务器是否正常运行
提醒当监控到某个redis服务器出现问题时,Sentinel提醒
故障的自动迁移断开master和人slave连接,选举一个slave节点升级为master,将其他slave连接到新的master,并告知客户端新的地址

注意:哨兵配置单数

3. 哨兵的主要配置

主要配置讲解
port 26379哨兵端口,不重复即可
daemonize yes是否开启后台运行 ,默认no
sentinel monitor {masterName} {masterIp} {masterPort} {quorum}sentinel monitor是哨兵最核心的配置,其中:
masterName指定了主节点名称,
masterIp和masterPort指定了主节点地址,
quorum是判断主节点客观下线的哨兵数量阈值:

当判定主节点下线的哨兵数量达到quorum时,对主节点进行客观下线。建议取值为哨兵数量的一半加1。 3个哨兵就配置2
sentinel down-after-milliseconds {masterName} {time}sentinel down-after-milliseconds与主观下线的判断有关:哨兵使用ping命令对其他节点进行心跳检测,如果其他节点超过down-after-milliseconds配置的时间没有回复,哨兵就会将其进行主观下线。该配置对主节点、从节点和哨兵节点的主观下线判定都有效。

down-after-milliseconds的默认值是30000,即30s;可以根据不同的网络环境和应用要求来调整:值越大,对主观下线的判定会越宽松,好处是误判的可能性小,坏处是故障发现和故障转移的时间变长,客户端等待的时间也会变长。例如,如果应用对可用性要求较高,则可以将值适当调小,当故障发生时尽快完成转移;如果网络环境相对较差,可以适当提高该阈值,避免频繁误判。
sentinel parallel - syncs {masterName} {number}sentinel parallel-syncs与故障转移之后从节点的复制有关:它规定了每次向新的主节点发起复制操作的从节点个数。例如,假设主节点切换完成之后,有3个从节点要向新的主节点发起复制;如果parallel-syncs=1,则从节点会一个一个开始复制;如果parallel-syncs=3,则3个从节点会一起开始复制。

parallel-syncs取值越大,从节点完成复制的时间越快,但是对主节点的网络负载、硬盘负载造成的压力也越大;应根据实际情况设置。例如,如果主节点的负载较低,而从节点对服务可用的要求较高,可以适量增加parallel-syncs取值。parallel-syncs的默认值是1。
sentinel failover - timeout {masterName} {time}sentinel failover-timeout与故障转移超时的判断有关,但是该参数不是用来判断整个故障转移阶段的超时,而是其几个子阶段的超时,例如如果主节点晋升从节点时间超过timeout,或从节点向新的主节点发起复制操作的时间(不包括复制数据的时间)超过timeout,都会导致故障转移超时失败。

failover-timeout的默认值是180000,即180s;如果超时,则下一次该值会变为原来的2倍。
logfile “/app/master-slave/log/sentinel_log.log”这个配置建议配置可以实时监控哨兵状态及操作轨迹

4. 哨兵综述

哨兵监视的是当前的master节点,如果当前master节点宕机了,哨兵会从节点中选举的一个从节点升级为主节点,即系提供redis服务;
当刚才的主节点恢复正常了,会成为现在主节点的新的从节点。

二、搭建哨兵

2.1. 思路分析

前提:已经搭建主从复制的架构1. 在现有主从架构的基础上搭建哨兵
2. 启动哨兵服务,准备一个哨兵配置文件

2.2. 节点分布总览

服务器ipport节点说明哨兵port
192.168.0.1146379master节点26379
192.168.0.1146380slave节点26380
192.168.0.1146381slave节点26381

2.3. 哨兵配置

为了快捷演示效果,这里采用伪分布式搭建(简单来说,就是在一台服务器上,搭建所有的哨兵)

#在/app/下面创建哨兵目录master-slave
cd /app
mkdir master-slave#在master-slave下面创建3个目录bin、conf、log、data目录,分别放置脚本、配置文件、日志文件、数据文件
cd /app/master-slave/
mkdir bin
mkdir conf#在/app/master-slave/log目录下面创建sentinel_log.log日志文件
touch /app/master-slave/log/sentinel_log.log#进入到解压的redis目录中复制哨兵的脚本文件和配置文件
cp /app/redis-5.0.8/src/redis-sentinel /app/master-slave/bin/#在/app/master-slave/conf/创建sentinel.conf文件
vim sentinel.conf添加如下内容:
port 26379
daemonize yes
logfile "/app/master-slave/log/sentinel_log.log"
dir /app/master-slave/data
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000保存退出
将/app/master-slave/conf/创建sentinel.conf文件复制2份并重命名
cp /app/master-slave/conf/sentinel.conf /app/master-slave/conf/sentinel-26380.conf
cp /app/master-slave/conf/sentinel.conf /app/master-slave/conf/sentinel-26381.conf#编辑sentinel-26380.conf修改端口
vim /app/master-slave/conf/sentinel-26380.conf
端口26379 改为26380
#编辑sentinel-26381.conf修改端口
vim /app/master-slave/conf/sentinel-26381.conf
端口26379 改为26381

2.4. 启动主从复制

#1.启动redis主从复制3个节点
/app/master-slave/bin/redis-server /app/master-slave/conf/redis.conf
/app/master-slave/bin/redis-server /app/master-slave/conf/redis-6380.conf
/app/master-slave/bin/redis-server /app/master-slave/conf/redis-6381.conf#2.登录master主节点,查看主节点主从复制节点信息,是否已经生效:
/app/master-slave/bin/redis-cli -p 6379
info replication
操作日志如下:
[root@localhost conf]# ps -ef |grep redis
root       7455      1  0 10:12 ?        00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6379
root       7460      1  0 10:12 ?        00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6380
root       7466      1  0 10:12 ?        00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6381
root       7471   7325  0 10:12 pts/0    00:00:00 grep --color=auto redis
[root@localhost conf]# /app/master-slave/bin/redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.114,port=6380,state=online,offset=126,lag=1
slave1:ip=192.168.0.114,port=6381,state=online,offset=126,lag=1
master_replid:21f34dabfd8c5432ca04d9a011f73e26b2a65af6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126
127.0.0.1:6379>

2.5. 启动哨兵:

/app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel.conf
/app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel-26380.conf
/app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel-26381.conf
操作日志如下:
[root@localhost conf]# /app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel.conf
[root@localhost conf]# /app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel-26380.conf
[root@localhost conf]# /app/master-slave/bin/redis-sentinel /app/master-slave/conf/sentinel-26381.conf
[root@localhost conf]# ps -ef |grep redis
root       7455      1  0 10:12 ?        00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6379
root       7460      1  0 10:12 ?        00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6380
root       7466      1  0 10:12 ?        00:00:00 /app/master-slave/bin/redis-server 0.0.0.0:6381
root       7501      1  0 10:15 ?        00:00:00 /app/master-slave/bin/redis-sentinel *:26379 [sentinel]
root       7506      1  0 10:15 ?        00:00:00 /app/master-slave/bin/redis-sentinel *:26380 [sentinel]
root       7511      1  0 10:15 ?        00:00:00 /app/master-slave/bin/redis-sentinel *:26381 [sentinel]
root       7518   7325  0 10:15 pts/0    00:00:00 grep --color=auto redis
[root@localhost conf]# 

三、需求测试

3.1. 评估预测

评估预测:
主从复制,主节点负责写入操作,从节点负责同步冗余数据,不能执行写入操作。加入哨兵之后,当前主节点宕机后,哨兵会从从从节点中选举一个从节点升级为主节点,继续对外提供redis服务,新选举的master可以执行写入操作

3.2. 分别登录3个节点

#登录master节点操作日志如下:
[root@localhost conf]# /app/master-slave/bin/redis-cli -p 6379
127.0.0.1:6379> set y yyy
OK
127.0.0.1:6379> get y
"yyy"
127.0.0.1:6379>#登录slave节点操作日志如下:
[root@localhost app]# /app/master-slave/bin/redis-cli -p 6380
127.0.0.1:6380> get y
"yyy"
127.0.0.1:6380> set hhh
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6380>#登录slave节点操作日志如下:
[root@localhost ~]# /app/master-slave/bin/redis-cli -p 6381
127.0.0.1:6381> get y
"yyy"
127.0.0.1:6381> set g ggg
(error) READONLY You can't write against a read only replica.
127.0.0.1:6381> 

3.3. 破坏性模拟测试

打开哨兵监控哨兵日志:
tail -f /app/master-slave/log/sentinel_log.log模拟master节点宕机
kill -9 7628 端口为6381的slave节点升级为新的master,可以执行写入操作
[root@localhost conf]# /app/master-slave/bin/redis-cli -p 6381
127.0.0.1:6381> set f gggg
OK
127.0.0.1:6381> 重新启动6379
[root@localhost conf]# /app/master-slave/bin/redis-server /app/master-slave/conf/redis.conf 重新登录端口为6379的节点,成为现有master节点的新的slave节点
[root@localhost conf]# /app/master-slave/bin/redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.0.114
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:399050
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f8d80bc94bab3bee7fddb03234e84cd758ad8958
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:399050
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:399051
repl_backlog_histlen:0
127.0.0.1:6379> set h gghg
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

流量隔离方案 Dpath 护航双十一新零售

需求 在今年的双11准备期间,业务同学提出要针对新零售进行特殊的保障,希望新零售过来的流量,单独进入到一批机器,和其他普通流量隔离开来,这对新零售系统稳定性提出更高的要求。 需求总结下来就是: 针对…

潘石屹接连带货 Python,要来抢我们的饭碗?

地产大亨潘石屹近日开始一项全新学习,刷爆程序员的朋友圈,程序员纷纷议论起来:地产大亨也要来抢饭碗啦?11月14日,他说:今天开始我学习一门新的语言Python,我在寻找。这也是今天给自己人生的礼物…

SpringBoot 整合Redis 单机、哨兵、集群

<!--springboot整合redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- redis 依赖commons-pool --><dependency><group…

mysql连接不上怎么重置密码错误_MySQL数据库连接不上、密码修改问题

1.问题描述版本&#xff1a;【CentOS8】【MySQL5.7】问题&#xff1a;远程使用navicat连接不上数据库&#xff0c;后来试了在linux中都登不进去。根据提示应该是密码不对&#xff0c;此文主要介绍密码修改和一些注意事项。2.解决方法1)因为现在登不进去&#xff0c;所以没法修改…

服务化改造的云上利器 | 阿里云 EDAS 重大升级发布

11月22日&#xff0c;广东云栖大会企业级互联网架构专场上&#xff0c;阿里云发布了全新版本的企业级分布式应用服务EDAS。 新版本增强了对主流微服务框架的原生支持&#xff0c;实现SpringCloud & Dubbo用户代码零侵入就能迁移至EDAS&#xff0c;降低开发者的接入门槛&am…

Nacos发布0.5.0版本,轻松玩转动态 DNS 服务

阿里巴巴微服务开源项目Nacos于近期发布v0.5.0版本&#xff0c;该版本主要包括了DNS-basedService Discovery&#xff0c;对Java 11的支持&#xff0c;持续优化Nacos产品用户体验&#xff0c;更深度的与Spring Cloud体系的网关集成等方面做了演进。 一、发布 DNS-F 为了进一步…

刷爆了!华为:这类程序员我给200万!你怎么看?

从2017年开始&#xff0c;人工智能便波澜不断&#xff0c;无论是从BAT高调布局AI&#xff0c;还是从年薪50万招聘AI应届生&#xff0c;炽手可热形容AI工程师一点都不过分。百度推出“少帅计划”,针对30岁以下的深度学习科学家&#xff0c;开出100万以上年薪&#xff01;阿里巴巴…

mysql c 中文字符串_MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法...

开源数据库MySQL从来都是中小企业构建web应用的首选&#xff0c;特别是和PHP配合简直就是一 对黄金搭档&#xff0c;深受web开发人员的喜爱。但自从4.1以来MySQL加入了多字符集的支持&#xff0c;很多MySQL使用者发现中文居然不能使用了&#xff0c;显示变成了一堆 乱码&#x…

SpringBoot2.x整合Redis 分布式集群_01

文章目录一、节点分布总览二、软件配置初始化三、集群配置修改3.1. redis-7002.conf3.2. redis-7003.conf3.3. redis-8001.conf3.4. redis-8002.conf3.5. redis-8003.conf3.6. redis启动四、 节点握手4.1. 节点握手4.2. 操作日志如下&#xff1a;五、槽位分配和配置主从5.1. 槽…

如何在优雅地Spring 中实现消息的发送和消费

本文将对rocktmq-spring-boot的设计实现做一个简单的介绍&#xff0c;读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节&#xff0c;然后通过一个简单的示例来一步一步的讲解如何使用这个spring-boot-starter工具包来配置&#xff0c;发送和消…

假如有人把支付宝存储服务器炸了

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 净整些没用的责编 | 阿秃近日&#xff0c;在知乎看到了一个问题《假如有人把支付宝存储服务器炸了&#xff08;物理炸&#xff09;&#xff0c;大众在支付宝里的钱是不是就都没有了呢&#xff1f;》外行人问题。网站都是有服…

如何在一分钟内实现微服务系统下的架构可视化

为什么需要架构可视化 随着企业进行微服务架构改造&#xff0c;系统架构复杂度越来越高&#xff0c;架构变化日益频繁&#xff0c;微服务改造后的实际架构模型可能与预期已经产生了巨大差异&#xff0c;架构师或系统运维人员很难准确记忆所有资源实例的构成和交互情况&#xf…

SpringBoot2.x整合Redis 分布式集群_02

文章目录1. maven依赖2. RedisConfig3. RedisUtils4. application.yml5. 单元测试6. redis 客户端查看1. maven依赖 <!--redis Start--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis<…

php mysql 地理位置_PHP MySql和地理位置

我正在写一个网站,主要是在一个纬度25英里范围内寻找地方,长期使用php和mysql.我想知道这样的事情会怎么样&#xff1f;我会将一个lat和long传递给该脚本,并且只从位于我的数据库位置的纬度25英里内的位置拉出它.做这个的最好方式是什么&#xff1f;编辑&#xff1a;我发现这个…

驱动阿里云的高性能网络引擎- 飞天洛神

大家都知道阿里云部件的系统都是以神仙命名的&#xff0c;比如说洛神、伏羲、盘古、女娲等等。而在11月15日的GNTC 云专场峰会上&#xff0c;阿里云资深网络技术专家宗志刚先生首先分享了“驱动阿里云的高性能网络引擎- 飞天洛神”主题演讲。洛神是阿里云飞天系统的虚拟网络系统…

6G为什么不被看好?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小枣君责编&#xff5c;阿秃前段时间&#xff0c;科技部官宣我国正式启动6G研发的新闻&#xff0c;在网上引起了广泛的转发&#xff0c;相信大家都有看到。新闻摘要&#xff1a;2019年11月3日&#xff0c;科技部会同发展改革…

阿里巴巴IPv6应用平台引领下一代互联网

在11月15日的GNTC IPv6专场峰会上&#xff0c;阿里巴巴网络架构师张先国先生首先分享了“阿里巴巴IPv6应用平台引领下一代互联网”主题演讲。演讲中讲述了阿里巴巴为何尽早启动IPv6项目、阿里巴巴PV6应用平台实践、以及阿里巴巴五大应用及集团各种平台如何构建在阿里云平台之上…

SpringBoot 整合 Redis 哨兵机制_02

文章目录1. maven依赖2. RedisConfig3. RedisUtils4. application.yml5. 单元测试6. redis客户端查看1. maven依赖 <!--redis Start--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis<…

mysql慢查询日志分析工具比较_MySQL慢查询日志总结 日志分析工具mysqldumpslow

慢查询日志概念MySQL的慢查询日志是MySQL提供的一种日志记录&#xff0c;它用来记录在MySQL中响应时间超过阀值的语句&#xff0c;具体指运行时间超过long_query_time值的SQL&#xff0c;则会被记录到慢查询日志中。long_query_time的默认值为10&#xff0c;意思是运行10S以上的…

北大教授张大庆:无线感知,让你变老也优雅

受访者 | 张大庆记者 | 胡巍巍出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在国内高校中&#xff0c;北大的校庆日很特殊——5月4日。这一天&#xff0c;也是青年节。北大&#xff0c;是五四运动的策源地。100年来&#xff0c;“爱国、进步、民主、科学”的五四…