前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Docker快速搭建一套三主三从Redis集群用于开发、测试

使用Docker快速搭建一套三主三从Redis集群用于开发、测试

作者头像
耕耘实录
发布于 2023-12-18 03:57:06
发布于 2023-12-18 03:57:06
1.7K00
代码可运行
举报
文章被收录于专栏:耕耘实录耕耘实录
运行总次数:0
代码可运行
文章目录

  • 一 基本概念
  • 二 部署流程
    • 2.1 准备配置文件
    • 2.2 启动6个 Docker 容器
    • 2.3 集群搭建
  • 三 总结
  • 四 参考资料

一 基本概念

Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式:主从复制模式(Master-Slave)、哨兵模式(Sentinel)和Cluster模式。Cluster模式是Redis的一种高级集群模式,它通过数据分片和分布式存储实现了负载均衡和高可用性。在Cluster模式下,Redis将所有的键值对数据分散在多个节点上。每个节点负责一部分数据,称为槽位。通过对数据的分片,Cluster模式可以突破单节点的内存限制,实现更大规模的数据存储。Redis Cluster将数据分为16384个槽位,每个节点负责管理一部分槽位。当客户端向Redis Cluster发送请求时,Cluster会根据键的哈希值将请求路由到相应的节点。具体来说,Redis Cluster使用CRC16算法计算键的哈希值,然后对16384取模,得到槽位编号。

二 部署流程

2.1 准备配置文件

准备6个配置文件,在当前工作目录创建conf目录,将配置文件放置于conf目录下面。配置文件具体内容如下(IP为搭建主机的本机IP): 第一个配置文件redis-01.conf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bind 172.31.164.149
port 6001
cluster-enabled yes
cluster-config-file nodes-6001.conf
cluster-node-timeout 5000
appendonly yes
masterauth C*x#1a2b # Master 节点密码
requirepass C*x#1a2b # 集群密码

第二个配置文件redis-02.conf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bind 172.31.164.149
port 6002
cluster-enabled yes
cluster-config-file nodes-6002.conf
cluster-node-timeout 5000
appendonly yes
masterauth C*x#1a2b
requirepass C*x#1a2b

第三个配置文件redis-03.conf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bind 172.31.164.149
port 6003
cluster-enabled yes
cluster-config-file nodes-6003.conf
cluster-node-timeout 5000
appendonly yes
masterauth C*x#1a2b
requirepass C*x#1a2b

第四个配置文件redis-04.conf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bind 172.31.164.149
port 6004
cluster-enabled yes
cluster-config-file nodes-6004.conf
cluster-node-timeout 5000
appendonly yes
masterauth C*x#1a2b
requirepass C*x#1a2b

第五个配置文件redis-05.conf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bind 172.31.164.149
port 6005
cluster-enabled yes
cluster-config-file nodes-6005.conf
cluster-node-timeout 5000
appendonly yes
masterauth C*x#1a2b
requirepass C*x#1a2b

第六个配置文件redis-06.conf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bind 172.31.164.149
port 6006
cluster-enabled yes
cluster-config-file nodes-6006.conf
cluster-node-timeout 5000
appendonly yes
masterauth C*x#1a2b
requirepass C*x#1a2b
2.2 启动6个 Docker 容器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d --restart always --name redis-01 -v ${PWD}/conf/redis-01.conf:/etc/redis-01.conf --net host redis:5.0.8 redis-server /etc/redis-01.conf
docker run -d --restart always --name redis-02 -v ${PWD}/conf/redis-02.conf:/etc/redis-02.conf --net host redis:5.0.8 redis-server /etc/redis-02.conf
docker run -d --restart always --name redis-03 -v ${PWD}/conf/redis-03.conf:/etc/redis-03.conf --net host redis:5.0.8 redis-server /etc/redis-03.conf
docker run -d --restart always --name redis-04 -v ${PWD}/conf/redis-04.conf:/etc/redis-04.conf --net host redis:5.0.8 redis-server /etc/redis-04.conf
docker run -d --restart always --name redis-05 -v ${PWD}/conf/redis-05.conf:/etc/redis-05.conf --net host redis:5.0.8 redis-server /etc/redis-05.conf
docker run -d --restart always --name redis-06 -v ${PWD}/conf/redis-06.conf:/etc/redis-06.conf --net host redis:5.0.8 redis-server /etc/redis-06.conf
2.3 集群搭建

