【Docker】Docker Compose方式搭建分布式内存数据库(Redis)集群
文章目录
- 开发环境
- 开发流程
- 运行效果
- Docker Desktop桌面中的Redis结点启动图
- Redis结点1的打印日志情况图
- 配置代码
- 命令行启动配置文件: README.md
- 删除集群信息
- 新建数据目录
- 本地Redis的结点的域名,并添加到/etc/hosts文件的末尾
- 域名映射
- 启动集群结点
- 创建集群
- 关闭集群结点
- redis-cluster.yaml
- 引用图
- 启动集群结点运行图
- 创建集群命令图
开发微服务应用时,往往用到内存数据库,而内存数据库离不开Redis.Redis在日常搭建时有四种模式(单机、主备、哨兵、集群),生产环境往往采用哨兵或集群方式搭建,集群方式的资源利用率比哨兵方式高.开发者对使用虚拟机或物理机搭建集群模式往往比较熟悉,但现代应用往往使用云原生技术进行搭建.如何用Docker搭建Redis集群,这里介绍使用Docker Compose方式搭建分布式内存数据库(Redis)集群,适用于单机Docker环境,无论是本地单机开发、测试环境单机验证,还是生产环境单机运行.
开发环境
- macOS For Apple Silicon;
- Idea;
- Docker Desktop: 4.41.2,Engine: 28.1.1,Compose: v2.35.1-desktop.1;
- Docker镜像: redis:8.0;
- Docker Compose配置文件: redis-cluster.yaml;
- 命令行启动配置文件: README.md,见命令行启动配置文件: README.md
开发流程
- 下载Docker Desktop并安装,Docker Desktop For Mac Apple Silicon地址;
- 编写本地Redis的结点的域名,并添加到/etc/hosts文件的末尾,见编写本地Redis的结点的域名,并添加到/etc/hosts文件的末尾;
- 编写Docker Compose配置文件,用来启动Redis集群,其中集群共6个结点,3个主结点,3个备份结点.启动命令(command)中,redis-server启动,集群配置为打开,镜像地址使用redis:8.0,六个结点分别配置,端口从7001-7006,宣布主机域名配置为从redis-node-1到redis-node-6,数据目录映射为主目录从~/seen/redis/data_1到~/seen/redis/data_6,工程文件见redis-cluster.yaml;
- 执行启动集群结点和创建集群命令,见启动集群结点和创建集群命令,启动集群结点运行见启动集群结点运行图;
- 创建集群时选择yes,见创建集群命令图.
运行效果
Docker Desktop桌面中的Redis结点启动图
Redis结点1的打印日志情况图
配置代码
命令行启动配置文件: README.md
删除集群信息
rm -rf ~/seen/redis/
新建数据目录
mkdir -p ~/seen/redis/data_1 ~/seen/redis/data_2 ~/seen/redis/data_3 ~/seen/redis/data_4 ~/seen/redis/data_5 ~/seen/redis/data_6
本地Redis的结点的域名,并添加到/etc/hosts文件的末尾
sudo vi /etc/hosts
域名映射
127.0.0.1 redis-node-1
127.0.0.1 redis-node-2
127.0.0.1 redis-node-3
127.0.0.1 redis-node-4
127.0.0.1 redis-node-5
127.0.0.1 redis-node-6
启动集群结点
docker-compose -f redis-cluster.yaml up -d
创建集群
docker exec -it redis-node-1 redis-cli --cluster create \redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 \redis-node-4:7004 redis-node-5:7005 redis-node-6:7006 \--cluster-replicas 1
关闭集群结点
docker-compose -f redis-cluster.yaml down
redis-cluster.yaml
version: '3.8'
services:redis-node-1:image: redis:8.0container_name: redis-node-1ports:- "7001:7001"command: redis-server --cluster-enabled yes --port 7001 --cluster-announce-hostname redis-node-1 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yesvolumes:- ~/seen/redis/data_1:/datanetworks:- redis-cluster-netredis-node-2:image: redis:8.0container_name: redis-node-2ports:- "7002:7002"command: redis-server --cluster-enabled yes --port 7002 --cluster-announce-hostname redis-node-2 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yesvolumes:- ~/seen/redis/data_2:/datanetworks:- redis-cluster-netredis-node-3:image: redis:8.0container_name: redis-node-3ports:- "7003:7003"command: redis-server --cluster-enabled yes --port 7003 --cluster-announce-hostname redis-node-3 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yesvolumes:- ~/seen/redis/data_3:/datanetworks:- redis-cluster-netredis-node-4:image: redis:8.0container_name: redis-node-4ports:- "7004:7004"command: redis-server --cluster-enabled yes --port 7004 --cluster-announce-hostname redis-node-4 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yesvolumes:- ~/seen/redis/data_4:/datanetworks:- redis-cluster-netredis-node-5:image: redis:8.0container_name: redis-node-5ports:- "7005:7005"command: redis-server --cluster-enabled yes --port 7005 --cluster-announce-hostname redis-node-5 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yesvolumes:- ~/seen/redis/data_5:/datanetworks:- redis-cluster-netredis-node-6:image: redis:8.0container_name: redis-node-6ports:- "7006:7006"command: redis-server --cluster-enabled yes --port 7006 --cluster-announce-hostname redis-node-6 --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yesvolumes:- ~/seen/redis/data_6:/datanetworks:- redis-cluster-net
networks:redis-cluster-net:driver: bridge
引用图
启动集群结点运行图
创建集群命令图
相关文章:

