Docker部署Redis哨兵模式

news2024/10/6 6:02:37

目录结构

先按照这个目录结构创建。

redis主从配置

redis-master主配置文件

#允许远程连接
bind 0.0.0.0

# 设置Redis实例的端口号
port 6379

# 设置Redis实例的密码
requirepass 123456

# 启用持久化
appendonly yes

redis-slave1从配置文件

#允许远程连接
bind 0.0.0.0

# 设置Redis实例的端口号
port 6380

# 设置Redis实例的密码
requirepass 123456

# 启用持久化
appendonly yes

# 配置master节点信息
replicaof 192.168.3.150 6379

# 设定连接主节点所使用的密码
masterauth 123456

redis-slave2从配置文件

#允许远程连接
bind 0.0.0.0

# 设置Redis实例的端口号
port 6381

# 设置Redis实例的密码
requirepass 123456

# 启用持久化
appendonly yes

# 配置master节点信息
replicaof 192.168.3.150 6379

# 设定连接主节点所使用的密码
masterauth 123456

注意

  1. 端口为docker 内部容器端口,并非对外开放端口,端口一致应该也是可以的,如果想要远程连接必须得映射端口。
  2. masterip所指定的redis-server-master是运行master节点的容器名; 在单体服务器下docker容器间可以使用容器名或者docker容器分配的ip代替,不同服务器用实际的IP地址来通信,想要一部到位就用公网ip。

可通过下方命令查看容器分配的ip

#docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" 容器名/容器id

哨兵sentinel配置

redis-sentinel-master #哨兵1 配置

# 设置哨兵的端口号
port 26379

# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
# 配置哨兵的监控参数
sentinel monitor master 192.168.3.150 6379 2

# 设置 Sentinel 连接主服务器的密码,保持与主节点一致
sentinel auth-pass master 123456

#超过5秒主节点还没有连接上,则认为主节点已经停止
sentinel down-after-milliseconds master 5000

redis-sentinel-master #哨兵2 配置

# 设置哨兵的端口号
port 26379

# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
# 配置哨兵的监控参数
sentinel monitor master 192.168.3.150 6379 2

# 设置 Sentinel 连接主服务器的密码,保持与主节点一致
sentinel auth-pass master 123456

#超过5秒主节点还没有连接上,则认为主节点已经停止
sentinel down-after-milliseconds master 5000

redis-sentinel-master #哨兵3 配置

# 设置哨兵的端口号
port 26379

# 配置哨兵的监控参数
# 格式:sentinel monitor <master-name> <master-ip> <redis-port> <quorum>
# master-name是为这个被监控的master起的名字
# ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# redis-port是被监控节点所监听的端口号
# quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
# 配置哨兵的监控参数
sentinel monitor master 192.168.3.150 6379 2

# 设置 Sentinel 连接主服务器的密码,保持与主节点一致
sentinel auth-pass master 123456

#超过5秒主节点还没有连接上,则认为主节点已经停止
sentinel down-after-milliseconds master 5000

哨兵的配置是一样的,值得注意的是:

  1. 端口不需要强制设定,正如上诉,端口是容器内部端口,可以一致。
  2. master-name 可以是自定义,但必须前后一致。
  3. master-ip,在单体服务器下docker容器间可以使用容器名或者docker容器分配的ip代替,不同服务器用实际的IP地址来通信,想要一部到位就用公网ip。

docker一键部署配置

version: '3'

services:
  redis-master:
    image: redis
    container_name: redis-redis-master
    command: redis-server /usr/local/etc/redis/redis.conf
    ports:
      - "6379:6379"  
    volumes:
      - ./redis-master/conf/redis.conf:/usr/local/etc/redis/redis.conf

  redis-slave1:
    image: redis
    container_name: redis-redis-slave1
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      - ./redis-slave1/conf/redis.conf:/usr/local/etc/redis/redis.conf
    ports:
      - "6380:6380"  
    depends_on:
      - redis-master

  redis-slave2:
    image: redis
    container_name: redis-redis-slave2
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      - ./redis-slave2/conf/redis.conf:/usr/local/etc/redis/redis.conf
    ports:
      - "6381:6381"  
    depends_on:
      - redis-master

  redis-sentinel-master:
    image: redis
    container_name: redis-sentinel-master
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf 
    volumes:
      - ./redis-sentinel-master/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf
    ports:
      - "26379:26379"      
    depends_on:
      - redis-master

  redis-sentinel-slave1:
    image: redis
    container_name: redis-sentinel-slave1
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    ports:
      - "26380:26379"
    volumes:
      - ./redis-sentinel-slave1/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis-slave1

  redis-sentinel-slave2:
    image: redis
    container_name: redis-sentinel-slave2
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    ports:
      - "26381:26379"
    volumes:
      - ./redis-sentinel-slave2/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf
    depends_on:
      - redis-slave2

