docker安装redis7-哨兵模式

news2024/11/20 2:33:52

说明

系统:CentOS7.9

redis:7.0.5

由于资源问题本次的部署全部在一台宿主机上通过启动不同的docker容器来完成部署。

搭建哨兵模式之前,首先搭建好主从模式,1主2从,可以参考上一篇文章:docker安装redis7-主从模式。搭建好主从模式之后我们开始部署哨兵,这里部署了3台哨兵,端口分别为26379,26380,26381。也可以参考官网的说明:Redis通过哨兵实现高可用性

修改主从的配置

三台节点的密码一定要保持一致

主节点配置(后续主节点可能会成为从节点)

vim /root/data/redis-master/conf/redis.conf

增加以下内容

masterauth <配置的requirepass的值>

从节点配置

复制主节点的配置到从节点的挂载路径下

cp /root/data/redis-master/conf/redis.conf /root/data/redis-slave1/conf/redis.conf
cp /root/data/redis-master/conf/redis.conf /root/data/redis-slave2/conf/redis.conf

 修改从节点1配置

vim /root/data/redis-slave1/conf/redis.conf

增加以下配置

replicaof 192.168.66.114 6379
# 对外宣称自己的ip
replica-announce-ip 192.168.66.114
# 对外宣称自己的端口
replica-announce-port 6380

修改从节点2配置

vim /root/data/redis-slave2/conf/redis.conf

增加以下配置

replicaof 192.168.66.114 6379
# 对外宣称自己的ip
replica-announce-ip 192.168.66.114
# 对外宣称自己的端口
replica-announce-port 6381

重启主节点和从节点

docker restart redis-master
docker restart redis-slave1
docker restart redis-slave2

  查看主节点信息,确保主从节点没问题

docker exec -it redis-master redis-cli
auth <your password>
info replication

创建挂载目录 

三台哨兵节点的挂载路径用端口来区分不同的配置文件和日志文件

创建文件夹

# 哨兵1
mkdir -p /root/data/redis-sentinel/26379/conf
mkdir -p /root/data/redis-sentinel/26379/data
# 哨兵2
mkdir -p /root/data/redis-sentinel/26380/conf
mkdir -p /root/data/redis-sentinel/26380/data
# 哨兵3
mkdir -p /root/data/redis-sentinel/26381/conf
mkdir -p /root/data/redis-sentinel/26381/data

创建好的结构如下

 三台哨兵的配置文件、数据文件挂载路径如下

# 哨兵1
/root/data/redis-sentinel/26379/data
/root/data/redis-sentinel/26379/data/sentinel.log
/root/data/redis-sentinel/26379/conf/sentinel.conf

# 哨兵2                        
/root/data/redis-sentinel/26380/data/sentinel
/root/data/redis-sentinel/26380/data/sentinel.log
/root/data/redis-sentinel/26380/conf/sentinel.conf

# 哨兵3                        
/root/data/redis-sentinel/26381/data/sentinel
/root/data/redis-sentinel/26381/data/sentinel.log
/root/data/redis-sentinel/26381/conf/sentinel.conf

 哨兵节点配置

通用配置

bind 0.0.0.0
#端口
port 26379
#关闭保护模式
protected-mode no
#使用容器启动时,关闭后台启动,否则容器启动后就会关闭
daemonize no
#日志文件
logfile /data/sentinel.log
#守护进程pid存储文件
pidfile /var/run/redis-sentinel26379.pid
#指定要监控的主机IP地址和端口,redis-master:主节点的名称,名称可以自定义
#最后的值代表最少几个哨兵客观认可主节点下线才同意故障迁移
sentinel monitor redis-master 192.168.66.114 6379 2
#如果redis主节点设了requirepass,需要提供访问密码
sentinel auth-pass redis-master <主节点的密码>
#主机多少秒无响应,则认为挂了,为了测试暂时设置为30秒
sentinel down-after-milliseconds redis-master 30000
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
sentinel parallel-syncs redis-master 1
#故障转移的超时时间,这里设置为三分钟
sentinel failover-timeout redis-master 180000
#sentinel工作目录
dir /data

 哨兵1配置

vim /root/data/redis-sentinel/26379/conf/sentinel.conf

