使用 Docker Compose 部署 Redis Cluster 集群,轻松搭建高可用分布式缓存

Redis Cluster(Redis 集群)是 Redis 分布式解决方案的一部分,它旨在提供高可用性、高性能和横向扩展的功能。Redis Cluster 能够将多个 Redis 节点组合成一个分布式集群,实现数据分片和负载均衡,从而确保在大规模应用场景下的稳定性和可靠性。我们这篇文章了将为大家介绍如何使用 docker-compose 搭建 redis 集群。

Redis Cluster 介绍

  • Redis Cluster 介绍将数据划分为多个槽(slot),默认情况下共有 16384 个槽。每个 Redis 节点负责处理其中的一部分槽。当客户端请求访问某个键时,Redis Cluster 会根据键的哈希值决定它应该位于哪个槽,并将请求转发到负责该槽的 Redis 节点上。

  • 在 Redis Cluster 中,每个槽都可以有多个副本,通常有一个主节点和一个或多个从节点。主节点负责处理客户端请求,并将数据同步到从节点上。这样,即使主节点出现故障,系统仍然可以继续工作,从节点可以接管主节点的工作,并保持数据的一致性。Redis Cluster 提供了自动分片和数据复制的机制,无需手动管理数据分片和节点复制。

  • Redis Cluster 使用 Gossip 协议进行节点间的通信,节点之间互相交换信息以保持集群的状态一致性。通过 Gossip 协议,Redis 节点可以动态发现新的节点加入或者节点离开集群,从而实现集群的自动伸缩和高可用性。

  • Redis Cluster 具有良好的扩展性。当数据量增加或请求量增大时,可以简单地增加新的 Redis 节点,并让集群自动重新分片和重新分配槽。这种横向扩展方式能够无缝地增加集群的容量和性能,而无需停机或对现有节点进行复杂的迁移操作。

  • Redis Cluster 具有很强的容错性。即使有部分节点宕机,只要主节点的数量仍然满足半数以上,集群仍然可以继续工作。当集群检测到主节点不可用时,会自动将从节点提升为主节点,确保服务的连续性和可用性。

docker-compose

创建一个 redis-cluster 的文件夹,在其中在创建一个 redis6479 的一个文件夹,在 redis6479 中创建 docker-compose.yml 文件,文件如下:

version: '3.3'
services:redis6479:network_mode: 'host'image: rediscontainer_name: redis6479restart: alwayslogging:driver: 'json-file'options:max-size: '5g'volumes:- ./data:/data- ./redis.conf:/usr/local/etc/redis/redis.conf- ./logs:/logscommand: redis-server /usr/local/etc/redis/redis.conf

我们在这network用的是host模式,redis节点之间通信直接用宿主机的ip即可
我们在这还有一个关于日志的配置

    logging:driver: 'json-file'options:max-size: '5g'

我们的从节点一直会检测主节点的状态,一直输出日志,所以我们在这配置下日志的大小,不然我们的服务器很快就会被日志文件占用很多的磁盘

在 redis6479 下创建 redis.conf 文件

创建脚本部署其他节点

在redis-cluster 下创建脚本 build.sh

#!/bin/bash
cd /home/xiuji/docker/redis-cluster;
cp -r redis6479 redis6579;
sed -i "s/6479/6579/g" /home/xiuji/docker/redis-cluster/redis6579/docker-compose.yml;
sed -i "s/6479/6579/g" /home/xiuji/docker/redis-cluster/redis6579/redis.conf;
cd /home/xiuji/docker/redis-cluster/redis6579;
sudo rm -rf data;
sudo rm -rf logs;
docker-compose up -d;cd /home/xiuji/docker/redis-cluster;
cp -r redis6479 redis6679;
sed -i "s/6479/6679/g" /home/xiuji/docker/redis-cluster/redis6679/docker-compose.yml;
sed -i "s/6479/6679/g" /home/xiuji/docker/redis-cluster/redis6679/redis.conf;
cd /home/xiuji/docker/redis-cluster/redis6679;
sudo rm -rf data;
sudo rm -rf logs;
docker-compose up -d;cd /home/xiuji/docker/redis-cluster;
cp -r redis6479 redis6779;
sed -i "s/6479/6779/g" /home/xiuji/docker/redis-cluster/redis6779/docker-compose.yml;
sed -i "s/6479/6779/g" /home/xiuji/docker/redis-cluster/redis6779/redis.conf;
cd /home/xiuji/docker/redis-cluster/redis6779;
sudo rm -rf data;
sudo rm -rf logs;
docker-compose up -d;cd /home/xiuji/docker/redis-cluster;
cp -r redis6479 redis6879;
sed -i "s/6479/6879/g" /home/xiuji/docker/redis-cluster/redis6879/docker-compose.yml;
sed -i "s/6479/6879/g" /home/xiuji/docker/redis-cluster/redis6879/redis.conf;
cd /home/xiuji/docker/redis-cluster/redis6879;
sudo rm -rf data;
sudo rm -rf logs;
docker-compose up -d;cd /home/xiuji/docker/redis-cluster;
cp -r redis6479 redis6979;
sed -i "s/6479/6979/g" /home/xiuji/docker/redis-cluster/redis6979/docker-compose.yml;
sed -i "s/6479/6979/g" /home/xiuji/docker/redis-cluster/redis6979/redis.conf;
cd /home/xiuji/docker/redis-cluster/redis6979;
sudo rm -rf data;
sudo rm -rf logs;
docker-compose up -d;

