一台服务器上部署 Redis 伪集群
哈喽大家好,我是咸鱼
今天这篇文章介绍如何在一台服务器(以 CentOS 7.9 为例)上通过 redis-trib.rb 工具搭建 Redis cluster (三主三从)
redis-trib.rb 是一个基于 Ruby 编写的脚本,其功能涵盖了创建、管理以及维护 Redis 集群的各个方面
值得注意的是,随着时间的推移,一些较新版本的 Redis 已经将 redis-trib.rb 标记为不推荐使用的工具
鉴于此,文章所采用的 Redis 版本为较老的 4.0.9 版本
对于较新版本的 Redis,咸鱼建议采用 redis-cli 工具来进行集群的操作与管理,以确保与 Redis 的最新特性保持一致
我们先把架构画出来,这样后面部署的时候就很方便了

# 三个 Master
192.168.149.131:6379
192.168.149.131:6380
192.168.149.131:6381# 三个 Slave
192.168.149.131:26379
192.168.149.131:26380
192.168.149.131:26381
需要注意的是,Redis Cluster 中,节点之间通过建立 TCP 连接,使用 gossip 协议来传播集群的信息,节点内部通信端口是服务端口 + 10000
举个例子,启动 Redis 服务之后会有一个 6379 端口(对外端口)和一个 16379 端口(对内通信端口)
开始部署
部署前准备
首先创建 Redis 存储目录,用来存放 rdb 文件等,接着创建 pid 文件和日志文件存放目录
mkdir -pv /var/data/{6379,6380,6381,26379,26380,26381}mkdir /usr/local/redis-4.0.9/{pid,log} -pv
安装 Redis 以及相关依赖工具
我们先来安装 redis 以及相关依赖(需要能够访问到互联网)
# 安装相关依赖
yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake# 安装到 /usr/local 下
cd /usr/local/ && wget https://download.redis.io/releases/redis-4.0.9.tar.gz# 解压缩
tar -xvf redis-4.0.9.tar.gz
解压缩完毕之后我们进入目录开始编译安装
cd redis-4.0.9/ && make && make install
配置并开启 Redis 服务
首先我们先来配置六个 Redis 服务的配置文件
ll /usr/local/redis-4.0.9/
-rwxr-xr-x 1 root root 1524 Aug 24 17:21 redis-26379.conf
-rwxr-xr-x 1 root root 1524 Aug 24 17:18 redis-26380.conf
-rwxr-xr-x 1 root root 1524 Aug 24 17:18 redis-26381.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:21 redis-6379.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:17 redis-6380.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:17 redis-6381.conf
配置文件中需要改动的配置项是下面几个,其他的不变
# 需要改动的地方
...
port 6379
...
pidfile /usr/local/redis-4.0.9/pid/redis-6379.pid
...
logfile /usr/local/redis-4.0.9/log/redis-6379.log
...
dir /var/data/6379
...
cluster-config-file nodes-6379.conf
...
配置好之后,六个 Redis 服务依次启动
/usr/local/redis-4.0.9/src/redis-server redis-6379.conf && /usr/local/redis-4.0.9/src/redis-server redis-26379.conf/usr/local/redis-4.0.9/src/redis-server redis-6380.conf && /usr/local/redis-4.0.9/src/redis-server redis-26380.conf/usr/local/redis-4.0.9/src/redis-server redis-6381.conf && /usr/local/redis-4.0.9/src/redis-server redis-26381.conf
搭建 Ruby 环境
redis-trib.rb 是一个 Ruby 脚本,用于创建、管理和维护 Redis 集群
它提供了一种命令行界面来执行各种集群操作,如添加节点、删除节点、平衡数据分布等
如果要使用 redis-trib.rb 这个 Ruby 脚本来管理 Redis Cluster,就需要安装 Ruby 解释器
先下载 rvm 工具(网络问题多试几次)
#1.下载密钥
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
#2.下载安装包(网络问题多试几次)
curl -L get.rvm.io | bash -s stable

