docker安装redis7-哨兵模式

说明

系统: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.rhkb.cn/news/98119.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 进程间通信——消息队列

一、消息队列的原理 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型&#xff0c;接收进程可以独立接收含有不同类型值得数据库。 消息实际上是一个数据块&#xff0c;这个数据块是一个结构体&#xff0c;结构体由自己命名。消…

HTML笔记(3)

表单标签 用于登录、注册界面&#xff0c;以采集用户输入的信息&#xff0c;把信息采集到之后&#xff0c;用户一点按钮&#xff0c;就会把这些信息发送到服务端&#xff0c;服务端就可以把这些数据存储到数据库&#xff0c;所以表单是一个非常重要的html标签&#xff0c;它主要…

Appium 2安装与使用java对Android进行自动化测试

文章目录 1、Appium 2.1安装1.1、系统要求1.2、安装Appium2.1服务1.3、安装UiAutomator2驱动1.4、安装Android SDK platform tools1.5、下载OpenJDK 2、Android自动代码例子2.1、安装Android自动化测试元素定位工具Appium Inspector2.2、编写android app自动化测试代码和使用ex…

常见架构类型

目录 1.单机架构 2.应用数据分离架构 3.读写分离架构 4.冷热分离架构 5.垂直分库架构 6.微服务架构 7.容器编排架构 1.单机架构 单机架构是简单的将应用服务和数据库服务部署到同一台机器上。 缺点&#xff1a;存在很大的性能限制。 2.应用数据分离架构 引入负载均衡&a…

Git概述

目录 一、什么是Git 二、什么是版本控制系统 三、Git和SVN对比 SVN集中式 SVN优缺点 Git分布式 Git优缺点 四、Git工作流程 四个工作区域 工作流程 五、Git下载与安装 一、什么是Git 很多人都知道&#xff0c;林纳斯托瓦兹在1991年创建了开源的Linux&#xff0c;从…

鲁棒优化入门(5)—Matlab+Yalmip求解鲁棒优化编程实战

之前的博客&#xff1a;鲁棒优化入门&#xff08;二&#xff09;——基于matlabyalmip求解鲁棒优化问题 去年发布了使用Yalmip工具箱求解鲁棒优化问题的博客之后&#xff0c;陆陆续续有朋友问我相关的问题&#xff0c;有人形容从学习这篇博客到求解论文中的鲁棒优化问题&#x…

【云原生】Docker基本原理及镜像管理

目录 一、Docker概述 1.1 IT架构的演进&#xff1a; 1.2 Docker初始 1.3 容器的特点 1.4 Docker容器与虚拟机的区别 1.5 容器在内核中支持2种重要技术 1.6 Docker核心概念 1&#xff09;镜像 2&#xff09;容器 3&#xff09;仓库 二、安装Docker 2.1 Yum安装Docker…

PCTA 认证考试高分通过经验分享

作者&#xff1a; msx-yzu 原文来源&#xff1a; https://tidb.net/blog/0b343c9f 序言 我在2023年8月10日&#xff0c;参加了 PingCAP 认证 TiDB 数据库专员 V6 考试 &#xff0c;并以 90分 的成绩通过考试。 考试总分是100分&#xff0c;超过60分就算通过考试。试卷…

centos 7.9 部署django项目

1、部署框架 主要组件&#xff1a;nginx、uwsgi、django项目 访问页面流程&#xff1a;nginx---》uwsgi---》django---》uwsgi---》nginx 2、部署过程 操作系统&#xff1a;centos 7.9 配置信息&#xff1a;4核4G 50G 内网 eip &#xff1a;10.241.103.216 部署过程&…

小素数,大智慧

小素数&#xff0c;大智慧 定义判断方法方法1方法2方法3方法4方法5方法6方法7 定义 素数&#xff08;质数&#xff09;&#xff1a;在大于 1 的自然数中&#xff0c;只有 1 和该数本身两个因数的数 素数&#xff08;质数&#xff09;&#xff1a;在大于1的自然数中&#xff0c;…

K8S用户管理体系介绍

1 K8S账户体系介绍 在k8s中&#xff0c;有两类用户&#xff0c;service account和user&#xff0c;我们可以通过创建role或clusterrole&#xff0c;再将账户和role或clusterrole进行绑定来给账号赋予权限&#xff0c;实现权限控制&#xff0c;两类账户的作用如下。 server acc…

ListNode相关

目录 2. 链表相关题目 2.1 合并两个有序链表&#xff08;简单&#xff09;&#xff1a;递归 2.2 删除排序链表中的重复元素&#xff08;简单&#xff09;&#xff1a;一次遍历 2.3 两链表相加&#xff08;中等&#xff09;&#xff1a;递归 2.4 删除链表倒数第N个节点&…

ARM--day4(电灯实验、分析RCC、GPIO控制器,PMOS管、NMOS管的基本原理)

电灯实验代码&#xff1a; .text .global _start _start: /**********LED1点灯**************/RCC_INIT:1.使能GPIOE组控制器&#xff0c;通过RCC_AHB4ENSETR寄存器设置第&#xff3b;5:4&#xff3d;位写&#xff11;---->0x50000A28[4]1ldr r0,0x50000A28ldr r1,[r0]orr…

京东门详一码多端探索与实践 | 京东云技术团队

本文主要讲述京东门详业务在支撑过程中遇到的困境&#xff0c;面对问题我们在效率提升、质量保障等方向的探索和实践&#xff0c;在此将实践过程中问题解决的思路和方案与大家一起分享&#xff0c;也希望能给大家带来一些新的启发 一、背景 1.1、京东门详介绍 1.1.1、京东门…

【MySQL】索引

本期我们好好唠唠索引 目录 一、索引的概念 二、索引的重要性 三、对于索引的理解 3.1 MySQL与磁盘交互的基本单位page 3.2 MySQL中的数据交互过程 3.3 索引建立的过程 3.3.1 page的存储形式 3.3.2 B树的形成 3.4 为什么不用其他数据结构来建立索引 四、聚簇索引和非…

Python tkinter Notebook标签添加关闭按钮元素,及左侧添加存储状态提示图标案例,类似Notepad++页面

效果图展示 粉色框是当前页面&#xff0c;橙色框是鼠标经过&#xff0c;红色框是按下按钮&#xff0c;灰色按钮是其他页面的效果&#xff1b; 存储标识可以用来识别页面是否存储&#xff1a;例如当前页面已经保存用蓝色&#xff0c;未保存用红色&#xff0c;其他页面已经保存用…

【力扣】42. 接雨水 <模拟、双指针、单调栈>

【力扣】42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 目录 【力扣】42. 接雨水题解暴力双指针单调栈 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…

数据结构<树和二叉树>顺序表存储二叉树实现堆排

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

c语言实现MD5算法

MD5加密 文章目录 MD5加密MD5介绍应用场景代码分析 &#xff08;基于qt5.14.2&#xff09;测试记录 MD5介绍 1。 一种单向加密算法&#xff0c;即对明文加密&#xff0c;而不能通过密文得到明文。对原数据的任何改动&#xff0c;哪怕是1字节&#xff0c;得到的MD5值都有很大的区…

vue路由及打包部署

vue路由&#xff08;前端路由&#xff09;&#xff1a;URL中的hash&#xff08;#号&#xff09;与组件之间的对应关系。 一、安装vue路由 npm install vue-router3.5.1 二、定义路由表 路由表主要记录hash&#xff08;#号&#xff09;与组件之间的对应关系。主要定义在route…