redis高可用-哨兵模式搭建(1主2从3哨兵)

news/2024/7/24 12:17:59 标签: redis, 缓存

本篇介绍的搭建方式,是1主2从3哨兵,共6个节点。这6个节点都在同一台机器,所以是伪集群。生产环境,为了达到真正高可用,6个节点要部署到不同机器上。
下面开始搭建,先从整体看一下要做哪些工作

文章目录

  • 1、redis单机下载
  • 2、redis单机版安装
  • 3、搭建一主二从
  • 4、搭建哨兵集群
  • 5、验证主从自动切换

redis_3">1、redis单机下载

先下载redis单机版安装包,单机版redis下载。本篇文章的redis版本,是5.0.9。

redis_5">2、redis单机版安装

进入/opt/目录,建立redis_sentinel目录,将下载好的tar.gz包上传到该目录。
在这里插入图片描述
使用如下解压命令解压tag.gz压缩包:

tar -zxvf redis-5.0.9.tar.gz

进入/opt/redis_sentinel/redis-5.0.9/src目录,输入如下命令编译单机redis

make && make instal

3、搭建一主二从

进入/opt/redis_sentinel目录。
将我们解压编译好的redis-5.0.9在当前目录复制三份,分别重命名为6081、6082、6083

#复制并重命名操作。
cp -r redis-5.0.9 6081
cp -r redis-5.0.9 6082
cp -r redis-5.0.9 6083

我们将6081作为master。将6081现有redis.conf配置文件清空,清空命令

cat /dev/null > redis.conf

然后复制下面的内容到6081的redis.conf配置文件中

#任意ip都可以连接
bind 0.0.0.0

#关闭保护,允许非本地连接
protected-mode no

#端口号
port 6081

#后台运行
daemonize yes

#进程守护文件,就是存放该进程号相关信息的地方
pidfile "/var/run/redis_6081.pid"

#redis数据目录。redis-db目录需要手动建立
dir "/opt/redis_sentinel/6081/redis-db"
#redis日志目录。redis-log目录、redis.log文件都需要自己手动创建
logfile "/opt/redis_sentinel/6081/redis-log/redis.log"

#开启日志形式
appendonly yes

主机配置修改完成。
接下来,分别修改两台从机的配置。
修改6082从机配置

#任意ip都可以连接
bind 0.0.0.0

#关闭保护,允许非本地连接
protected-mode no

#端口号
port 6082

#后台运行
daemonize yes

#进程守护文件,就是存放该进程号相关信息的地方
pidfile "/var/run/redis_6082.pid"

#db等相关目录位置
dir "/opt/redis_sentinel/6081/redis-db"

#开启日志形式
appendonly yes

logfile "/opt/redis_sentinel/6082/redis-log/redis.log"

#主信息

# 指定主机ip地址,将xx.xx.xx.xx替换为主机ip。如果想从本地访问机器,需要填机器的公网ip

replicaof xx.xx.xx.xx 6081

修改6083从机配置

#任意ip都可以连接
bind 0.0.0.0

#关闭保护,允许非本地连接
protected-mode no

#端口号
port 6083

#后台运行
daemonize yes

#进程守护文件,就是存放该进程号相关信息的地方
pidfile "/var/run/redis_6083.pid"

#db等相关目录位置
dir "/opt/redis_sentinel/6083/redis-db"

#开启日志形式
appendonly yes
logfile "/opt/redis_sentinel/6083/redis-log/redis.log"

# 指定主机ip地址,将xx.xx.xx.xx替换为主机ip。如果想从本地访问机器,需要填机器的公网ip
replicaof xx.xx.xx.xx 6081

以上就配置好了redis主从,执行如下三条命令,分别启动1台主机,2台从机。

#启动6081主机
/opt/redis_sentinel/6081/src/redis-server /opt/redis_sentinel/6081/redis.conf
#启动6082从机
/opt/redis_sentinel/6082/src/redis-server /opt/redis_sentinel/6082/redis.conf
#启动6083从机
/opt/redis_sentinel/6083/src/redis-server /opt/redis_sentinel/6083/redis.conf