【Docker】Docker Compose方式搭建分布式内存数据库(Redis)集群
文章目录 开发环境开发流程运行效果Docker Desktop桌面中的Redis结点启动图Redis结点1的打印日志情况图 配置代码命令行启动配置文件: README.md删除集群信息新建数据目录本地Redis的结点的域名,并添加到/etc/hosts文件的末尾域名映射启动集群结点创建集群关闭集群结点 redis-c…...

如何在 Bash 中使用 =~ 操作符 ?
在 Bash 脚本世界中,有各种操作符可供我们使用,使我们能够操作、比较和测试数据。其中一个操作符是 ~ 操作符。这个操作符经常被忽视,但功能非常强大,它为我们提供了一种使用正则表达式匹配字符串模式的方法。 ~ 操作符语法 语法…...

科学养生指南:打造健康生活
在快节奏的现代生活中,健康养生成为人们关注的焦点。科学养生无需复杂理论,掌握以下几个关键要素,就能为身体构筑坚实的健康防线。 合理饮食是健康的基础。世界卫生组织建议,每天应摄入至少 5 份蔬菜和水果,保证维生…...

华为OD机试真题——单词接龙(首字母接龙)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...
React构建组件
React构建组件 React 组件构建方式详解 React 组件的构建方式随着版本迭代不断演进,目前主要有 函数组件 和 类组件 两种核心模式,并衍生出多种高级组件设计模式。以下是完整的构建方式指南: 文章目录 React构建组件React 组件构建方式详解…...

计算机网络-MPLS VPN基础概念
前面几篇文章我们学习了MPLS的标签转发原理,有静态标签分发和LDP动态标签协议,可以实现LSR设备基于标签实现数据高效转发。现在开始学习MPLS在企业实际应用的场景-MPLS VPN。 一、MPLS VPN概念 MPLS(多协议标签交换)位于TCP/IP协…...
基于TouchSocket实现WebSocket自定义OpCode扩展协议
基于TouchSocket实现WebSocket自定义OpCode扩展协议 前言一、WebSocket OpCode规范速览二、实现示例:协同编辑光标同步1. 客户端发送实现2. 服务端接收处理 三、应用场景分析1. 实时协作系统2. 物联网控制协议3. 游戏实时交互 四、协议设计建议1. 帧结构优化2. 性能…...