通用配置基础上追加以下内容

# 添加通用配置内容以及追加以下内容
#如果使用docker进行了端口映射,需要配置如下内容
# 哨兵节点向其他节点宣布自己的 IP 地址
sentinel announce-ip 192.168.66.114
# 哨兵节点向其他节点宣布自己的端口号
sentinel announce-port 26379

哨兵2配置

vim /root/data/redis-sentinel/26380/conf/sentinel.conf

通用配置基础上追加以下内容

# 添加通用配置内容,并追加以下内容
#如果使用docker进行了端口映射,需要配置如下内容
# 哨兵节点向其他节点宣布自己的 IP 地址
sentinel announce-ip 192.168.66.114
# 哨兵节点向其他节点宣布自己的端口号
sentinel announce-port 26380

哨兵3配置

vim /root/data/redis-sentinel/26381/conf/sentinel.conf

通用配置基础上追加以下内容

# 添加通用配置内容以及追加以下内容
#如果使用docker进行了端口映射,需要配置如下内容
# 哨兵节点向其他节点宣布自己的 IP 地址
sentinel announce-ip 192.168.66.114
# 哨兵节点向其他节点宣布自己的端口号
sentinel announce-port 26381

完整目录结构

启动所有哨兵节点

启动哨兵1

docker run -p 26379:26379 \
--privileged=true \
-v /root/data/redis-sentinel/26379/data:/data \
-v /root/data/redis-sentinel/26379/conf:/usr/local/etc/redis/ \
--name redis-sentinel1 \
--restart=always \
-d redis:7.0.5 \
redis-sentinel /usr/local/etc/redis/sentinel.conf

查看日志

tail -1000f /root/data/redis-sentinel/26379/data/sentinel.log

 启动哨兵2

docker run -p 26380:26379 \
--privileged=true \
-v /root/data/redis-sentinel/26380/data:/data \
-v /root/data/redis-sentinel/26380/conf:/usr/local/etc/redis/ \
--name redis-sentinel2 \
--restart=always \
-d redis:7.0.5 \
redis-sentinel /usr/local/etc/redis/sentinel.conf

查看日志

tail -1000f /root/data/redis-sentinel/26380/data/sentinel.log

 启动哨兵3

docker run -p 26381:26379 \
--privileged=true \
-v /root/data/redis-sentinel/26381/data:/data \
-v /root/data/redis-sentinel/26381/conf:/usr/local/etc/redis/ \
--name redis-sentinel3 \
--restart=always \
-d redis:7.0.5 \
redis-sentinel /usr/local/etc/redis/sentinel.conf

查看日志

tail -1000f /root/data/redis-sentinel/26381/data/sentinel.log

 查看哨兵节点信息

所有节点的容器内部都是26379端口,因此只用修改容器名称即可进入对应容器查看信息

# docker exec -it <container-name> redis-cli -p 26379
docker exec -it redis-sentinel1 redis-cli -p 26379
# docker exec -it redis-sentinel2 redis-cli -p 26379
# docker exec -it redis-sentinel3 redis-cli -p 26379
# 查看容器信息
sentinel master redis-master

容灾验证

 关闭主机点

模拟master挂掉场景,执行以下命令后等待30秒

docker stop redis-master
# 以上命令执行后等待30秒

30秒后哨兵监控到主节点挂掉了,开始重新选举,选举6380端口的从节点作为主节点(每次选举都是随机的不一定都是6380端口的节点)

 重新启动redis-master节点

docker start redis-master
# 金融容器内部当前节点信息
docker exec -it redis-master redis-cli
auth 123123
info replication

当前节点的角色变为slave

 查看redis-slave1节点的信息,角色已经变为master

 查看redis-slave2节点信息

 数据验证

主节点挂掉重启之后可以验证下数据是否丢失,这里只验证一个节点,其他节点自行验证

 最终效果

一台宿主机上启动6个docker容器,分别为1主2从3哨兵

 部署遇到的问题

WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy

解决方案:

挂载配置文件的时候使用目录挂载映射,不要直接挂载文件

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128

解决方案:

# 在所有从节点的配置文件中增加以下配置
tcp-backlog 511