然后登录6081主机。查看主从搭建是否成功。
出现以下信息,就代表主从搭建已经成功
在这里插入图片描述
但是如果主机挂掉了,此时的架构,主从是无法自动完成主从切换的,所以我们需要上哨兵集群来监视主从并完成自动切换

4、搭建哨兵集群

进入/opt/redis_sentinel目录。建立sentinel_cluster目录,同样执行复制并重命名操作,搞出3个哨兵节点

#复制并重命名操作
cp -r redis-5.0.9 ./sentinel_cluster/26001
cp -r redis-5.0.9 ./sentinel_cluster/26002
cp -r redis-5.0.9 ./sentinel_cluster/26003

先修改26001哨兵的配置,打开sentinel.conf文件,清空原有配置,增加如下配置

bind 0.0.0.0

#关闭保护模式
protected-mode no

#端口号
port 26001

#后台运行
daemonize yes

#哨兵数据目录,sentinel-db目录需要手工创建
dir "/opt/redis_sentinel/sentinel_cluster/26001/sentinel-db"

#哨兵日志文件,sentinel-db目录、sentinel.log文件需要手工创建
logfile "/opt/redis_sentinel/sentinel_cluster/26001/sentinel-log/sentinel.log"

#sentinel节点的唯一标识,哨兵之间判断主机状态以及哨兵选主都会用上这个标识
sentinel myid e42e7bf1b00bd966376a225f95c583026abe3e12

#当设置为 "yes" 时,Sentinel 会阻止在 Redis 服务器中运行 CONFIG REWRITE 命令重写 Redis 服务器的配置文件,以确保 Redis 的配置始终由 Sentinel 负责管理,防止手动修改配置文件导致 Sentinel 管理出现问题
sentinel deny-scripts-reconfig yes

#sentinel montior命令解释: sentinel monitor [主接点名称] [主节点ip] [主节点端口] [quorum]
#quorum:当一台哨兵发现主机下线后,为防止该哨兵误判,需要其他哨兵共同参与判断,quorum的作用就是quorum个哨兵同意后,就可以认为主机真的下线了
#如果从机配置了主机的公网ip,这个地方也要配置主机公网ip
sentinel monitor mymaster xx.xx.xx.xx 6081 2

#超过该时间,主机依然不响应哨兵心跳,哨兵就会判断主机已下线
sentinel down-after-milliseconds mymaster 3000

# 主从切换的超时时间
sentinel failover-timeout mymaster 18000

再修改26002的配置。

bind 0.0.0.0

#关闭保护模式
protected-mode no

#端口号
port 26002

#后台运行
daemonize yes

dir "/opt/redis_sentinel/sentinel_cluster/26002/sentinel-db"

logfile "/opt/redis_sentinel/sentinel_cluster/26002/sentinel-log/sentinel.log"

sentinel myid e2236291aec7c3a6e1c24f8fd8557624df8d6698

sentinel deny-scripts-reconfig yes

sentinel monitor mymaster xx.xx.xx.xx 6081 2

sentinel down-after-milliseconds mymaster 3000

sentinel failover-timeout mymaster 18000

最后修改26003的配置

bind 0.0.0.0

#关闭保护模式
protected-mode no

#端口号
port 26003

#后台运行
daemonize yes

dir "/opt/redis_sentinel/sentinel_cluster/26003/sentinel-db"

logfile "/opt/redis_sentinel/sentinel_cluster/26003/sentinel-log/sentinel.log"

sentinel myid 67a03474bea5aa6b8e1324383aabfb404288009f

sentinel deny-scripts-reconfig yes

sentinel monitor mymaster xx.xx.xx.xx 6081 2

sentinel down-after-milliseconds mymaster 3000

sentinel failover-timeout mymaster 18000

主从配置、哨兵集群配置就搭建完成了。执行如下命令,分别启动3个哨兵节点。

#启动26001哨兵节点
/opt/redis_sentinel/sentinel_cluster/26001/src/redis-sentinel /opt/redis_sentinel/sentinel_cluster/26001/sentinel.conf
#启动26002哨兵节点
/opt/redis_sentinel/sentinel_cluster/26002/src/redis-sentinel /opt/redis_sentinel/sentinel_cluster/26002/sentinel.conf
#启动26003哨兵节点
/opt/redis_sentinel/sentinel_cluster/26003/src/redis-sentinel /opt/redis_sentinel/sentinel_cluster/26003/sentinel.conf

