使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群
文章目录
- 使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群
- Redis 主从架构简介
- Redis Sentinel 简介
- 配置文件
- 1. 主节点配置 (`redis-master.conf`)
- 2. 从节点配置 (`redis-slave1.conf` 和 `redis-slave2.conf`)
- `redis-slave1.conf`
- `redis-slave2.conf`
- 3. Sentinel 配置 (`sentinel-26379.conf` 和 `sentinel-26380.conf`)
- `sentinel-26379.conf`
- `sentinel-26380.conf`
- Docker Compose 配置
- 关键知识点扩展
- Docker Compose 文件解析
使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群
Redis 主从架构简介
-
Redis 主从架构:
Redis 主从架构是一种数据复制机制,使得数据从主节点同步到多个从节点,从而提升系统的高可用性和性能。主节点接收写操作,并将这些操作同步到从节点,以实现数据的冗余和数据一致性。 -
主从节点的配置:
redis-slave1.conf
配置解析:slaveof 10.255.96.33 6379
: 配置从节点docker_redis_slave1
作为主节点docker_redis_master
的从节点。在 Docker 环境中,可以通过主节点的容器名来进行访问,而不需要手动配置 IP 地址。port 6380
: 配置从节点的监听端口号。logfile "redis-6380.log"
: 配置从节点的日志文件。appendonly yes
: 配置 Redis 使用 AOF 文件进行持久化。
redis-slave2.conf
配置解析:slaveof 10.255.96.33 6379
: 配置从节点docker_redis_slave2
作为主节点docker_redis_master
的从节点。port 6381
: 配置从节点的监听端口号。logfile "redis-6381.log"
: 配置从节点的日志文件。appendonly yes
: 配置 Redis 使用 AOF 文件进行持久化。
-
主节点的密码认证:
为增强安全性,可以配置masterauth
用于从节点与主节点之间的安全认证,确保只有授权的客户端可以访问主节点。此外,可以通过requirepass
配置客户端连接 Redis 服务器的密码。
Redis Sentinel 简介
-
Redis Sentinel 作用:
Redis Sentinel 是 Redis 集群中的监控系统,可以监控 Redis 主从架构中的主节点状态。当主节点不可用时,Sentinel 可以触发故障转移,将流量切换到一个新的主节点,确保集群的高可用性。 -
Sentinel 配置文件解析:
sentinel-26379.conf
配置解析:sentinel monitor mymaster 10.255.96.33 6379 2
: 配置 Sentinel 监控主节点10.255.96.33
上的端口6379
,需要至少 2 个 Sentinel 判定主节点失效后,才进行自动故障转移。sentinel auth-pass mymaster 123456
: 配置连接主节点的密码,以增加安全性。sentinel down-after-milliseconds mymaster 10000
: 主节点在连续 10 秒无法响应后判定为失效。sentinel failover-timeout mymaster 60000
: 故障转移的超时时间为 60 秒。
sentinel-26380.conf
配置解析:sentinel monitor mymaster 10.255.96.33 6379 2
: 配置 Sentinel 监控主节点,并允许多个 Sentinel 集群之间的协调。sentinel known-sentinel mymaster 10.255.96.33 26379 436c81e541838009d8a22509ef2172399da4efa6
: 配置多个 Sentinel 的信息,以确保集群内各个 Sentinel 之间的通信和协调。
-
集群中多个 Sentinel 的配置:
使用sentinel known-sentinel
配置多个 Sentinel 以确保集群的冗余性和高可用性。Sentinel 之间通过 IP 和端口进行通信,以确保集群的协调。如果一个 Sentinel 因故障或网络问题失效,其他 Sentinel 可以接管并继续监控主节点。
配置文件
1. 主节点配置 (redis-master.conf
)
# Redis 主节点监听的端口
port 6379# 日志文件
logfile "redis-6379.log"# 开启持久化
appendonly yes# 持久化文件名
appendfilename "appendonly.aof"# 设置认证密码(可选)
# requirepass 123456
2. 从节点配置 (redis-slave1.conf
和 redis-slave2.conf
)
redis-slave1.conf
port 6380
logfile "redis-6380.log"
appendonly yes
appendfilename "appendonly.aof"# 配置主节点
slaveof 10.255.96.33 6379# 主节点认证密码(如主节点配置了密码则必须启用)
# masterauth 123456
redis-slave2.conf
port 6381
logfile "redis-6381.log"
appendonly yes
appendfilename "appendonly.aof"# 配置主节点
slaveof 10.255.96.33 6379# 主节点认证密码(如主节点配置了密码则必须启用)
# masterauth 123456
3. Sentinel 配置 (sentinel-26379.conf
和 sentinel-26380.conf
)
sentinel-26379.conf
port 26379
dir "/app/application"# Sentinel 的唯一标识
sentinel myid 436c81e541838009d8a22509ef2172399da4efa6# 监控主节点
sentinel monitor mymaster 10.255.96.33 6379 2# 判定节点失效的时间
sentinel down-after-milliseconds mymaster 10000# 故障转移的超时时间
sentinel failover-timeout mymaster 60000# 从节点信息
sentinel known-replica mymaster 10.255.96.33 6380
sentinel known-replica mymaster 10.255.96.33 6381# 其他 Sentinel 信息
sentinel known-sentinel mymaster 10.255.96.33 26380 978fee4f6bdf60e79468ead69b81deceb7a7bb44
sentinel current-epoch 0
sentinel-26380.conf
port 26380
dir "/app/application"# Sentinel 的唯一标识
sentinel myid 978fee4f6bdf60e79468ead69b81deceb7a7bb44# 监控主节点
sentinel monitor mymaster 10.255.96.33 6379 2# 判定节点失效的时间
sentinel down-after-milliseconds mymaster 10000# 故障转移的超时时间
sentinel failover-timeout mymaster 60000# 从节点信息
sentinel known-replica mymaster 10.255.96.33 6380
sentinel known-replica mymaster 10.255.96.33 6381# 其他 Sentinel 信息
sentinel known-sentinel mymaster 10.255.96.33 26379 436c81e541838009d8a22509ef2172399da4efa6
sentinel current-epoch 0
Docker Compose 配置
version: "3.0"services:docker_redis_master:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_mastervolumes:- ./redis-master.conf:/app/application/redis-temp/redis-master.confcommand: redis-server /app/application/redis-temp/redis-master.confports:- 6379:6379network_mode: hostdocker_redis_slave1:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_slave1volumes:- ./redis-slave1.conf:/app/application/redis-temp/redis-slave1.confcommand: redis-server /app/application/redis-temp/redis-slave1.confports:- 6380:6380network_mode: hostdocker_redis_slave2:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_slave2volumes:- ./redis-slave2.conf:/app/application/redis-temp/redis-slave2.confcommand: redis-server /app/application/redis-temp/redis-slave2.confports:- 6381:6381network_mode: hostdocker_redis_sentinel26379:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_sentinel26379volumes:- ./sentinel-26379.conf:/app/application/redis-temp/sentinel-26379.confcommand: redis-sentinel /app/application/redis-temp/sentinel-26379.confports:- 26379:26379network_mode: hostdocker_redis_sentinel26380:image: harbor-ioscar.cbf.com/hawk/redis:5.0.14container_name: docker_redis_sentinel26380volumes:- ./sentinel-26380.conf:/app/application/redis-temp/sentinel-26380.confcommand: redis-sentinel /app/application/redis-temp/sentinel-26380.confports:- 26380:26380network_mode: host
关键知识点扩展
-
主从复制的原理
- 主节点负责写操作,从节点通过
slaveof
指令与主节点建立连接并同步数据。 - 数据同步分为全量同步和增量同步。
- 主节点负责写操作,从节点通过
-
Sentinel 的工作原理
- Sentinel 通过心跳机制监控主从节点状态。
- 当主节点失效时,Sentinel 通过选举机制选择一个从节点提升为主节点,并更新其他从节点的同步目标。
-
Docker 持久化与数据挂载
- 配置文件通过
volumes
映射至容器内部,方便管理与更新。 - 数据目录需要挂载到宿主机路径,以保证数据不会因为容器重启而丢失。
- 配置文件通过
-
高可用性
- 使用多个 Sentinel 节点可以避免单点故障,但需要合理配置
quorum
参数,确保故障判定的准确性。
- 使用多个 Sentinel 节点可以避免单点故障,但需要合理配置
-
主从架构的高可用性:
主从架构通过数据复制和故障转移机制提高 Redis 的高可用性。当主节点失效时,从节点会自动接管,并将数据状态保持一致 -
Sentinel 的故障转移机制:
sentinel down-after-milliseconds
: 设定主节点在多长时间内无法响应PING指令后判定为失效。sentinel failover-timeout
: 故障转移的最大等待时间,确保故障转移及时完成。sentinel config-epoch
和sentinel leader-epoch
: 用于协调整个集群内的 Sentinel 状态。
Docker Compose 文件解析
- 挂载配置文件:
在 Docker Compose 文件中,volumes
选项用于将 Redis 配置文件挂载到容器中,使得容器可以使用指定的配置启动。挂载配置文件有助于统一管理和快速配置多个 Redis 实例。 - 网络模式:
network_mode: host
: 这种模式下,容器共享主机网络,不需要配置额外的网络路由。虽然简单易用,但可能会增加安全风险,尤其是在开放端口时。external: true
: 如果使用外部网络,确保容器可以访问到网络服务,避免网络隔离问题。
- 命令配置:
command: redis-server /app/application/redis-temp/redis-master.conf
: 配置 Redis 主节点启动使用的配置文件路径。command: redis-sentinel /app/application/redis-temp/sentinel-26379.conf
: 配置 Redis Sentinel 启动使用的配置文件路径。
相关文章:
使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群
文章目录 使用 Docker Compose 部署 Redis 主从与 Sentinel 高可用集群Redis 主从架构简介Redis Sentinel 简介配置文件1. 主节点配置 (redis-master.conf)2. 从节点配置 (redis-slave1.conf 和 redis-slave2.conf)redis-slave1.confredis-slave2.conf3. Sentinel 配置 (sentin…...

警惕!手动调整服务器时间可能引发的系统灾难
警惕!手动调整服务器时间可能引发的系统灾难 1. 鉴权机制1.1 基于时间戳的签名验证1.2 基于会话的认证机制(JWT、TOTP) 2. 雪花算法生成 ID 的影响2.1 时间戳回拨导致 ID 冲突2.2 ID 顺序被打乱 3. 日志记录与审计3.1 日志顺序错误3.2 审计日…...

MySQL追梦旅途之性能优化
1、索引优化 索引可以显著加速查询操作,但过多或不适当的索引也会带来负面影响(如增加写入开销)。因此,选择合适的索引至关重要。 创建索引: 为经常用于WHERE子句、JOIN条件和ORDER BY排序的列创建索引。 CREATE I…...

【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例
从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例 基本概念聚类分类聚类算法的评价指标(1)内部指标轮廓系数(Silhouette Coefficient)DB指数(Davies-Bouldin Index)Dunn指数 (…...

基于深度Q网络(Deep Q-Network,DQN)的机器人路径规划,可以自定义地图,MATLAB代码
深度Q网络(Deep Q-Network,DQN)是一种结合了深度学习和Q学习的强化学习算法,由DeepMind在2015年提出。 1. 算法介绍 DQN算法通过使用深度神经网络来近似Q值函数,解决了传统Q-learning在处理具有大量状态和动作的复杂…...
Python-从文件中读取数据-Sat-Sun
10.1 文件读取数据可以整个文件读取,也可以逐行读取。 首先在保存有.py文件的文件夹里创建一个pi_digist.txt文件,文件内容是 3.14 9265 3589执行程序 file_reader.py with open(pi_digist.txt) as file_object: #接受文件名参数,在程序所…...

测试工程师的职业规划
测试人员在管理上的发展 基层测试管理者:测试组长 工作内容:安排小组工作,提升小组成员测试能力,负责重要的测试工作。 负责对象:版本,项目 中层测试管理者:测试经理 负责对象࿱…...
使用 Puppeteer 快速上手 Node.js 爬虫
使用 Puppeteer 库通过自动化浏览器来访问百度图片搜索,并在搜索结果中下载图片。代码分为两部分: 自动化浏览器任务:使用 Puppeteer 浏览百度图片搜索并获取图片 URL。图片下载:检查图片 URL 类型(base64 或 URL&…...
浏览器的跨域问题与解决方案
浏览器的跨域问题与解决方案 浏览器的跨域问题源于同源策略(Same-Origin Policy)这一安全机制。同源策略要求两个页面具有相同的协议、域名和端口号,才能相互访问资源和数据。这一机制旨在防止恶意网站执行跨站脚本攻击,从而保护…...

MyBatis一二级缓存的区别?
大家好,我是锋哥。今天分享关于【MyBatis一二级缓存的区别?】面试题。希望对大家有帮助; MyBatis一二级缓存的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 的缓存机制分为 一级缓存 和 二级缓存&…...
[2024-12 CISCN 长城杯] Crypto
fffffhash 【也可以看这题,一样的:https://github.com/DownUnderCTF/Challenges_2023_Public/blob/main/crypto/fnv/solve/solution_joseph_LLL.sage】 题目描述: import os from Crypto.Util.number import * def giaogiao(hex_string):b…...
pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。
### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构:  pytorch bilstm crf的教程,注意 这里不支持批处理 Python version…...

Python毕业设计选题:基于django+vue的疫情数据可视化分析系统
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 员工管理 疫情信息管理 检测预约管理 检测结果…...
tomcat被检测到目标URL存在htp host头攻击漏洞
AI越来越火了,我们想要不被淘汰就得主动拥抱。推荐一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站 Tomcat被检测到目标URL存在http host头攻击漏洞,这个漏洞复现一下就是黑客访问你的网站,之后中修改请求头中的host属…...
1.初识python
文章目录 1.python背景知识2.python优缺点3.为什么要学习python 大家好,我是晓星航。今天为大家带来的是初识python 相关的讲解!😀 1.python背景知识 我们学习python需要做的事情: 1.python 环境搭建 2.python 基础语法 3.pyth…...

【密码学】ZUC祖冲之算法
一、ZUC算法简介 ZUC算法(祖冲之算法)是中国自主研发的一种流密码算法,2011年被3GPP批准成为4G国际标准,主要用于无线通信的加密和完整性保护。ZUC算法在逻辑上采用三层结构设计,包括线性反馈移位寄存器(L…...
Python面试常见问题及答案8
一、基础部分 问题1: 解释Python中的切片(slicing)操作在列表、字符串上是如何工作的? 答案: 在列表和字符串中,切片操作可以获取其中的一部分元素。切片的语法是[start:stop:step]。 对于列表࿰…...

ASP.net Core EntityFramework Code EF code 汇总
Entity FrameWork EF 总结 EF Core EF Core 如果实体模型很多,全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护 可以把实体模型 分离出去,每个类创建一个实体模型 public class BookConfiguration :IEntityT…...

u3d动画系统五【StateMachineBehaviour类】
一.StateMachineBehaviour概述 状态机行为是一类特殊脚本。与将常规 Unity 脚本 (MonoBehaviour) 附加到单个游戏对象类似,您可以将 StateMachineBehaviour 脚本附加到状态机中的单个状态。因此可编写一些将在状态机进入、退出或保持在特定状态时执行的代码。这意味…...

IS-IS协议
IS-IS协议介绍 IS-IS(Intermediate System to Intermediate System)协议是一种链路状态的内部网关协议(IGP),用于在同一个自治系统(Autonomous System, AS)内部的路由器之间交换路由信息。IS-I…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...