Redis7.2.3集群安装,新增节点,删除节点,分配哈希槽,常见问题
概念:
【Redis】高可用之三:集群(cluster) - 知乎
实操:
Redis集群三种模式
主从模式
优势:
-
主节点可读可写
- 从节点只能读(从节点从主节点同步数据)
缺点:
- 当主节点挂掉时,此时只提供读服务,没有写入能力,需要人工切换从节点为主节点
哨兵模式
优势:
- 基于主从模式基础上,增加哨兵节点实现自动故障转移,解决了主从模式的缺点
- 当主节点故障时,哨兵节点会通过Raft算法将故障主节点下的从节点选举为主节点
缺点:
-
由于始终只有一个主节点,所以写操作性能受限
-
数据存储能力受单机限制
集群模式
优势:
- 基于哨兵模式基础上,增加数据分片提高存储能力与写操作性能,解决了哨兵模式的缺点
-
引入哈希槽概念,将16384 个哈希槽( 编号0-16383),分配给每个主节点集群的每个节点负责一部分哈希槽
-
多个主节点和从节点提高读写性能
缺点:
- 主节点下不能有太多从节点,会影响性能
安装版本
- 虚拟机VMware Fusion13.5.0免费版
- CentOS7
- Redis7.2.3
集群安装
- 在虚拟机下安装2台个CentOS7的系统,可参考:在MacOS上使用VMware虚拟机安装CentOS 7操作系统-CSDN博客
- 用2台机器通过伪节点的方式安装6个redis节点,给每个机器运行3个redis节点(同一机器下每个节点端口不同)
- 192.168.79.135(hadoop001)占用端口5001,5002,5003
- 192.168.79.136(hadoop002)占用端口5001,5002,5003
- Redis源码安装包下载并解压(两个机器都需操作)
mkdir /usr/local/redis
cd /usr/local/redis
wget http://download.redis.io/releases/redis-7.2.3.tar.gz
tar -xzvf redis-7.2.3.tar.gz
- 需要c语言环境,安装gcc(两个机器都需操作)
yum install gcc-c++
- 编译源码,安装redis执行程序(两个机器都需操作)
cd /usr/local/redis/redis-7.2.3
make
make install PREFIX=/usr/local/redis/redis-cluster
- 创建各Redis节点目录,文件夹用端口命名方便区分(两个机器都需操作)
cd /usr/local/redis/
mkdir redis-cluster
cd /usr/local/redis/redis-cluster
mkdir redis-5001
mkdir redis-5002
mkdir redis-5003
- 拷贝配置文件redis.conf到每个节点bin目录并修改为相应的文件名(两个机器都需操作)
cp /usr/local/redis/redis-7.2.3/redis.conf /usr/local/redis/redis-cluster/bin/redis-5001.conf
cp /usr/local/redis/redis-7.2.3/redis.conf /usr/local/redis/redis-cluster/bin/redis-5002.conf
cp /usr/local/redis/redis-7.2.3/redis.conf /usr/local/redis/redis-cluster/bin/redis-5003.conf
- 修改每个节点文件目录下的redis.conf配置文件(例如:redis-5001.conf文件),修改为如下(两个机器都需操作)
#建议 bind 0.0.0.0
#bind绑定本机ip,则只能本机ip访问
#学习阶段建议注释bind完全放开访问限制(比如三方客户端也想访问)
#bind 0.0.0.0#关闭保护模式
protected-mode no#修改对应的端口,每个机器的节点端口都不同,本文分别占用5001,5002,5003
#可以参考文件目录文件夹名称,例如redis-5001目录下的在此为5001
port 5001#启动集群模式
cluster-enabled yes#集群节点信息文件,这里500x最好和port对应上
#可以参考文件目录文件夹名称,例如redis-5001目录下的在此为nodes-5001.conf
cluster-config-file nodes-5001.conf#节点离线的超时时间
cluster-node-timeout 5000#如果要设置密码需要增加如下配置:
#设置redis访问密码
requirepass 123456#设置集群节点间访问密码,跟上面一致,理论上可以不一致,但为了降低维护成本直接设置为一致比较方便
#当集群中从节点访问主节点时需要此密码,所以需要与requirepass
masterauth 123456#修改启动进程号存储位置
#可以参考文件目录文件夹名称,例如redis-5001目录下的在此为redis_5001.pid
pidfile /var/run/redis_5001.pid#指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
#可以参考文件目录文件夹名称,例如redis-5001目录
dir /usr/local/redis/redis-cluster/redis-5001#修改为后台启动
daemonize yes#启动AOF文件
appendonly yes
- 启动所有节点(两个机器都需操作)
cd /usr/local/redis/redis-cluster/bin
./redis-server redis-5001.conf
./redis-server redis-5002.conf
./redis-server redis-5003.conf
- 各节点启动完成后,此时还没有建立集群关系,都是独立运行状态,需要建立集群关系
- 建立集群关系前为了方便维护,修改各个机器的hosts建立ip映射(两个机器都需操作)
echo "192.168.79.135 hadoop001" >> /etc/hosts
echo "192.168.79.136 hadoop002" >> /etc/hosts
- 建立集群关系,执行如下命令(两个机器都需操作)
cd /usr/local/redis/redis-cluster/bin
./redis-cli -a 123456 --cluster create --cluster-replicas 1 hadoop001:5001 hadoop001:5002 hadoop001:5003 hadoop002:5001 hadoop002:5002 hadoop002:5003
--replicas 1:代表给每个主机点下配置一个从节点
- 然后会显示各个节点之间的建立的主从关系,如果觉得没问题 输入yes回车即可
- yes回车过后显示如下,则代表成功
新增集群节点
- 首先需要新增两个节点,所以在两个机器都需要操作,新建redis-5004节点相关文件,修改相关端口值为5004,并启动5004节点
# 创建5004节点目录
cd /usr/local/redis/redis-cluster/
mkdir redis-5004# 复制一份redis.conf文件
cp /usr/local/redis/redis-cluster/bin/redis-5001.conf /usr/local/redis/redis-cluster/bin/redis-5004.conf# 修改5004节点的redis.conf文件,将端口相关的值从5003修改为5004
# -------------------------------
# port 5004
# cluster-config-file nodes-5004.conf
# pidfile /var/run/redis_5004.pid
# dir /usr/local/redis/redis-cluster/redis-5004
# -------------------------------
cd /usr/local/redis/redis-cluster/bin
vi redis-5004.conf# 启动新节点5004
cd /usr/local/redis/redis-cluster/bin
./redis-server redis-5004.conf
新增主节点
- 将新节点添加到集群中成为主节点(新节点刚启动后,还处于独立运行状态)
# 第一个ip端口 127.0.0.1:5004 是要新增的节点
# 第二个IP端口 127.0.0.1:5001 是现有集群中的一个节点,-a 123456是需要密码
cd /usr/local/redis/redis-cluster/bin
./redis-cli --cluster add-node hadoop001:5004 hadoop001:5001 -a 123456# 查看集群节点状态
cd /usr/local/redis/redis-cluster/bin
# 登录一个节点
./redis-cli -h 127.0.0.1 -p 5001 -a 123456 -c
- 然后执行cluster nodes查到节点状态如下图,但此时新节点的槽为0,后续需要根据需要从其它主节点迁移槽过来
新增从节点
- 将新节点添加到集群中成为从节点(新节点刚启动后,还处于独立运行状态)
# 第一个ip端口 hadoop002:5004 是要新增的从节点ip端口
# 第二个IP端口 hadoop001:5004 是上一步新增的主节点ip端口,-a 123456是需要密码
# 3a20354e215cbd9c282011383ad3d0486afe8aa4是主节点id,也就是此从节点要关联的主节点id
cd /usr/local/redis/redis-cluster/bin
./redis-cli --cluster add-node hadoop002:5004 hadoop001:5004 --cluster-slave --cluster-master-id "3a20354e215cbd9c282011383ad3d0486afe8aa4" -a 123456# 查看集群节点状态
cd /usr/local/redis/redis-cluster/bin
# 登录一个节点
./redis-cli -h 127.0.0.1 -p 5001 -a 123456 -c
- 然后执行cluster nodes查到节点状态如下图,发现从节点添加成功
分配哈希槽(slot)
- 分配哈希槽是从现有集群中的其它主节点迁移一部分哈希槽到新主节点
- 分配哈希槽
# 分配哈希槽# 方法一
# 通过交互方式,可以指定多个源主节点,并根据输入的哈希槽迁移数量,自动从指定源头主节点均匀分配要迁出的哈希槽
# 127.0.0.1:5001 可以是集群中随便一个可以访问的节点,-a 123456是需要密码
cd /usr/local/redis/redis-cluster/bin
./redis-cli -a 123456 --cluster reshard 127.0.0.1:5001# 方法二
# 执行命令时直接指定迁移信息,省去了交互部分,直接yes即可
# --cluster-from 要迁出槽主节点id
# --cluster-to 要迁入槽主节点id
# --cluster-slots 要迁移的槽数量
# 执行后会提示 Do you want to proceed with the proposed reshard plan (yes/no)?
# 输入yes即可
cd /usr/local/redis/redis-cluster/bin
./redis-cli -a 123456 --cluster reshard 127.0.0.1:5001 --cluster-from bc14f675c94efc6009569d5da7c43b15be672fa0 --cluster-to a1a94648f505b665bfa7ca907cf4068bbd508e95 --cluster-slots 1365
- 具体执行过程中需要根据提示输入相应信息,如下图(方式一 样例)
- 需要注意,如果执行操作是将主节点迁出所有哈希槽给目标主节点,此时迁出哈希槽为0的主节点和此主节点下从节点都会变更为目标主节点的从节点
- (***慎用***)还有一个命令是rebalance是可以重新均匀分配全部哈希槽,比如当集群删除节点缩容后,想重新均匀分配哈希槽,可能会长时间阻塞客户端请求,所以尽量不要使用,如果非得迁移哈希槽,尽可能指定数量和迁出迁入节点
# 自动均匀分配哈希槽
cd /usr/local/redis/redis-cluster/bin
./redis-cli -a 123456 --cluster rebalance hadoop001:5002
- 执行效果如下图
删除节点
删除节点时操作顺序,迁移要删除的主节点哈希槽->删除从节点->删除主节点
- 首先需要先将要删除的主节点哈希槽迁移至其它主节点,迁移哈希槽参考,上面的分配哈希槽内容
- 然后就是先删除从节点再删除主节点既可
# 删除从节点
# hadoop002:5004 是集群中要删除的从节点IP端口,-a 123456是需要密码
# 1f3a8532d72c1bea6f1b45ea74adc97d28843b95 是从节点的节点id
cd /usr/local/redis/redis-cluster/bin
./redis-cli --cluster del-node hadoop002:5004 1f3a8532d72c1bea6f1b45ea74adc97d28843b95 -a 123456# 删除主节点
# hadoop001:5004 是集群中要删除的主节点IP端口,-a 123456是需要密码
# 3a20354e215cbd9c282011383ad3d0486afe8aa4 是主节点的节点id
cd /usr/local/redis/redis-cluster/rbin
./redis-cli --cluster del-node hadoop001:5004 3a20354e215cbd9c282011383ad3d0486afe8aa4 -a 123456
- 删除节点执行效果如下图
- 如果节点还存在哈希槽的情况下,删除节点会报错
测试
-
集群故障测试
- 通过redis-cli连接redis并插入数据测试
- 模拟集群里的一个主节点故障,通过kill -9杀掉了192.168.79.136下的5001节点
-
Java代码连接测试
Java通过Lettuce访问Redis主从,哨兵,集群-CSDN博客
常见问题
- 如果在没安装gcc的情况下执行redis源码的编译安装(make install)报错,之后安装gcc以后再执行编译安装(make install)会报 jemalloc/jemalloc.h: No such file or directory 错误,需执行make distclean 清理之前编译出错的缓存,再编译安装即可
- 在虚拟机下建议降系统都配置为静态ip,防止每次重启ip可能会变,导致突然访问不了机器,参考:MacOS下VMware Fusion配置静态IP-CSDN博客
- 执行创建集群命令后最后一直处于 Waiting for the cluster to join.. 状态,则说明节点之间有无法通信的情况,检查节点端口以及集群总线端口是否打开,依次检查方式,检查网络ping ip,检查端口nc -zv ip 端口,如果无法访问确定访问ip端口是否正确和防火墙是否打开
- 在服务器防火墙中需要打开每个redis节点的端口以及集群总线端口(例如:节点端口5001,则集群总线端口默认为+10000也就是15001),参考:linux防火墙查看状态firewall、iptable - 简书
- 需要注意 redis.config文件中的bind IP 配置是否正确,学习阶段可以配置 bind 0.0.0.0 为完全放开
- 各节点下的redis.config的masterauth(主节点访问密码)和requirepass(访问密码)都要设置,最好为一致方便维护,因为slave的masterauth和master的requirepass是对应的,容易弄错后发现slave无法从master同步数据,甚至在master节点挂掉时,slave节点无法升级为master,导致无法到达故障转移的目的(redis集群某主节点宕机,其从节点未自动接管(故障转移未生效)问题解决_zoeezym的博客-CSDN博客)
- 创建集群时报:[ERR] Node xxx is not empty. Either the node already knows other nodes (check with CLUSTER NODES)... ,可能是之前创建集群失败导致残留文件,清除所有节点目录(目录以各节点的redis.config配置的dir 路径为准)的 appendonlydir,dumm.rdb,node.conf 再重新执行
参考
redis集群搭建 - 知乎
Redis集群环境的搭建 - 知乎
Redis集群之主从、哨兵、分片集群,SpringBoot整合Redis集群_小道仙97的博客-CSDN博客
Redis三种集群模式介绍及搭建_redis 集群_0307.quē的博客-CSDN博客
笔记(十):redis集群_redis集群从节点读取数据吗-CSDN博客
redis cluster集群常见错误问题记录_redis集群模式常见问题_金麟十三少的博客-CSDN博客
Redis-Cluster集群操作--添加节点、删除节点_redis集群添加节点-CSDN博客
redis集群缩容
Redis-集群搭建(cluster集群、集群创建、节点配置、节点添加、节点删除、槽位分配)_redis cli连接集群节点_JolyouLu的博客-CSDN博客
相关文章:

Redis7.2.3集群安装,新增节点,删除节点,分配哈希槽,常见问题
概念: 【Redis】高可用之三:集群(cluster) - 知乎 实操: Redis集群三种模式 主从模式 优势: 主节点可读可写 从节点只能读(从节点从主节点同步数据) 缺点: 当主节点…...

并行计算机系统结构基础
一、并行计算机系统结构 1.并行性 并行性:计算机系统在同一时刻或者同一时间间隔内 进行多种运算或操作 并行性包括两方面的含义 同时性:两个或两个以上的事件在同一时刻发生并发性:两个或两个以上的事件在同一时间间隔 内发生 从处理数…...

Ubuntu开启永久开启串口权限方法
sudo gedit /etc/udev/rules.d/70-ttyusb.rules//不存在就创建 在该文件中添加如下一行 KERNEL“ttyUSB*”, MODE“0777” 重启系统 sudo reboot...

zTree设置默认选中节点(当前组织默认选中)
/* 节点点击事件 */function onClick(e, treeId, treeNode) {var zTree $.fn.zTree.getZTreeObj("treeDemo"),nodes zTree.getSelectedNodes(),v "";//存储组织名称idd"";//存储组织IDnodes.sort(function compare(a,b){return a.id-b.id;});…...

结合 Django 和 Vue.js 打造现代 Web 应用
概要 在 Web 开发的世界里,Django 和 Vue.js 分别是后端和前端两个非常流行的框架。Django 以其强大的后端能力、快速开发以及安全性而著称,而 Vue.js 因其简洁、灵活和易于上手在前端开发领域广受欢迎。 本篇文章将详细介绍如何将 Django 与 Vue.js 结…...

【Linux网络】ssh服务与配置,实现安全的密钥对免密登录
目录 一、SSH基础 1、什么是ssh服务器 2、对比一下ssh协议与telnet协议 3、常见的底层为ssh协议的软件: 4、拓展 二、SSH软件学习 1、ssh服务软件学习 2、sshd公钥传输的原理: 3、ssh命令学习: 4、学习解读sshd服务配置文件&#x…...

自建ES7.10集群,使用OSS快照恢复数据测试
一、云上集群创建仓库 前置条件 创建云OSS bucket lcsc-es-snapshot,并获取到access_key_id,secret_access_key信息 授予oss bucket lcsc-es-snapshot相关方完全控制权限 创建一个名称为my_backup的仓库。 云上集群创建仓库。PUT _snapshot/my_backup/ {"type": &qu…...

电源线虚接,导致信号线发烫
音频板的信号是经过隔直电容接到音频板的。...

【23真题】难!985难度第一梯队!
今天分享的是23年华南理工大学811的信号与系统试题及解析 本套试卷难度分析:22年华南理工大学811考研真题,我也发布过,若有需要,戳这里自取!本套试题难度中等偏上,只有十道大题,考察大家的综合…...

计算机网络———ipv6简解
文章目录 1.前言:2. ipv6简单分析:2.1.地址长度对比2.2. ipv6包头分析2.3. ipv6地址的压缩表示:2.3. NDP:2.4. ipv6地址动态分配: 1.前言: 因特网地址分配组织)宣布将其最2011年2月3日,IANA (In…...

SQL之开窗函数
文章目录 主要内容一.介绍1.特点2.作用 二.语法及示例1.语法代码如下(示例): 2.示例代码如下(示例):代码如下(示例):代码如下(示例): 总结 主要内容 SQL的开窗函数是SQL语言中非常强…...

OpenAI与微软合作,构建 ChatGPT 5 模型;10天准确天气预报
🦉 AI新闻 🚀 OpenAI与微软合作,构建 ChatGPT 5 模型,下一代人工智能或拥有超级智能 摘要:OpenAI首席执行官 Sam Altman 在接受采访时表示,OpenAI正在与微软合作构建下一代人工智能模型 ChatGPT 5&#x…...

git简明指南
目录 安装 创建新仓库 检出仓库 工作流 安装 下载 git OSX 版 下载 git Windows 版 下载 git Linux 版 创建新仓库 创建新文件夹,打开,然后执行 git init 以创建新的 git 仓库。 检出仓库 执行如下命令以创建一个本地仓库的克隆版本&…...

软件测试面试-如何定位线上出现bug
其实无论是线上还是在测试出现bug,我们核心的还是要定位出bug出现的原因。 定位出bug的步骤: 1,如果是必现的bug,尽可能的复现出问题,找出引发问题的操作步骤。很多时候,一个bug的产生,很多时…...

5、鸿蒙项目远程调试
一、注册华为账号, 如果是华为手机,并注册了账号可能跳过此步骤,如果使用邮箱注册,此邮箱一定是要正确的邮箱,此处需要使用邮箱获取验证码 注册地址: 1、进入注册页面,输入手机号等信息后点…...

什么是原生IP与广播IP?如何区分?为什么需要用原生IP?
在代理IP中,我们常常听到原生IP与广播IP,二者有何区别?如何区分呢?下面为大家详细讲解。 一、什么是原生IP 原生IP地址是互联网服务提供商(ISP)直接分配给用户的真实IP地址,无需代理或转发。此…...

下载文件时的文件名中文乱码问题,文件名丢失
涉及到的java代码如下,下载的时候文件名为中文 package com.example.springboot.service.impl;import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringU…...

ios swift sqlite3 简单使用
一.创建Person类 import UIKitclass Person: NSObject {var name:String? nilvar sex:String? nilvar age:String? niloverride func setValue(_ value: Any?, forUndefinedKey key: String) {}} 二.在使用的地方导入sqlite.3头文件,例如方法都在viewcontr…...

长古诗(一)
春江花月夜 【作者】张若虚 【朝代】 春江潮水连海平,海上明月共潮生。 滟滟随波千万里,何处春江无月明! 江流宛转绕芳甸,月照花林皆似霰; 空里流霜不觉飞,汀上白沙看不见。 江天一色无纤尘&#x…...

VC++ 预编译头学习
头文件的作用,就是把自己的 所有内容直接“粘贴”到相应的 #include 语句处。 编译器在编译你的程序的时候,所做 的第一件事,也就是展开所有的 #include 语句和 #define 语句。 头文件的出现,给书写程序带来了很大方便。 到了 Windows 时代后,慢慢 就呈现出一些问题。 几…...

JVM内存模型:理解Java程序的内存管理
JVM内存模型:理解Java程序的内存管理 在Java编程中,JVM(Java虚拟机)是程序的运行环境,它负责管理程序的内存。JVM内存模型是Java语言规范中定义的一套规则,用于描述在JVM中程序如何通过内存来交互和操作。…...

golang opt-in transparent telemetry
目录 1. golang opt-in transparent telemetry1.1. Getting started1.2. Learning Go1.3. Troubleshooting 1. golang opt-in transparent telemetry Recent gopls release (v0.14) includes opt-in transparent telemetry. Telemetry uploading is off by default even when…...

数据资产“入表”是不是红利?国企怎么认识?怎么利用?
毫无疑问,数字资产入表是红利。 数据资产入表意味着将数据资源作为企业资产进行确认和计量,解决了数据资源作为非物质资产未被充分认可和有效计量的问题,意味着数据完成了从自然资源到经济资产的跨越。上海数据交易所总经理汤奇峰此前表示&a…...

薪资面谈小技巧
从求职者的角度上来说,要求高工资是很正常的,这本身就无可厚非,毕竟金钱是人们衡量一份工作价值的首要因素。但是,我们经常看到这样一种现象,那就是求职者漫天要价。当很想雇佣这个求职者但是其所提薪资无法满足时&…...

基于Java的鲜花商店的设计与实现,ssm+jsp,MySQL数据库,前台用户+后台管理,完美运行,有一万字论文
目录 演示视频 基本介绍 选题背景 系统结构 论文目录 系统截图 演示视频 基本介绍 基于Java的鲜花商店的设计与实现,ssmjsp,MySQL数据库,前台用户后台管理,完美运行,有一万字论文。 前台功能:注册登…...

vue3 父组件调用子组件的方法
在Vue 3中,要使父组件调用子组件的方法,可以通过以下步骤实现: 在子组件中定义一个方法,可以在methods对象中定义该方法。例如: <script> export default { methods: { myMethod() { // 方法逻辑 } } …...

和鲸科技创始人范向伟受邀出席“凌云出海,来中东吧”2023华为云上海路演活动
11月9日,华为云“凌云出海,来中东吧”系列路演活动第二场在上海正式开启。聚焦“创业全球化”,本次活动由华为云携手阿布扎比投资办公室(ADIO)举办,旨在与渴望出海发展的优秀创业者们共探出海中东新商机。 …...

短路语法 [SUCTF 2019]EasySQL1
打开题目 输入字符的时候啥也不回显。只有输入数字的时候页面有回显 但是当我们输入union,from,sleep,where,order等,页面回显nonono,很明显过滤了这些关键词 最开始我的思路是打算尝试双写绕过 1;ununion…...

鉴源实验室 | DoIP协议网络安全攻击
作者 | 付东杰 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 背 景 随着科技的迅猛发展,汽车行业正经历着前所未有的数字化变革。现代汽车中使用70多个电子控制单元&#x…...

腾讯云服务器新用户购买优惠多少钱?腾讯云新用户购买优惠
对于新用户来说,腾讯云服务器更是提供了一系列的优惠活动,让你在购买时享受到更多的优惠。那么,腾讯云服务器新用户购买优惠多少钱呢?接下来,让我们一起来了解一下。 腾讯云双十一领9999代金券 https://1111.mian100.…...