使用ps -ef|grep redis,查看目前的主从、哨兵集群服务是否正常
在这里插入图片描述
可以看到,主从的3个节点,哨兵的3个节点都启动成功了。

5、验证主从自动切换

将现在的主机6081手动kill掉
在这里插入图片描述
可以看到6081节点的进程已经没了,之后我们随便进入一个哨兵节点的日志目录。比如:26001

cd /opt/redis_sentinel/sentinel_cluster/26001/sentinel-log/

看一下sentinel的日志,将谁选为了新主机。

tail -100f sentinel.log

在这里插入图片描述
可以看到,新的主机是6083节点,我们登录6083节点看一下
在这里插入图片描述
可以看到,新的主节点是6083节点。
至此,一主二从三哨兵的redis高可用模式就搭建完成了。下一篇,我们聊一聊原理。哨兵是怎么发现主机宕机并完成主从切换的。


http://www.niftyadmin.cn/n/197989.html

相关文章

14届蓝桥杯Python总结

在比赛的时候大家头脑注意力都高度集中,比较紧绷, 我是不喜欢太紧绷的神经的,这时候电脑就夸得一下关机重启了,我当时真的想说关的好,休息一会(哈哈哈) 重启后我就继续做题,虽然出了…

【Linux】linux上使用lvgl

这里是目录一、linux移植二、编译调试优化2.1、打开log并关闭输入设备2.1.1、关闭输入设备2.1.2、打开log2.2、使用gdb2.2.1、添加编译选项:2.2.2、gdb调试三、程序进一步分析处理3.1、ioctl(FBIOBLANK): Invalid argument3.2、It seems lv_tick_inc() is not calle…

Java多线程之Executor框架

文章目录Executor框架一、Executor框架组成部分二、ThreadPoolExecutor核心参数三、线程池的生命周期四、四种线程池的创建方式五、线程池实现原理六、线程池4种拒绝策略⭐️最全线程知识汇总篇(线程生命周期、线程池创建、线程池实现原理、线程基本方法&#xff09…

【vue】使用 el-upload+axis实现手动多文件上传的代码实现

代码实现 以下是一个使用Element UI的el-upload和Axios实现手动多文件上传的示例代码&#xff1a; <template><div><el-uploadref"upload"action"/upload":auto-upload"false":on-change"handleUploadChange":file-l…

掌握机器学习中的“瑞士军刀”XGBoost,从入门到实战

文章目录1 XGBoost简介2 XGBoost的算法优势3 安装XGBoost库4 回归模型5 分类模型6 XGBoost调参作为机器学习领域中的“瑞士军刀”&#xff0c;XGBoost在各大数据科学竞赛中屡获佳绩。本篇博客将为大家介绍如何使用Python中的XGBoost库&#xff0c;从入门到实战掌握XGBoost的使用…

【JUC】 LockSupport类的park等待和unpark唤醒

【JUC】 LockSupport类的park等待和unpark唤醒 文章目录【JUC】 LockSupport类的park等待和unpark唤醒1. 概述2. API解释3. 代码示例3.1 先等待再唤醒3.2 先唤醒再等待4. 区别4.1 wait和notify的限制4.2 await和signal的限制1. 概述 LockSuppot&#xff1a;用于创建锁和其他同…

安装torch\torch-geometric

(1) cpu&#xff1a; 直接用以下代码顺利完成安装&#xff1a; pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install torch-cluster torch-scatter torch-sparse -i https://pypi.tuna.tsinghua.edu.cn/simple/ (2)gpu: 按照以上的步骤没安装成功&a…

C语言爱心代码大全集—会Ctrl+C就可以表白了

一、C语言爱心代码大全&#xff0c;会CtrlC就可以表白了&#xff01; 博主整理了一个C语言爱心代码大全&#xff0c;里面有C语言爱心代码会动的动态效果和C语言爱心代码大全静态效果&#xff0c;只需复制粘贴就可以用啦&#xff01; 1、动态C语言爱心代码效果图如下&#xff…