当前位置: 首页 > 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,一位后端开发工程师。

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

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

相关文章:

  • 41. Linux系统配置FTP服务器并在QT中使用QFtp实现文件上传
  • 【新版】系统架构设计师 - 案例分析 - 架构设计<架构风格和质量属性>
  • C++ - 红黑树 介绍 和 实现
  • 【蓝桥杯选拔赛真题62】Scratch判断小球 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析
  • Spring面试题15:Spring支持几种bean的作用域?singleton、prototype、request的区别是什么?
  • Spring Boot中Tomcat服务器参数解析及高并发控制
  • Python 运行代码
  • 【ROS入门】使用 ROS 话题(Topic)机制实现消息发布与订阅及launch文件的封装
  • 【企业级SpringBoot单体项目模板 】——Mybatis-plus自动代码生成
  • 怒刷LeetCode的第14天(Java版)
  • c语言 static
  • java基础3
  • LeetCode 1194.锦标赛优胜者
  • 多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)
  • 如何用ArkUI实现一个加入购物车效果?
  • ChatGLM GPT原理介绍
  • 2015年蓝桥杯省赛C/C++ A组 灾后重建题解(100分)
  • Elasticsearch(四)深分页Scroll
  • JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合
  • Sparta工具用法描述之信息收集(漏洞分析)
  • Vue复选框批量删除示例
  • Docker自定义镜像
  • ardupilot的编译过程
  • Unity中Shader实现模板测试Stencil
  • 多线程与并发
  • 手写call方法
  • 基于FPGA的图像直方图统计实现,包括tb测试文件和MATLAB辅助验证
  • 数据库:Hive转Presto(一)
  • Responder
  • 基于下垂控制的并网逆变器控制MATLAB仿真模型