sentinel-invalid-addr sentinel 8ca6429840821d38651cb8bb64268dd1856541eb 192.168.66.114 6379 @ redis-master 192.168.66.114 6379

解决方案:
1.使用docker启动容器的时候,如果对外暴露了端口,需要在哨兵的配置文件中对外宣称自己的ip和端口,增加一下配置:

# 哨兵节点向其他节点宣布自己的 IP 地址
sentinel announce-ip 192.168.66.114
# 哨兵节点向其他节点宣布自己的端口号
sentinel announce-port 26381

2.每台哨兵启动后都会在自己的配置文件中写入下面的内容。有可能是某个节点的myid重复了,停掉对应的哨兵节点,删除myid,重启哨兵节点

 结束语

以上是所有部署哨兵模式的流程,如果有问题欢迎大家评论

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

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

相关文章

OBJ三维模型快速转换为glTF2.0格式

OBJ obj文件是Alias|Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式&#xff0c;大部分3D软件都支持导入、导出obj格式的模型文件。每个obj模型一般由xxx.obj的模型文件、xxx.mtl材质信息文件、xxx.jpg纹理贴图文件组成。 glT…

2235.两整数相加:19种语言解法(力扣全解法)

【LetMeFly】2235.两整数相加&#xff1a;19种语言解法&#xff08;力扣全解法&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/add-two-integers/ 给你两个整数 num1 和 num2&#xff0c;返回这两个整数的和。 示例 1&#xff1a; 输入&#xff1a;num…

vue的开发者工具下载『保姆级别』

1.先进官网 极简插件_Chrome扩展插件商店_优质crx应用下载 (zzzmh.cn) 2.搜索vue devtools&#xff0c;点击进去 3.下载插件 4.下载到文件下你自己的文件下&#xff1a;我的是下载到E盘下。 5.压缩到当前目录下 6.电脑进入拓展程序&#xff08;不同的浏览器操作不同&#xff…

IIC控制器与MPU6050

MPU6050 MPU6050是一个运动处理传感器&#xff0c;其内部集成了3轴加速度传感器和3轴陀螺仪&#xff08;角速度传感器&#xff09;,以及一个可扩展数字运动处理器 MPU6050主要参数 可测量X、Y、Z轴三个方向的角速度 可编程设置角速度测量范围为250、500、1000、2000/sec 可…

1个免费黑科技,AI制作特效大片完整教程

这个月初有许多朋友在转发一些AI生成视频&#xff0c;像刀郎的《罗刹海市》这种特效很酷的视频&#xff0c;播放量破100w的不在少数&#xff0c;下面就是我整理的几个账号数据&#xff01; 我随机找出了3个AI视频&#xff0c;数据量都在100w到800w播放量之间&#xff0c;但看了…

SQL-Injection

文章目录 引入columns表tables表schemata表以sqli-labs靶场为例路径获取常见方法文件读取函数文件写入函数防注入 数字型注入(post)字符型注入(get)搜索型注入xx型注入 引入 在MYSQL5.0以上版本中&#xff0c;mysql存在一个自带数据库名为information_schema,它是一个存储记录…

python通过S7协议读取西门子200smart数据

发现网上很多关于python通过s7协议控制200smart的代码都失败&#xff0c;我猜应该是版本的问题。自己捣鼓了半天&#xff0c;终于测试成功 from snap7 import util,clientmy_plc client.Client() #建立一个客户端对象 my_plc.set_connection_type(3) #如果是200smart,必须有此…

2023 最新 小丫软件库app开源源码 PHP后端

上传了源码解压之后&#xff0c;在admin/public/config.php修改后台登录账号和密码 后台地址&#xff1a;域名或者ip/admin 然后自己修改配置即可 后端搭建完成&#xff0c;现在导入iapp源码 导入iapp源码之后&#xff0c;修改mian.iyu载入事件的对接api和url就可以打包了 sss …

TPS_C++版本及功能支持备注

TPS_C版本及功能支持备注 相关参考链接C23&#xff1a;https://zh.cppreference.com/w/cpp/23 相关参考链接C20&#xff1a;https://zh.cppreference.com/w/cpp/20 相关参考链接C17&#xff1a;https://zh.cppreference.com/w/cpp/17 相关参考链接C14&#xff1a;https://zh.cp…