在redis文件夹下执行

docker-compose up -d

如图所示,表示启动成功。

运行查看主从情况:

主从切换

docker stop redis-redis-master

停掉主服务。

还剩一主一从,并且已经切换至redis-redis-slave2服务上了。

主从数据复制

进入主redis服务,也就是redis-redis-slave2

docker exec -it  redis-redis-slave2 bash


redis-cli -h 127.0.0.1 -p 6381


AUTH 123456

使用redis命令。

添加数据成功,切换到从服务中查看数据。

注意从服务只可读不可写。

写在最后

在实际业务应用中,需要根据具体情况去做redis高可用,并非得一主二从三哨兵,这是可以灵活变动的。在双机热备的情况下,我感觉是可以用一主一从双热备的模式构建redis环境即可满足使用,只是多个节点多个保障罢了!

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

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

相关文章

ALINX黑金AXU3EGB 开发板用户手册RS485通信接口图示DI RO信号方向标识错误说明

MAX3485这类RS485芯片&#xff0c;DI是TTL信号输入&#xff0c;RO是TTL信号输出 如下图是MAX3485手册规格书。 因此 ALINX黑金AXU3EGB 用户手册 Page 43页 图 3-11-1 PL 端 485 通信的连接示意图&#xff0c;MAX3485芯片的DI RO信号输入输出标识方向是错误的&#xff0c;应为蓝…

【Linux】---Linux下基本指令(2)

目录 一、指令详细介绍1.1 cat 指令1.2 echo 指令1.3 more 指令1.4 less 指令1.5 head 指令1.6 tail 指令1.7 date 指令1.8 cal 指令1.9 find 指令1.10 grep 指令1.11 zip/unzip 指令1.12 tar 指令1.13 uname –r 指令&#xff1a; 一、指令详细介绍 1.1 cat 指令 语法&#…

ABINet原理讲解以及运行

论文地址&#xff1a;https://arxiv.org/pdf/2103.06495.pdf 代码地址&#xff1a;https://github.com/FangShancheng/ABINet 前言 OCR技术经历了是从传统方法到深度学习方法的一个过程&#xff0c;所以在这里我也简述一下传统的OCR技术方法。传统OCR方法在简单场景下效果良…

算法沉淀——BFS 解决最短路问题(leetcode真题剖析)

算法沉淀——BFS 解决最短路问题&#xff08;leetcode真题剖析&#xff09; 01.迷宫中离入口最近的出口02.最小基因变化03.单词接龙04.为高尔夫比赛砍树 BFS&#xff08;广度优先搜索&#xff09;是解决最短路径问题的一种常见算法。在这种情况下&#xff0c;我们通常使用BFS来…

智胜未来,新时代IT技术人风口攻略-第五版(弃稿)

文章目录 前言鸿蒙生态科普调研人员画像高校助力鸿蒙高校鸿蒙课程开设占比教研力量并非唯一原因 企业布局规划全盘接纳仍需一段时间企业对鸿蒙的一些诉求 机构入场红利机构鸿蒙课程开设占比机构对鸿蒙的一些诉求 鸿蒙实际体验高校用户群体场景分析企业用户群体场景分析培训机构…

东方博宜 1395. 小丽找数?

东方博宜 1395. 小丽找数&#xff1f; #include<iostream> using namespace std; int main() {int x ;cin >> x ;int cnt 0 ;for (int i 1 ; i < x ; i){ int y i ;int sum 0;while(y > 0){sum y%10 ;y / 10 ;}if(sum%5!0 &&sum%2!0)cnt 1 …

多线程---乐观锁、悲观锁

乐观锁&#xff08;Optimistic Locking&#xff09; 乐观锁则是一种假定数据在并发访问时很少会发生冲突的锁定策略。因此&#xff0c;乐观锁在访问数据时不会立即对数据进行加锁&#xff0c;而是在更新数据时检查数据是否被其他线程修改过。如果数据没有被修改过&#xff0c;则…

shell脚本文本三剑客grep,sed,awk

1. 正则表达式&#xff0c;又称正规表达式、常规表达式 使用字符串来描述、匹配一系列符合某个规则的字符串 正则表达式组成&#xff1a; 普通字符包括大小写字母、数字、标点符号及一些其他符号。 元字符是指在正则表达式中具有特殊意义的专用字符 man 7 regex 可以使用man手…