【Linux系列】bash_profile 与 zshrc 的编辑与加载
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Spring Boot中的拦截器!
每次用户请求到达Spring Boot服务端,你是否需要重复写日志、权限检查或请求格式化代码?这些繁琐的“前置后置”工作让人头疼!好在,Spring Boot拦截器如同一道智能关卡,统一处理请求的横切逻辑,让代码优雅又…...

基于 Spring Boot 瑞吉外卖系统开发(十五)
基于 Spring Boot 瑞吉外卖系统开发(十五) 前台用户登录 在登录页面输入验证码,单击“登录”按钮,页面会携带输入的手机号和验证码向“/user/login”发起请求。 定义UserMapper接口 Mapper public interface UserMapper exte…...

计算机网络笔记(二十三)——4.5IPv6
4.5.1IPv6的基本首部 IPv6 的基本首部相对于 IPv4 进行了重大简化和优化,固定长度为 40 字节,大幅提升了路由器的处理效率。以下是各字段的详细说明: IPv6 基本首部字段组成 字段名位数作用描述版本 (Version)4 bits固定值为 6,…...

推荐一个Winform开源的UI工具包
从零学习构建一个完整的系统 推荐一个开源、免费的适合.NET WinForms 控件的套件。 项目简介 Krypton是一套开源的.Net组件,用于快速构建具有丰富UI交互的WinForms应用程序。 丰富的UI控件,提供了48个基础控件,如按钮、文本框、标签、下拉…...

位与运算
只有当除数是 2 的幂次方(如 2、4、8、16...)时,取模运算才可以转换为位运算。 int b 19;int a1 b % 16; // 传统取模运算int a2 b & 15; // 位运算替代取模printf("b %d\n", b);printf("b %% 8 %d\n",…...
算法备案如何判断自己的产品是否具备舆论属性
判断互联网产品是否具备舆论属性或社会动员能力,需要结合《具备舆论属性或社会动员能力的互联网信息服务安全评估规定》法规及实际功能、用户规模、信息传播方式等综合因素判定。 一、舆论属性判断标准 (1)服务功能与形式 信息交互功能&am…...
AR禁毒:科技赋能,筑牢防毒新防线
过去,传统禁毒宣传教育方式对普及禁毒知识、提高禁毒意识意义重大。但随着时代和社会环境变化,其困境逐渐显现。传统宣传方式单一,主要依靠讲座、发传单、办展览。讲座形式枯燥,对青少年吸引力不足;发传单易被丢弃&…...

趣味编程:四叶草
概述:在万千三叶草中寻觅,只为那一抹独特的四叶草之绿,它象征着幸运与希望。本篇博客主要介绍四叶草的绘制。 1. 效果展示 绘制四叶草的过程是一个动态的过程,因此博客中所展示的为绘制完成的四叶草。 2. 源码展示 #define _CR…...
访问者模式(Visitor Pattern)详解
文章目录 1. 访问者模式概述1.1 定义1.2 基本思想2. 访问者模式的结构3. 访问者模式的UML类图4. 访问者模式的工作原理5. Java实现示例5.1 基本实现示例5.2 访问者模式处理复杂对象层次结构5.3 访问者模式在文件系统中的应用6. 访问者模式的优缺点6.1 优点6.2 缺点7. 访问者模式…...

城市生命线综合管控系统解决方案-守护城市生命线安全
一、政策背景 国务院办公厅《城市安全风险综合监测预警平台建设指南》要求:将燃气、供水、排水、桥梁、热力、综合管廊等纳入城市生命线监测体系,建立"能监测、会预警、快处置"的智慧化防控机制。住建部《"十四五"全国城市基础…...

# 2-STM32F103-复位和时钟控制RCC
STM32-复位和时钟控制RCC 2-STM32-复位和时钟控制RCC摘要说明本文参考资料如下: 一、STM32最小系统回顾STM32F103C8T6核心板原理图 二、复位三、时钟3.1 时钟树3.2 STM32启动过程3.2 SystemInit()函数3.2.1 SystemInit()第1句:3.2.2 SystemInit()第2句&a…...