【Linux】make/makefile自动化构建工具

文章目录 前言一、什么是make/makefile&#xff1f;二、依赖关系和依赖方法2.1 makefile中创建文件2.2 makefile中删除文件2.3 stat指令查看文件的三种时间&#xff08;ACM&#xff09;2.4 伪目标文件&#xff08;.PHONY&#xff09; 三、Makefile中的一些特殊符号3.1 $ 和 $^3…

Spring基础学习

一 Spring 框架概述 1.1 Spring 概述 轻量级开源的 JavaEE 框架。解决企业开发应用的复杂性。 Spring的核心部分&#xff1a; IOC&#xff1a;控制反转(Inversion of Controll)&#xff0c;将创建对象的过程交由 Spring 管理AOP&#xff1a;面向切面编程&#xff08;Aspect …

云服务器-Docker容器-系统搭建部署

一、引言 最近公司在海外上云服务器&#xff0c;作者自己也搞了云服务器去搭建部署系统&#xff0c;方便了解整体架构和系统的生命周期&#xff0c;排查解决问题可以从原理侧进行分析实验。虽然用的云不是同一个&#xff0c;但是原理都是相通的。 二、选型 作者选用的是腾讯云…

进入嵌入式之后究竟会干些什么?

嵌入式被称为互联网、计算机行业的万金油&#xff0c;未来的就业方向多种多样&#xff0c;工作内容也不一而足&#xff0c;但可以分为如下几个角度&#xff1a; 架构师 在大型企业中&#xff0c;一个人很难承担过多的任务&#xff0c;因为这会带来很大的风险。大企业更需要在…

Find My资讯|苹果Vision Pro开发者需将设备配对 AirTag

最近苹果Vision Pro获开发者申请&#xff0c;苹果要求获批的申请者使用 Measure and Fit 应用确认合适的佩戴尺寸&#xff0c;并会根据申请者提交的信息&#xff0c;定制不同的 Vision Pro 开发者套件&#xff0c;以便于契合申请者的面部特征&#xff0c;提供更好的佩戴体验。 …

N4010A|安捷伦Agilent N4010A蓝牙测试仪

描述 N4010A是一款多功能多格式无线连接测试解决方案&#xff0c;您可以针对R&D、集成和验证或制造中的特定蓝牙、无线局域网(WLAN) 802.11a、b和g以及ZigBee应用进行配置。 特征 测试多种技术的灵活性通过快速、准确的测量提高生产量从开发到生产的可重复测量结果适应新…

MySQL索引下推讲解

文章目录 一、什么是索引下推二、MySQL架构图三、DEMO演示过程 一、什么是索引下推 索引条件下推&#xff08;Index Condition Pushdown&#xff0c;ICP&#xff09;是MySQL 5.6版本后引入的一项新特性。它通过减少回表的次数来提高数据库的查询效率。 在不使用ICP的情况下&am…

Optional的基础运用

Optional的基础运用 简介代码示例 简介 代码示例 package org.example;import org.junit.Test;import java.util.Optional;public class OptionalTest {Testpublic void advance() {String str "hello";str null;// of(T t):封装数据t生成Optional对象&#xff0c…

贝叶斯推理问题、MCMC和变分推理

一、介绍 贝叶斯推理是统计学中的一个主要问题&#xff0c;在许多机器学习方法中也会遇到。例如&#xff0c;用于分类的高斯混合模型或用于主题建模的潜在狄利克雷分配都是在拟合数据时需要解决此类问题的图形模型。 同时&#xff0c;可以注意到&#xff0c;贝叶斯推理问题有时…

2018年9月全国计算机等级考试真题(C语言二级)

2018年9月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 若有以下程序 main() { int a6, b0, c0; for(;a;) { ba; a-c; } printf("%d,%d,%d\n",a,b,c); } 则程序的输出结果是 A. 1,14,3 B. 0,18,3 C. …

【C语言】指针的进阶

目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.&数组名和数组名区别 3.数组指针的使用 四、数组参数与指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 六、函数指针数组 七、指向函数指针数组的指针…