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

Redis 哨兵模式模式搭建教程

一、介绍

本文实战搭建一主两从三哨兵,通过使用哨兵模式,可以有效避免某台服务器的 Redis 挂掉出现的不可用问题,保障系统的高可用。

本文通过虚拟机搭建的三台 Centos7 服务器进行测试,使用的 Redis 版本为 6.25。

二、准备环境

IP 地址角色
10.211.55.4redis-master,sentinel
10.211.55.5redis-slave1,sentinel
10.211.55.6redis-slave2,sentinel

三、安装 Redis

本文在一台服务器上展示安装,另外两台同理

3.1、安装 C/C++ 环境,编译 Redis 安装包使用

yum -y install gcc gcc-c++ make

3.2、下载 Redis 安装包

# 切换软件安装目录
cd /usr/local/# 新建 redis 安装目录
mkdir redis# 切换到 redis 安装目录
cd redis# 下载 redis 安装包
wget http://download.redis.io/releases/redis-6.2.5.tar.gz# 解压 redis 安装包
tar -zxvf redis-6.2.5.tar.gz

3.3、编译 redis

# 进入解压后的 redis 目录
cd redis-6.2.5/# 编译
make# 进入编译好的目录(编译成功后 src 目录下会出现编译后的 redis 服务程序 redis-server)
cd src

image-20230921170229468

四、配置 Redis

4.1、配置主节点

# 进入 Redis 的主目录
cd /usr/local/redis/redis-6.2.5# 创建工作目录 tmp
mkdir tmp# 创建日志目录 log
mkdir log# 编辑 Redis 配置
vim redis.conf# 编辑哨兵配置
vim sentinel.conf

redis.conf 配置信息如下(这里仅列举了需要修改的地方,其他地方保持默认即可)

# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0# 允许redis后台运行
daemonize yes# 设置redis日志存放路径
logfile "/usr/local/redis/redis-6.2.5/log/redis_6379.log"# 设置为no,允许外部网络访问
protected-mode no# 修改redis监听端口(可以自定义)
port 6379# pid存放目录
pidfile /var/run/redis_6379.pid# 工作目录,需要创建好目录,可自定义
dir /usr/local/redis/redis-6.2.5/tmp# 设置redis密码
requirepass 123456# 主从同步master的密码
masterauth 123456

哨兵的配置如下(这里仅列举了需要修改的地方,其他地方保持默认即可)

# 修改Sentinel监听端口
port 26380# 允许Sentinel后台运行
daemonize yes# 设置Sentinel日志存放路径
logfile "/usr/local/redis/redis-6.2.5/log/redis_6379_sentinel.log"# 工作目录,需要创建好目录,可自定义
dir /usr/local/redis/redis-6.2.5/tmp# Sentinel 监听 redis 主节点, 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

4.2、配置从节点

这里只演示配置一个从节点,另一个从节点和这个从节点配置一样。

首先需要在从节点的服务器上安装 redis,安装 redis 的方法和在主节点服务器上安装 redis 方法一样。

# 进入 Redis 的主目录
cd /usr/local/redis/redis-6.2.5# 创建工作目录 tmp
mkdir tmp# 创建日志目录 log
mkdir log# 编辑 Redis 配置
vim redis.conf# 编辑哨兵配置
vim sentinel.conf

redis.conf 配置信息如下(这里比主节点只多了一行,用于追随主节点)

# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0# 允许redis后台运行
daemonize yes# 设置redis日志存放路径
logfile "/usr/local/redis/redis-6.2.5/log/redis_6379.log"# 设置为no,允许外部网络访问
protected-mode no# 修改redis监听端口(可以自定义)
port 6379# pid存放目录
pidfile /var/run/redis_6379.pid# 工作目录,需要创建好目录,可自定义
dir /usr/local/redis/redis-6.2.5/tmp# 设置redis密码
requirepass 123456# 主从同步master的密码
masterauth 123456# 多了这一行,用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点,Redis5.0前版本可使用slaveof
replicaof 10.211.55.4 6379

哨兵的配置如下(和主节点的配置一样)