创建好之后给脚本可执行权限,我者直接简单粗暴

chmod -R 777 build.sh

执行脚本

./build.sh

执行成功后我们可以看到多了5个文件夹

_20230801225338.png

查看容器

docker ps -a | grep ‘redis’

_20230801225458.png

可以看到,我们的6个节点已经全部启动了

创建集群

rediscluster默认最少三个主节点,我们在这启动了6个节点,我们创建一个3主3从的集群

在服务器上执行集群创建命令

redis-cli --cluster create 192.168.10.108:6479 192.168.10.108:6579 192.168.10.108:6679 192.168.10.108:6779 192.168.10.108:6879 192.168.10.108:6979 --cluster-replicas 1 -a ‘xj2022’

–cluster-replicas 1:每个主节点下的从节点的数量

-a ‘xj2022’ redis有密码(所有redis设置相同的密码),如果没有密码,则不需要这个参数

执行完之后会出现如下页面

_20230801230123.png

这块了可能会比较久

创建完成之后我们就可以使用如下命令连接到rediscluster 集群了

redis-cli -c -h 192.168.10.108 -p 6479 -a ‘xj2021’ --raw

查看集群状态

cluster nodes

cluster info

测试读写是否正常

set xj ‘修己’

get xj

到此,我们3主3从的cluster集群已经部署完成了

总结

通过 Docker Compose,我们可以快速搭建 Redis 集群,实现高可用性和高性能的分布式缓存。这种部署方式不仅方便,而且易于扩展。希望本文对您理解如何使用 Docker Compose 部署 Redis 集群有所帮助。如果您对 Redis 集群的更多功能和高级配置感兴趣,可以深入研究 Redis 官方文档。https://redis.io/

谢谢阅读!如果您有任何问题或建议,欢迎在评论区留言。

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

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

相关文章

session反序列化+SoapClientSSRF+CRLF

文章目录 session反序列化SoapClientSSRFCRLF前言bestphps revengecall_user_func()方法的特性SSRFCRLF组合拳session反序列化 解题步骤总结 session反序列化SoapClientSSRFCRLF 前言 从一道题分析通过session反序列化出发SoapClientSSRF利用CRLF解题 bestphp’s revenge 首…

基于方向编码的模板匹配算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ........................................................................... %选择移动个…