# 验证是否安装成功
[root@localhost]# find / -name rvm
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm# 启用 RVM 的环境变量
source /etc/profile.d/rvm.sh
#查看依赖
rvm requirements#验证 rvm 版本
rvm -v
# 安装 ruby
/usr/local/rvm/bin/rvm install ruby-3.0.0# 验证 ruby 版本
ruby -v
PS:如果安装 ruby 之后使用 redis-trib.rb 工具发现报错
/usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- redis (LoadError)
from /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from ./redis-trib.rb:25:in `<main>'
根据提示可以知道 redis-trib.rb 脚本无法找到 redis 模块,导致加载失败,这通常是因为系统中缺少了所需的 Ruby Redis 模块或模块的版本问题
运行以下命令安装 Redis Gem 模块:
# 安装 redis 模块,是 redis-trib.rb 脚本所需的依赖
gem install redis
创建 Redis 集群
创建集群(--replicas 1 表示指定每个 master 有一个 slave)
cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb create --replicas 1 192.168.149.131:6379 192.168.149.131:26379 192.168.149.131:6380 192.168.149.131:26380 192.168.149.131:6381 192.168.149.131:26381

由上图可以看到
master 1: 192.168.149.131:6379 ;slave 1:192.168.149.131:26380
master 2: 192.168.149.131:26381;slave 2:192.168.149.131:6380
master 3: 192.168.149.131:26379;slave 3:192.168.149.131:6381
# 查看集群信息
cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb info 192.168.149.131:6379cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb check 127.0.0.1:6379
验证
创建集群之后我们简单验证一下:写入一个数据,可以看到数据重定向到了 master 3
[root@localhost /usr/local/redis-4.0.9]# redis-cli -c -p 6379
127.0.0.1:6379> set name Edison
-> Redirected to slot [5798] located at 192.168.149.131:26379
OK
然后我们在 slave 3 上查看有没有这个数据,是否同步完毕
[root@localhost /usr/local/redis-4.0.9]# redis-cli -c -p 26379
127.0.0.1:26379> get name
"Edison"
相关文章:
一台服务器上部署 Redis 伪集群
哈喽大家好,我是咸鱼 今天这篇文章介绍如何在一台服务器(以 CentOS 7.9 为例)上通过 redis-trib.rb 工具搭建 Redis cluster (三主三从) redis-trib.rb 是一个基于 Ruby 编写的脚本,其功能涵盖了创建、管…...
ealtek高清晰音频管理器(realtek高清晰音频管理器怎么设置win10)
本文为大家介绍realtek高清晰音频管理器(realtek高清晰音频管理器怎么设置win10),下面和小编一起看看详细内容吧。 我们都使用电脑来听音乐、看电影或者进行其他操作,但是如果我们觉得电脑产生的音效不够立体,我们就会想要去Realtek来设置音…...
微信小程序 scroll-view 组件的 bindscroll 不触发不生效
使用微信小程序基础组件中的scroll-view,但是滑动的时候 bindscroll 一直不生效。 <view class"container log-list"><scroll-view scroll-y style"height:100%;white-space:nowrap;" scroll-into-view"{{toView}}" enable…...
datax 删除分区数据,再写入MySQL脚本
#! /bin/bashDATAX_HOME/opt/module/datax#1、判断参数是否传入 if [ $# -lt 1 ] thenecho "必须传入all/表名..."exit fi #2、判断日期是否传入 [ "$2" ] && datestr$2 || datestr$(date -d -1 day %F)#DataX导出路径不允许存在空文件,…...
hyperf 十四 国际化
一 安装 composer require hyperf/translation:v2.2.33 二 配置 1、设置语言文件 文件结构: /storage/languages/en/messages.php /storage/languages/zh_CH/messages.php // storage/languages/en/messages.php return [welcome > Welcome to our applicat…...
C语言_初识C语言指针
文章目录 前言一、指针 ... 一个内存单元多大比较合适?二、地址或者编号如何产生?三、指针变量的大小 前言 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。 所以为了有效的使用内存,就把内存划分成一个个…...
EMQX启用双向SSL/TLS安全连接以及java连接
作为基于现代密码学公钥算法的安全协议,TLS/SSL 能在计算机通讯网络上保证传输安全,EMQX 内置对 TLS/SSL 的支持,包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。你可以为 EMQX 支持的所有协议启用 SSL/TLS,也可…...
4399面试总结C/C++游戏开发
主要流程 首先询问了C/C知识点 然后询问操作系统,计算机组成,数据结构,计算机网络哪两门熟悉 涉及的相关问题 多态的概念 tcp,udp? tcp,udp区别 tcp可靠,udp不可靠 tcp这个链接的过程? 一个TCP连接必须要经过三次“…...
hashlib 模块学习
hashlib 是 Python 标准库中用于散列和摘要算法的模块。散列算法将输入数据转换为固定长度的散列值(也称为摘要),并且对于相同的输入始终生成相同的散列值。这对于存储密码、数字签名、数据完整性验证等领域非常有用。以下是对 hashlib 模块的…...
大模型开发05:PDF 翻译工具开发实战
大模型开发实战05:PDF 翻译工具开发实战 PDF-Translator 机器翻译是最广泛和基础的 NLP 任务 PDF-Translator PDF 翻译器是一个使用 AI 大模型技术将英文 PDF 书籍翻译成中文的工具。这个工具使用了大型语言模型 (LLMs),如 ChatGLM 和 OpenAI 的 GPT-3 以及 GPT-3.5 Turbo 来…...
LeetCode 43题:字符串相乘
题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 "3&…...
基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)
一、项目简介 本项目是一套基于java Swing 和 mysql实现的飞机订票系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过…...
Jmeter性能综合实战 —— 签到及批量签到
提取性能测试的三个方面:核心、高频、基础功能 签 到 请 求 步 骤 1、准备工作: 签到线程组n HTTP请求默认值n HTTP cookie 管理器n 首页访问请求n 登录请求n 查看结果树n 调试取样器l HTTP代理服务器 (1)创建线程组 …...
燃气管网监测系统,提升城市燃气安全防控能力
燃气是我们日常生活中不可或缺的能源,但其具有易燃易爆特性,燃气安全使用、泄漏监测尤为重要。当前全国燃气安全事故仍呈现多发频发态势,从公共安全的视角来看,燃气已成为城市安全的重大隐忧!因此,建立一个…...
【SQL】1731. 每位经理的下属员工数量 ( 新思想:确定左表,依次添加后续字段)
leetcode题目链接 注意点 确定左表(即,确定result表中的主键),依次添加后续字段。注意:主键可能是一个字段,也可能是多个字段COUNT(DISTINCT()),一般为了防止重复,使用COUNT计数时,…...
AMD Radeon RX 7000/6000系列显卡安装ROCm 调用CUDA
A卡用户画图炼丹、跑大模型甚至是跑机器学习、深度学习的有福了~ 注意:ROCm目前仅限在Linux系统下可用,Windows暂不支持 1. 安装ROCm RX6000系列及以下显卡使用ROCm 5.4.2稳定版本命令 【支持包括桌面级AMD Radeon RX6950XT、RX6900XT、RX6800XT、RX6…...
钉钉小程序引用阿里巴巴图标
2.打开的界面如图,先建一个iconfont.acss文件,全选浏览器打开的样式代码,复制粘贴进新建的iconfont.acss文件中 3.使用...
深入了解Nginx:高性能的开源Web服务器与反向代理
一、Nginx是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,也可以作为负载均衡器和HTTP缓存服务器使用。它采用事件驱动、异步非阻塞的处理方式,能够处理大量并发连接和高流量负载ÿ…...
vue3 自定义显示内容
vue3 自定义显示内容 vue3 自定义显示内容示例uni-app封装自定义内容组件 vue3 自定义显示内容 在 Vue 3 中,你可以通过插槽(Slot)来自定义组件的显示内容。 插槽允许你将额外的内容插入到组件的特定位置,从而实现更灵活的组件…...
视频行为分析——视频图像转换与ffmpeg相关操作
工具类说明 1. 图像视频转换 1.1 视频输出gif from moviepy.editor import VideoFileClip # 设置输入视频文件路径和输出GIF文件路径 input_video video.avi output_gif output.gif # 读取视频文件 video VideoFileClip(input_video) # 将视频保存为GIF文件 video.write_…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
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…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