# 修改Sentinel监听端口
port 26380# 允许Sentinel后台运行
daemonize yes# 设置Sentinel日志存放路径
logfile "/usr/local/redis/redis-6.2.5/log/redis_6379_sentinel.log"# 工作目录,需要创建好目录,可自定义
dir /usr/local/redis/redis-6.2.5/tmp# Sentinel 监听 redis 主节点, 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

五、启动 Redis 集群

5.1、启动 redis 集群,主 -> 从

启动 redis 命令如下(从节点类似),下面这条命令执行后没有出错,一般就是启动成功了

/usr/local/redis/redis-6.2.5/src/redis-server /usr/local/redis/redis-6.2.5/redis.conf

查看启动是否成功,如果失败可以看下log文件夹下的日志

ps aux | grep redis

image-20230922143220236

查看集群信息

#切换到主库目录下
/usr/local/redis/redis-6.2.5/src#连接redis
./redis-cli #验证密码
auth 123456#查看集群
info replication

image-20230922143822786

image-20230922144315948

5.2、启动哨兵

启动 redis 命令如下(从节点类似),下面这条命令执行后没有出错,一般就是启动成功了

/usr/local/redis/redis-6.2.5/src/redis-sentinel /usr/local/redis/redis-6.2.5/sentinel.conf

查看启动是否成功,如果失败可以看下log文件夹下的日志

ps aux | grep redis

image-20230922144933930

六、哨兵模式测试

6.1、数据同步测试

使用可视化工具在 10.211.55.4 服务器上新增 key:wahaha 的键值对,查看另外两台从服务器是否同步了数据。
image-20230922150053732

image-20230922150338636

image-20230922150129741

image-20230922150204840

6.2、主节点宕机测试

先模拟一下挂掉 redis 主节点。

  1. 使用 ps aux | grep redis 找到 redis 主节点对应的进程 id
  2. 使用 kill -9 xxx 杀掉 redis 主节点 id

image-20230922153225449

查看从库数据库的哨兵集群状态

image-20230922165700430

image-20230922165847802

七、最后

我是 xiucai,一位后端开发工程师。

如果你对我感兴趣,请移步我的个人博客,进一步了解。

  • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
  • 本文首发于个人博客,未经许可禁止转载💌

相关文章:

Redis 哨兵模式模式搭建教程

一、介绍 本文实战搭建一主两从三哨兵,通过使用哨兵模式,可以有效避免某台服务器的 Redis 挂掉出现的不可用问题,保障系统的高可用。 本文通过虚拟机搭建的三台 Centos7 服务器进行测试,使用的 Redis 版本为 6.25。 二、准备环…...

41. Linux系统配置FTP服务器并在QT中使用QFtp实现文件上传

1. 说明 这篇博客主要记录一些在Linux系统中搭建FTP服务器时踩过的一些坑,以及在使用QFtp上传文件时需要注意的问题。 2. FTP环境搭建 在linux系统中,需要安装vsftpd,可以在终端中输入下面的命令进行安装: sudo apt-get install vsftpd使用上述命令安装后,系统中会有一…...

【新版】系统架构设计师 - 案例分析 - 架构设计<架构风格和质量属性>

个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 案例分析 - 架构设计<架构风格和质量属性>例题1例题2例题3例题4例题5例题6 架构 - 案例分析 - 架构设计<架构风格和质量属性> 例题1 某软件公司为…...

C++ - 红黑树 介绍 和 实现

前言 前面 学习了 AVL树,AVL树虽然在 查找方面始终拥有 O(log N )的极高效率,但是,AVL 树在插入 ,删除等等 修改的操作当中非常的麻烦,尤其是 删除操作,在实现当中细节非常多,在实现上非常难掌控…...

【蓝桥杯选拔赛真题62】Scratch判断小球 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析

目录 scratch判断小球 一、题目要求 编程实现 二、案例分析 1、角色分析...

Spring面试题15:Spring支持几种bean的作用域?singleton、prototype、request的区别是什么?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持几种bean的作用域? Spring支持以下几种Bean的作用域: Singleton(单例):这是Spring默认的作用域。使用@Scope(“singleton”)注解或…...

Spring Boot中Tomcat服务器参数解析及高并发控制

Spring Boot中Tomcat服务器参数解析及高并发控制 Spring Boot 集成了多种服务器,默认使用了Tomcat 服务器。在高并发情况下,合理地配置 Tomcat 服务器参数对于控制请求量和提高系统的稳定性至关重要。本文将解释 Spring Boot 中涉及 Tomcat 服务器的一些…...

