当前位置: 首页 > news >正文

【redis】redis高可用 哨兵模式 一主二从三哨兵部署教程

哨兵模式:自动主从同步、自动选举主节点;基本可以满足大部分业务场景;
在针对大规模数据和高并发请求的场景、数据不能丢失,才需要用到集群模式。

本文教程基于redis3 , centos 8 stream操作系统,理论上来说 redis3也好 redis6也罢 ,centos和类centos系统都通用。

文章目录

  • 安装redis
  • 配置redis
    • 配置redis.conf
    • 配置sentinel.conf
  • 启动redis和哨兵
  • springboot项目整合
    • maven依赖
    • yml配置
  • 验证
  • 图形界面

安装redis

  1. 下载redis包、解压

    如果没有c++环境 需要先安装

    yum -y install gcc gcc-c++ make
    

    下载redis:

    wget http://download.redis.io/releases/redis-3.2.6.tar.gz
    

    解压redis:

    tar -zxvf redis-3.2.6.tar.gz
    

    进入redis的解压目录
    (假设当前在在 /app/redis/ 目录下)

    cd redis-3.2.6/
    

    编译redis

    make
    

    进入src目录

    cd src
    

    编译成功src目录下会有 redis-server 以及 redis-sentinel文件

配置redis

配置redis.conf

进入目录:

cd /app/redis/redis-3.2.6/

编辑配置文件:

vim redis.conf

核心修改地方:

主节点


# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0# 允许redis后台运行
daemonize yes# 设置redis日志存放路径 需要先手动touch创建该文件
logfile "/app/redis/log/redis_6379.log"# 设置为no,允许外部网络访问
protected-mode no# redis端口
port 6379# 设置redis密码
requirepass 123456# 主从同步master的密码
masterauth 123456# appendonly 一般保持默认的no就可以 , 取决业务是否需要开启AOF
appendonly no

从节点1

(核心区别在于配置文件最后一行需要指定主节点)

tips:由于博主在同一台机器部署,所以port和logfile也有变动;
同一机器部署时,需要复制一个redis.tar包 解压,将改好的从节点配置文件复制过去,并编译


# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0# 允许redis后台运行
daemonize yes# 设置redis日志存放路径 需要先手动touch创建该文件
logfile "/app/redis/log/redis_6389.log"# 设置为no,允许外部网络访问
protected-mode no# redis端口 博主在同一台机器模拟部署,所以改了端口
port 6389# 设置redis密码
requirepass 123456# 主从同步master的密码
masterauth 123456# appendonly 一般保持默认的no就可以 , 取决业务是否需要开启AOF
appendonly no# 从节点核心配置:指定主节点地址 redis5以上为replicaof 
slaveof 192.168.0.1 6379

从节点2:
与从节点1相似,改了个port


# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0# 允许redis后台运行
daemonize yes# 设置redis日志存放路径 需要先手动touch创建该文件
logfile "/app/redis/log/redis_6399.log"# 设置为no,允许外部网络访问
protected-mode no# redis端口 博主在同一台机器模拟部署,所以改了端口
port 6399# 设置redis密码
requirepass 123456# 主从同步master的密码
masterauth 123456# appendonly 一般保持默认的no就可以 , 取决业务是否需要开启AOF
appendonly no# 从节点核心配置:指定主节点地址 redis5以上为replicaof 
slaveof 192.168.0.1 6379

注意: 哨兵模式不需要开启 cluster-enable!

配置sentinel.conf

主节点:

# 修改Sentinel监听端口
port 26379# 设置为no,允许外部网络访问 (不能漏了)
protected-mode no# 允许Sentinel后台运行
daemonize yes# 设置Sentinel日志存放路径 同样需要手动touch创建
logfile "/app/redis/log/redis_6379_sentinel.log"#  mymaster:master名称可自定义,127.0.0.1 6379 :redis主节点IP和端口,2 :表示多少个Sentinel认为redis主节点失效时,才算真正失效
sentinel monitor mymaster 127.0.0.1 6379 2# 配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒   
sentinel down-after-milliseconds mymaster 10000# 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。
sentinel failover-timeout mymaster 60000# 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。
sentinel parallel-syncs mymaster 2# 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同
sentinel auth-pass mymaster 123456

两个从节点配置都是和主节点一样的,由于博主是同机器模拟部署,所以改了个port

从节点1修改部分:

# 修改Sentinel监听端口
port 26389

从节点2修改部分:

# 修改Sentinel监听端口
port 26399

启动redis和哨兵

cd /app/redis/

先启动redis主节点

./redis-3.2.6/src/redis-server ./redis-3.2.6/redis.conf

再启动redis两个从节点 (注意将路径和配置文件名 改成自己的)

./redis_s1/src/redis-server ./redis_s1/redis_s1.conf
./redis_s2/src/redis-server ./redis_s2/redis_s2.conf

先启动sentinel哨兵主节点

./redis-3.2.6/src/redis-sentinel ./redis-3.2.6/sentinel.conf

再启动sentinel哨兵两个从节点 (注意将路径和配置文件名 改成自己的)

./redis_s1/src/redis-sentinel ./redis_s1/sentinel_s1.conf
./redis_s2/src/redis-sentinel ./redis_s2/sentinel_s2.conf

springboot项目整合

maven依赖

       <!-- Spring Data Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Lettuce Core, 用于Redis客户端连接 --><dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></dependency>

yml配置

特别注意:nodes配置的是哨兵的端口,所以这也是为什么我们在sentinel.conf里面也要关闭protected mode的原因

spring:redis:sentinel:master: mymasternodes: 192.168.0.1:26379,192.168.0.1:26380,192.168.0.1:26381##redis 单机环境配置
#    port: 6379
#    host: 192.168.0.1
#    ssl: falsepassword: 123456database: 1

验证

  1. 我们可以通过可视化图形界面来验证, 在主节点增加一个key,我们打开从节点 发现key自动同步过去了,说明自动同步成功; 回到服务器将主节点kill -9 杀掉,在从节点1新增一个key, 从节点2能自动同步 ; 重新启动主节点 主节点也能拉取到从节点新增的数据 ,则表明集群正常运转。
    在这里插入图片描述
  2. 可以通过redis自带的cli 检验:
cd /app/redis/redis-3.2.6/src
./redis-cli 

输入密码

auth 123456

查看集群

info replication

按照教程步骤 6379端口对应的redis 本来是主节点,博主将主节点kill -9,并重启6379。
如下图:成功选举了6389为主节点,6379变成了slave
在这里插入图片描述

图形界面

redis图形界面 我们可以使用 Another-Redis-Desktop-Manager 更加好用 ,在github即可下载.

可以直连sentinel,需要注意的是:当勾选了sentinel port填写的是sentinel的端口, password不要输入密码,而是在redis node password输入密码
在这里插入图片描述

如果是普通的连接,如下即可:
在这里插入图片描述

新版的Another-Redis-Desktop-Manager 也支持查看redis stream格式(redis 5的新特性)的数据

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Umi-OCR:功能强大且易于使用的本地照片识别软件
  • SQLServer设置端口(上)
  • nvm:Node.js 版本管理工具
  • 【小尘送书-第十六期】码农职场:IT人求职就业手册
  • Centos 8系统ext4文件系统类型进行扩容缩容 (LVM)
  • 探索Perl正则表达式的奥秘:复合模式的高级应用
  • JavaScript基础——数据类型转换
  • 测试面试宝典(四十七)— 功能测试用例一般包含哪些内容
  • 【Python机器学习】支持向量机——SMO高效优化算法
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 团队关系判定(100分) - 三语言AC题解(Python/Java/Cpp)
  • 程序员面试“八股文”:助力成长还是应试枷锁?
  • ps基础操作1
  • 【c++】自定义函数Rounding (余归函数)
  • 学生管理系统之界面设计
  • python 学习: np.pad
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • C# 免费离线人脸识别 2.0 Demo
  • ES6 ...操作符
  • gulp 教程
  • idea + plantuml 画流程图
  • Octave 入门
  • springMvc学习笔记(2)
  • 阿里云Kubernetes容器服务上体验Knative
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 猴子数据域名防封接口降低小说被封的风险
  • 前端临床手札——文件上传
  • 区块链技术特点之去中心化特性
  • 设计模式走一遍---观察者模式
  • 深入浅出webpack学习(1)--核心概念
  • 在Unity中实现一个简单的消息管理器
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​Java并发新构件之Exchanger
  • "无招胜有招"nbsp;史上最全的互…
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (南京观海微电子)——示波器使用介绍
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .htaccess 强制https 单独排除某个目录
  • .Net - 类的介绍
  • .NET 5种线程安全集合
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @31省区市高考时间表来了,祝考试成功
  • @synthesize和@dynamic分别有什么作用?
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?