达梦数据库——数据迁移sqlserver-dm报错问题_未完待续

记录SQL server到达梦数据迁移过程中遇到的问题&#xff0c;持续更新中... 报错情况一&#xff1a;Sql server迁移达梦连接报错’驱动程序无法通过使用安全套接字Q层(SSL)加密与SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted b…

2024开工大吉,便宜寄快递该怎么选呢?

随着春节的结束&#xff0c;大部分人回到了工作的岗位&#xff0c;相信许多人还沉浸在过年的喜悦的氛围中呢&#xff0c;但是我们可以期盼下一个春节的到来了&#xff0c;言归正传&#xff0c;工作中总会收发快递了&#xff0c;尤其是最近&#xff0c;需要联络客户的感情了&…

vtkBoarderWidget及图片坐标包含计算

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example demo解决问题&#xff1a;移动图片到坐标轴的中心&#xff0c;创建一个vtkBoarderWidget控件&#xff0c;移动控件&#xff0c;计算控件与图片的包含关系 关键点…

【linux网络的综合应用】补充网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录

实验拓朴图&#xff1a; 1&#xff09;网关服务器&#xff1a;ens36&#xff1a;12.0.0.254/24&#xff0c;ens33&#xff1a;192.168.100.254/24&#xff1b;Server1&#xff1a;192.168.100.101/24&#xff1b;PC1和server2&#xff1a;自动获取IP&#xff1b;交换机无需配置…

SSL数据加密一定能保证数据的完整性吗?

SSL数据加密是一种常见的网络安全措施&#xff0c;用于保护数据在传输过程中的安全。它通过使用加密算法将数据转换为密文&#xff0c;然后在传输过程中对数据进行保护&#xff0c;以防止数据被窃取或篡改。然而&#xff0c;尽管SSL数据加密可以提供一定程度的数据保密性&#…

光流方向以及 remap 重映射的理解

Date: 2023-09-07 省流&#xff1a;光流法计算prev 到next 的flow&#xff0c;之后flow &#xff08;加上当前位置坐标&#xff09;生成flow_map&#xff0c;利用flow_map 和OpenCV remap 函数&#xff0c;可以将next remap 得到 prev&#xff0c;即remap 后一帧得到前一帧图像…

spring boot学习第十三篇:使用jsonrpc

因为我学习spring boot会有很多内容&#xff0c;所以和spring boot有关的文章使用的pom.xml和application.yml这2个文件的内容就全列出来&#xff0c;不用再单独抽出来了&#xff0c;单独抽出来有点麻烦也不方便学习。 1、pom.xml文件内容如下&#xff1a; <?xml version…

[深度学习] 卷积神经网络“卷“在哪里?

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[深度学习] ❤️ 热门学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

【HTML】SVG实现炫酷的描边动画

前沿 今天闲来无事&#xff0c;看到Antfu大佬的个性签名&#xff0c;觉得还是非常炫酷的&#xff0c;于是也想要搞一个自己的个性签名用来装饰自己的门面&#xff0c;不过由于手写的签名太丑了&#xff0c;遂放弃。于是尝试理解原理&#xff0c;深入研究此等密法&#xff0c;终…

读写分离的利器——MySQL Proxy

0 引言 MySQL Proxy是一个位于客户端和MySQL服务器端之间的程序&#xff0c;通过它可以实现监听和管理客户端与MySQL服务器端之间的通信&#xff0c;最大的作用是实现数据库的读写分离&#xff0c;从而达到负载均衡的目的。 MySQL Proxy的常用用途包括负载平衡、故障分析、查…

纯前端低代码平台demo,vue框架,nodejs,简单的pm2纯前端部署实践

文章目录 目录结构说明本地运行项目启动后的页面demo前端部署打包pm2nginx 后话 前段时间开发了一个纯前端的低代码平台demo&#xff0c;vue框架&#xff0c;nodejs&#xff0c;pm2纯前端部署实践。为此记录一下开发过程以及各方面遇到的问题&#xff0c;并作说明。 表单用了若…

74VHC4040使用方法

74VHC4040芯片是一款12位异步二进制计数器 Q:数据输出引脚。 CP:计数引脚。当CP引脚接收到下降沿&#xff08;从高电平电平变为低电平&#xff09;时&#xff0c;计数器的输出Q会加一。MR:复位输入。当MR引脚接收到高电平时&#xff0c;计数器的所有输出都会变为低电平&#…