进入其中一个节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker exec -it redis-01 bash

输入以下命令,IP为搭建主机的本地IP:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-cli -a 'C*x#1a2b' --cluster create 172.31.164.149:6001 172.31.164.149:6002 172.31.164.149:6003 172.31.164.149:6004 172.31.164.149:6005 172.31.164.149:6006 --cluster-replicas 1

待通信完成后,查看集群信息。显示内容如下则搭建成功:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
172.31.164.149:6001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:308
cluster_stats_messages_pong_sent:313
cluster_stats_messages_sent:621
cluster_stats_messages_ping_received:313
cluster_stats_messages_pong_received:308
cluster_stats_messages_received:621

查看集群节点信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
172.31.164.149:6001> cluster nodes
2c3e75ba9ba690330fe12f644dee245536ae03c8 172.31.164.149:6005@16005 slave a917ef7525101f73e5b72b49ec4158a613c02bbc 0 1702455066301 5 connected
a917ef7525101f73e5b72b49ec4158a613c02bbc 172.31.164.149:6002@16002 master - 0 1702455066502 2 connected 5461-10922
a0238143b17860ae51a80096a0a7418f3f30d964 172.31.164.149:6001@16001 myself,master - 0 1702455066000 1 connected 0-5460
99902aacf4a2d697d000d123d16663ce0fe84428 172.31.164.149:6004@16004 slave a0238143b17860ae51a80096a0a7418f3f30d964 0 1702455067304 4 connected
05c3ff9b8316e22a2dd241642fac37f9a291fb8f 172.31.164.149:6003@16003 master - 0 1702455066101 3 connected 10923-16383
589515d5cc3c9ee9458daf7b719a6e6ee3f3b405 172.31.164.149:6006@16006 slave 05c3ff9b8316e22a2dd241642fac37f9a291fb8f 0 1702455066000 6 connected

三 总结