自适应巡航控制系统研究(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 据统计, 我国交通事故造成的伤亡人数每年超过10万人, 其中驾驶员人为原因 (疲劳、酒驾、误操作等) 所致事故逐渐升高.汽车交通…

pycharm——制作k线图

K 线图 Candlestick Candlestick - Kline_itemstyle from pyecharts import options as opts from pyecharts.charts import Klinedata [[2320.26, 2320.26, 2287.3, 2362.94],[2300, 2291.3, 2288.26, 2308.38],[2295.35, 2346.5, 2295.35, 2345.92],[2347.22, 2358.98, 23…

安装skywalking并集成到微服务项目

文章目录 一、前言二、介绍1. 架构 三、安装skywalking服务端四、启动skywalking服务端五、微服务项目开发注册中心网关服务商品服务订单服务支付服务测试 六、下载java客户端七、微服务集成skywalking客户端1. idea启动2. 命令行启动3. 集成效果 八、skywalking客户端配置1. 配…

Python高阶技巧 正则表达式

正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。 简单来说,正则表达式就是使…

小程序学习(六):全局配置

1.全局配置文件及常用的配置项 全局配置-window 2.小程序窗口的组成部分 3.了解window节点常用的配置项 4.设置导航栏的标题 设置步骤:app.json->window->navigationBarTitleText 5.设置导航栏的背景色 背景颜色不支持red这种文字 6.设置导航栏的标题颜色 注意:navigat…

SpringBoot笔记:SpringBoot集成Dataway

文章目录 1、什么是 Dataway?2、主打场景3、技术架构4、整合SpringBoot4.1、maven 依赖4.2、初始化脚本4.3、整合 SpringBoot 5、Dataway 接口管理6、Mybatis 语法支持7、小结 1、什么是 Dataway? 官网地址:https://www.hasor.net/docs/guides/quickstart Da…

k8s kubeadm命令升级集群 从1.17升级到1.18

k8s kubeadm命令升级集群 从1.17升级到1.18 大纲 注意事项master节点执行升级命令master节点和node节点执行命令 注意事项 目标当前线上k8s集群版本是k8s1.17 想把k8s升级到1.18。注意k8s不能跨版本升级例如k8s1.17不能直接升级到k8s1.19,需要先升级到1.18才后向…

faac内存开销较大,为方便嵌入式设备使用进行优化(valgrind使用)

faac内存开销较大,为方便嵌入式设备使用进行优化,在github上提了issues但是没人理我,所以就搞一份代码自己玩吧。 基于faac_1_30版本,原工程https://github.com/knik0/faac faac内存优化: faac内存开销较大,为方便嵌入…

意外:WPS编程新工具,不用编程,excel用户:可以不用VBA啦

来来来,拓宽一下视野! 别总以为excel和WPS只能用VBA编程,也别总是想着ACCESS这些老生常谈的工具。其实对于电子表格高级用户来讲,不会VBA,不用ACCESS,也一样可以解决复杂问题或者高级应用。 尤其是WPS用户…

【腾讯云 Cloud Studio 实战训练营】CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!

CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手! 文章目录 CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!前言出现的背景一、CloudStudio 是什么?二、CloudStudio 的特点三、CloudS…

PostgreSql 锁

一、概述 在 PostgreSQL 事务中提到,多个用户访问相同数据时可能出现脏读,不可重复度,幻读,更新丢失的问题,为解决这些问题,定义了不同的隔离级别,而隔离级别的具体实现,依靠的就是数…

钉钉群消息推送

1. 添加钉钉群机器人 PC端登录(当前版本手机端无法进行推送关键词设置),群设置--> 机器人 --> webhook进行安全设置复制webhook对应的url 2. 群消息推送 钉钉群消息支持纯文本和markdown类型 2.1 调用示例源码 import com.alibaba.…

助你丝滑过度到 Vue3 组合式Api的优势新的组件 ②⑧

作者 : SYFStrive 博客首页 : HomePage 📜: VUE3~TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 👉…

2023.08.01 驱动开发day8

驱动层 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_irq.h> #include <linux/interrupt.h> #include <linux/fs.h> #include <linux/gpio.h> #include <linux/of_gpio.h>#…

如何在免费版 pycharm 中使用 github copilot (chatGPT)?

起因 在 vscode 中使用了 github copilot 以后&#xff0c;感觉这个人工智能还不错。 但 vscode 对于 python 项目调试并不是特别方便&#xff0c;所以想在 Pycharm 中也能使用同一个 github 账号&#xff0c;用上 copilot 的功能。 不需要等待&#xff0c;安装即用&#xff…

【Web 表单】与用户数据打交道-1(mdn笔记)

0. Web 表单指南 我们将介绍 Web 表单的各个方面&#xff1a;HTML 结构、样式、验证表单数据&#xff0c;以及提交数据到服务器。 基本指南 你的第一个表单 第一次创建 HTML 表单的经验&#xff0c;包括设计一个简单表单、使用正确的 HTML 元素实现它、通过 CSS 添加一些非常简…

【Spring Cloud一】微服务基本知识

系列文章目录 微服务基本知识 系列文章目录前言一、系统架构的演变1.1单体架构1.2分层架构1.3分布式架构1.4微服务架构1.5分布式、SOA、微服务的异同点 二、CAP原则三、RESTfulRESTful的核心概念&#xff1a; 四、共识算法 前言 在实际项目开发过程中&#xff0c;目前负责开发…

Spring?Boot项目如何优雅实现Excel导入与导出功能

目录 背景EasyExcel 问题分析与解决Spring Boot Excel 导入与导出 依赖引入Excel 导入 基本导入功能进阶导入功能Excel 导出 Excel 导入参数校验 开启校验 校验规则定义 Bean Validation 定义校验规则ExcelValidator 接口定义校验规则校验结果接收 异常捕获接收校验结果contro…