多模态大语言模型arxiv论文略读(七十五)
PosterLLaVa: Constructing a Unified Multi-modal Layout Generator with LLM ➡️ 论文标题:PosterLLaVa: Constructing a Unified Multi-modal Layout Generator with LLM ➡️ 论文作者:Tao Yang, Yingmin Luo, Zhongang Qi, Yang Wu, Ying Shan, C…...
Angular 知识框架
一、Angular 基础 1. Angular 简介 Angular 是什么? 基于 TypeScript 的前端框架(Google 维护)。 适用于构建单页应用(SPA)。 核心特性 组件化架构 双向数据绑定 依赖注入(DI) 模块化设计…...
企业数字化转型背景下的企业知识管理挑战与经验杂谈
一、引言 在数字化转型的浪潮下,企业知识管理正面临前所未有的挑战。随着数据量的急剧增长,企业内部积累的信息呈现出碎片化、分散化的趋势,传统的知识管理体系已难以有效应对这一变革。首先,信息碎片化问题日益严重,…...

使用frp实现客户端开机自启(含静默运行脚本)
本文整理了如何使用 frp 客户端并实现 Windows 系统下的开机静默自启,适合远程桌面、内网穿透等场景。 📁 目录结构 我将 frp 客户端文件放置在以下路径: F:\git\frp>tree /f 卷 其它 的文件夹 PATH 列表 卷序列号为 A123-0F4E F:. │ …...

list 容器常见用法及实现
文章目录 1. list 的介绍与使用1.1 list 的介绍1.2 list 的使用1.2.1 list 的构造1.2.2 list iterator 的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 迭代器失效问题 2. list 的模拟实现2.1 值得注意的点:2.2 std::initializer_li…...

iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)
iOS视频编码详细步骤流程 1. 视频采集阶段 视频采集所使用的代码和之前的相同,所以不再过多进行赘述 初始化配置: 通过VideoCaptureConfig设置分辨率1920x1080、帧率30fps、像素格式kCVPixelFormatType_420YpCbCr8BiPlanarFullRange设置摄像头位置&am…...

浅析 Golang 内存管理
文章目录 浅析 Golang 内存管理栈(Stack)堆(Heap)堆 vs. 栈内存逃逸分析内存逃逸产生的原因避免内存逃逸的手段 内存泄露常见的内存泄露场景如何避免内存泄露?总结 浅析 Golang 内存管理 在 Golang 当中,堆…...
记录: Windows下远程Liunx 系统xrdp 用到的一些小问题(免费踩坑 记录)
采用liunx Ubuntu22.04版本以下,需要安装 xrdp 或者VNC 具体过程就是下载 在linux命令行里 首先更新软件包:sudo apt update 安装xrdp服务:sudo apt install xrdp 启动XRDP:sudo systemctl start xrdp(如果在启动的…...

C++ 并发编程(1)再学习,为什么子线程不调用join方法或者detach方法,程序会崩溃? 仿函数的线程启动问题?为什么线程参数默认传参方式是值拷贝?
本文的主要学习点,来自 这哥们的视频内容,感谢大神的无私奉献。你可以根据这哥们的视频内容学习,我这里只是将自己不明白的点,整理记录。 C 并发编程(1) 线程基础,为什么线程参数默认传参方式是值拷贝?_哔…...

【Python 算法零基础 2.模拟 ④ 基于矩阵】
目录 基于矩阵 Ⅰ、 2120. 执行所有后缀指令 思路与算法 ① 初始化结果列表 ② 方向映射 ③ 遍历每个起始位置 ④ 记录结果 Ⅱ、1252. 奇数值单元格的数目 思路与算法 ① 初始化矩阵 ② 处理每个操作 ③ 统计奇数元素 Ⅲ、 832. 翻转图像 思路与算法 ① 水平翻转图像 ② 像素值…...

【教程】Docker方式本地部署Overleaf
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景说明 下载仓库 初始化配置 修改监听IP和端口 自定义网站名称 修改数据存放位置 更换Docker源 更换Docker存储位置 启动Overleaf 创…...