1、目前使用容器部署Docker仅能使用host这种网络模式,其他模式暂未实验成功,如果有了解的小伙伴欢迎赐教; 2、使用host网络模式部署集群是因为Redis除了节点暴露端口之外,还有需要开放一个集群总线端口,官网说明:Every Redis Cluster node requires two open TCP connections: a Redis TCP port used to serve clients, e.g., 6379, and second port known as the cluster bus port. By default, the cluster bus port is set by adding 10000 to the data port (e.g., 16379); however, you can override this in the cluster-port configuration; 3、需要注意的是:本文使用一台主机部署6个节点的集群,仅用于开发、测试环境,一般不用于生产环境。如需在多台主机部署集群,请根据实际情况对IP和端口进行规划,但需确保各主机之间能够正常通信。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【iOS】浅析近期越狱工具+“平刷”工具
越狱工具:unc0ver,chimera,checkra1n(chimera1n)
zby1101
2020/08/05
6.2K0
【iOS】浅析近期越狱工具+“平刷”工具
【iOS】越狱后的“救命稻草”
pwn最近更新了好几次unc0ver,相信各位朋友已经在各大公众号,论坛看到了,这里就不说它了
zby1101
2020/08/05
9430
【iOS】越狱后的“救命稻草”
【教程】checkra1n越狱教程+常用插件推荐
重要:越狱骨灰级玩家请忽略本篇文章,篇幅较长,大约2500+字,突有不适感,请返回上一页,继续忙你的事情
zby1101
2020/08/05
10.6K0
【教程】checkra1n越狱教程+常用插件推荐
iOS逆向之使用unc0ver越狱 iOS13.5
因为工作需要,笔者最近在研究越狱,网上看了很多文章,这篇文章记录了给iOS 13设备越狱的方式和过程,希望对你有帮助。
VV木公子
2020/09/11
13K0
iOS逆向之使用unc0ver越狱 iOS13.5
【iOS】关于iOS13越狱的一些事情
由于前几天偶然发现自己家宽带竟然是公网ip,这段时间一直在试着折腾一下ftp服务器,后面可能会写一篇搭建私有云(是ftp还是硬盘,还是类似网盘的的教程,随缘吧)
zby1101
2020/08/05
7660
【iOS】关于iOS13越狱的一些事情
iOS越狱是什么?大佬来解释来咯(二)
众所周知,越狱可以获取最高权限,而在iOS上访问系统根目录是需要最高系统权限的(虽然也有不需要越狱获取文件系统的实例)
zby1101
2020/08/05
1.1K0
iOS越狱是什么?大佬来解释来咯(二)
IOS7完美越狱方法教程及工具下载
就在几天之前,Apple发布了IOS7 beta2测试版。相比于beta1而言,第二个测试版对于性能和稳定性都做出了不少优化,并且带来了Ipad支持。相信不少喜欢尝鲜的朋友已然更新到IOS7 beta2了。但对于国内的很多用户而言,越狱仍然是必不可少的一个步骤。虽然IOS7的越狱工具还没有出现,但如果你有一台iPhone 4,则可以利用已有的工具对IOS7进行越狱。
reizhi
2022/09/26
1.2K0
IOS7完美越狱方法教程及工具下载
iOS逆向(10)-越狱!越狱!远程连接登录手机
之前的九篇文章讲述的是在不越狱的情况下,详细的讲解了对APP重签名的原理,如何动态库注入,以及之后的各种调试技巧。这些功能其实已经很强大了,能够帮助咱们在绝大多数情况下去分析并且更改对方的APP了。这对付一些在开发过程中没有安全意识的APP其实已经足以。但是但凡对方有对APP进行防护,那么重签名就显得有些弱鸡了。
iOSSir
2019/06/14
2.2K0
iOS逆向(10)-越狱!越狱!远程连接登录手机
ipad越狱有什么坏处吗?_平板越狱有什么好处
1. iPad越狱是什么?iPad越狱有什么好处和坏处?不越狱又有啥缺点? 越狱就是解除一些原版固件的限制。最大的好处是可以安装激活成功教程的软件和游戏,这些软件和游戏本来都是收费的。而且,有些功能很强大的软件,并不是花钱能在官方的App Store里能买到的(某些有米之人或许会说“我就不越狱,我都花钱买正版”,我只能客气地说他只知其一不知其二),比如SBSettings, OpenSSH, Lockdown Pro, Installous, MyWi, iFile, roqyBT(这个不被Apple接受的软件,也是收费的,而且最新版没有激活成功教程,想用的话也得买,我就刚在淘宝上买了一个)等等,这些软件的存在会让你一方面觉得iPad功能实在是太强大了,另外一方面又会觉得Apple实在是太不厚道了,整出那么多限制。越狱的坏处据说是不给保修,但我没有听说过这样的例子。不越狱的缺点嘛,就是越狱后的优点都没有。 注:其实不越狱也能安装激活成功教程的ipa,有一个叫ipa god的东西,不过这个比较复杂,要求也高(貌似要mac电脑并且安装装xcode),一般人玩不转,等有空了我去整一个来试试。
全栈程序员站长
2022/09/28
5.6K0
iPhone使用教程_iphone基础使用
大家好,又见面了,我是你们的朋友全栈君。 iPhone史上最全的使用教程 iPhone的解锁、越狱、激活、固件等等是什么意思,有什么分别 这几天看见好多新人问这几个词的含义及区别。我在这儿说说我的看法,不是官方解释,不懂的学习一下,懂的绕道,如有错误,敬请指正! 第一次买来时或恢复官方固件后,iPhone会处于那种只能拨打紧急电话状态,不能使用其它功能,如果要使用其它功能,就必须进行一项操作,那就是“激活”。一般有锁版的只有使用对应运营商的卡(如美国的AT&T卡)或者无锁版使用任何卡,才可以激活。激活之
全栈程序员站长
2022/09/29
14K0
iOS开发入门笔记
iOS开发入门笔记 本文面向已有其它语言(如Java,C,PHP,Javascript)编程经验的iOS开发初学者,初衷在于让我的同事一小时内了解如何开始开发iOS App,学习目标包括: 能使用Xcode IDE、模拟器 能修改、调试已有iOS App 能在已有应用内创建新模块 能创建新应用 能发布应用到App Store 本文不包含任何高级的iOS开发知识,已学会iOS开发的同学不要看,看完这篇文章学会了的同学也不用再看了。 不仅是学习一门新语言 有过脚本开发经验的人(如Javascript,PHP,S
xiangzhihong
2018/02/06
4.1K0
全志 Tina Linux 系统软件 开发指南 sdk源码编译操作 深入理解Tina-sdk编译框架 支持百问网T113 D1-H哪吒 DongshanPI-D1s V853-Pro等开发板
编写目的:本文档作为Allwinner Tina Linux系统平台开发指南,旨在帮助软件开发工程师、技术支持工程师快速上手,熟悉Tina Linux系统的开发及调试流程。
韦东山
2022/12/28
5.2K0
全志 Tina Linux 系统软件 开发指南 sdk源码编译操作 深入理解Tina-sdk编译框架 支持百问网T113 D1-H哪吒 DongshanPI-D1s V853-Pro等开发板
黑群晖安装和使用的常见问题及解决办法【不定期更新中】
答:群晖系统跟Windows不同,Windows有个盘要当成系统盘,而群晖会在每个硬盘上自动安装系统。每个硬盘?对,没错,就是每个硬盘。比如你是6盘位,接了6个硬盘,这6个硬盘初始化以后,每个硬盘都有系统了。所以拿一个SSD来做系统盘的这个做法没必要。当然,也有全部用SSD的土豪,那就不是这个话题了。
cnlixs
2022/11/01
59.8K2
黑群晖安装和使用的常见问题及解决办法【不定期更新中】
TensorFlow 2.0 的新增功能:第三、四部分
如果您使用过 TensorFlow 1.x,则本部分将重点介绍迁移到 TensorFlow 2.0 所需的总体概念更改。 它还将教您使用 TensorFlow 可以进行的各种 AIY 项目。 最后,本节向您展示如何将 TensorFlow Lite 与跨多个平台的低功耗设备一起使用。
ApacheCN_飞龙
2023/04/26
2.5K0
吐血推荐|2万字总结Mac所有应用程序、软件工具和相关资料
现在随着互联网的发展,越来越多的公司都鼓励Mac办公,属实MacOS系统对于我们的工作开发效率有很大提升,所以我们需要收集各种类别非常好用的 Mac 应用程序、软件以及工具。作为一个资深 Mac 用户,我需要它们帮助我快乐、高效的工作,同时也分享给你们。
浅羽技术
2020/12/07
6.2K1
吐血推荐|2万字总结Mac所有应用程序、软件工具和相关资料
攻防信息收集之道|外网信息收集
从个人的角度去简单整理下打点前的信息收集那些事。从信息收集本质上来说多数内容都是大同小异,遇到坚壁时,不用死磕,毕竟条条大路通罗马。(大佬们也可以说说看法~向各位大佬学习!!)
亿人安全
2023/08/10
4.6K0
攻防信息收集之道|外网信息收集
你一定不知道的 AppStore 秘密
对于 iOS 开发者来说 App Store 是必经之路,大家一定多多少少都会有了解。但 App Store 的功能之多,并且每年都有更新,比如上一篇文章我们讲到 《解读 AppStore 新功能:自定义产品页面和 A/B Test 工具》 ,所以本文对一些大家平时经常接触的功能,但可能忽视的一些细节进行解说,也会对一些平时大家很少接触的功能进行探索。可能不是最全的,但一定有你不知道的 App Store 秘密!
37手游iOS技术运营团队
2021/08/03
3.4K0
你一定不知道的 AppStore 秘密
python基础(一)
  python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
用户1432189
2018/09/05
1.5K0
python基础(一)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11
认证是任何应用中最突出的功能之一,无论它是本机移动软件还是网站,并且自从保护数据的需求以及与机密有关的隐私需求开始以来,认证一直是一个活跃的领域。 在互联网上共享的数据。 在本章中,我们将从基于 Firebase 的简单登录到应用开始,然后逐步改进以包括基于人工智能(AI)的认证置信度指标和 Google 的 ReCaptcha。 所有这些认证方法均以深度学习为核心,并提供了一种在移动应用中实现安全性的最新方法。
ApacheCN_飞龙
2023/04/27
23.5K0
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11
OpenCV3 安卓应用编程:1~6 全
本章是为 Android 和 OpenCV 设置开发环境的快速指南。 我们还将研究 OpenCV 示例应用,文档和社区。
ApacheCN_飞龙
2023/04/27
5.4K0
推荐阅读
相关推荐
【iOS】浅析近期越狱工具+“平刷”工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档