Python 运行代码

一、Python运行代码 可以使用三种方式运行Python,如下: 1、交互式 通过命令行窗口进入 Python 并开始在交互式解释器中开始编写 Python 代码 2、命令行脚本 可以把代码放到文件中,通过python 文件名.py命令执行代码,如下&#xff…...

【ROS入门】使用 ROS 话题(Topic)机制实现消息发布与订阅及launch文件的封装

文章结构 任务要求话题模型实现步骤创建工作空间并初始化创建功能包并添加依赖创建发布者代码(C)创建订阅方代码(C)配置CMakeLists.txt执行启动roscore编译启动发布和订阅节点 launch封装执行 任务要求 使用 ROS 话题(Topic)机制…...

【企业级SpringBoot单体项目模板 】——Mybatis-plus自动代码生成

😜作 者:是江迪呀✒️本文关键词:SpringBoot项目模版、企业级、模版☀️每日 一言:我们之所以这样认为,是因为他们这样说。他们之所以那样说,是因为他们想让我们那样认为。所以实践才是检验真理…...

怒刷LeetCode的第14天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:动态规划 方法二:栈 方法三:双指针 第二题 题目来源 题目内容 解决方法 方法一:二分查找 方法二:线性扫描 方法三:递归 第三题 题目来源 …...

c语言 static

1、静态局部变量在程序加载时初始化,静态局部变量的初始值写入到了data段: 如下代码test_symbol.c int f() {static int x 0;return x; }int g() {static int x 9;return x; }使用命令gcc -c test_symbol.c -o test_symbol 编译 使用命令 readelf -a …...

java基础3

输入一个班学生的成绩,先显示所有及格的成绩,再显示所有不及格的成绩,最后显示及格人数和不及格人数 import java.util.Scanner; public class Hello{public static void main(String [] args) {int SIZE5;double grade[] new double[SIZE]…...

LeetCode 1194.锦标赛优胜者

数据准备 Create table If Not Exists Players (player_id int, group_id int); Create table If Not Exists Matches (match_id int, first_player int, second_player int, first_score int, second_score int); Truncate table Players; insert into Players (player_id, g…...

多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

如何用ArkUI实现一个加入购物车效果?

关键词:ArkUI的动效能力,动效开发,ArkUI动画 我们在购买商品时,往往习惯将商品先加入购物车,然后在购物车里确认后再下订单,这是一个典型的访问者模式。对于这个高频场景,增添一些动效可以增加a…...

ChatGLM GPT原理介绍

图解GPT 除了BERT以外,另一个预训练模型GPT也给NLP领域带来了不少轰动,本节也对GPT做一个详细的讲解。 OpenAI提出的GPT-2模型(https://openai.com/blog/better-language-models/) 能够写出连贯并且高质量的文章,比之前语言模型效果好很多。GPT-2是基于Transformer搭建的,相…...

2015年蓝桥杯省赛C/C++ A组 灾后重建题解(100分)

10. 灾后重建 Pear市一共有N&#xff08;<50000&#xff09;个居民点&#xff0c;居民点之间有M&#xff08;<200000&#xff09;条双向道路相连。这些居民点两两之间都可以通过双向道路到达。这种情况一直持续到最近&#xff0c;一次严重的地震毁坏了全部M条道路。 震后…...

Elasticsearch(四)深分页Scroll

一、前言 1.1、scroll与fromsize区别 ES对于fromsize的个数是有限制的&#xff0c;二者之和不能超过1w。当所请求的数据总量大于1w时&#xff0c;可用scroll来代替fromsize。 fromsize在ES查询数据的方式步骤如下&#xff1a; 1、先将用户指定的关键字进行分词&#xff1b;…...

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合

目录 实现思路 会话跟踪的三个方案--引出Jwt令牌技术 1.访问cookie的值,在同一会话的不同请求之间共享数据 2.session 3.现代普遍采用的令牌技术--JWT令牌 JWT令牌技术 ​第一步--生成令牌 1.引入依赖 2.生成令牌 第二步--校验令牌 第三步--登录下发令牌 需要解决的…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...