Redis高可用集群之水平扩展(redis集群性能)
mhr18 2024-11-09 12:18 28 浏览 0 评论
Redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片等特性,集群模式没有中心节点,可水平扩展,根据官方文档称可以线性扩展到上万个节点(官方推荐不超过1000个节点),但是水平扩展相对比较麻烦,接下来带大家看看如何做Redis高可用集群水平扩展。
原集群由6个Redis节点组成,分布在三台机器上,采用三主(master)三从(slave)的模式:
IP为192.168.1.6的机器Redis实例分别为,master:6380;slave:6379。
IP为192.168.1.7的机器Redis实例分别为,master:6381;master:6382。
IP为192.168.1.8的机器Redis实例分别为,master:6383;slave:6384。
接下来做Redis高可用集群水平扩展,在IP为192.168.1.6的机器上创建两个Redis实例,水平扩展之后变成四主(master)四从(slave)的集群模式,如下图:
1.通过客户端连接Redis实例
/usr/local/redis/bin/redis-cli -a 123456 -c -h 192.168.1.6 -p 6379
2.查看集群状态
192.168.1.6:6379>cluster nodes
从集群结果中可以看出整个redis集群运行正常,三个master主节点和三个slave从节点,主节点master分配了存储数据的hash槽位, 而slave节点是每个主节点的备份从节点,不显示存储槽位。
3.水平扩展集群操作
3.1 创建一主(master)一从(slave)Redis实例
cd /usr/local/redis/etc
#复制配置文件
cp redis-6380.conf redis-6385.conf
cp redis-6380.conf redis-6386.conf
#修改配置文件
vim redis-6385.conf
#端口号
port 6385
#pidfile的路径
pidfile /usr/local/redis/logs/redis-6385.pid
#日志文件的路径
logfile /usr/local/redis/logs/redis-6385.log
#持久化数据存放的目录
dir /usr/local/redis/data/6385/
#集群节点信息文件,最好与port端口对应
cluster‐config‐file nodes‐6385.conf
配置文件redis-6386.conf和Redis实例6385修改方法一样。
3.2 启动新增的两个Redis实例并查看
cd /usr/local/redis/bin
#启动Redis实例
./redis-server /usr/local/redis/etc/redis-6385.conf
./redis-server /usr/local/redis/etc/redis-6386.conf
#查看服务状态
ps -ef|grep redis
3.3 查看Redis集群命令帮助
/usr/local/redis/bin/redis-cli --cluster help
帮助说明如下:
create:创建一个集群环境host1:port1 ... hostN:portN。
check:检查集群状态。
reshard:集群环境重新分片。
rebalance:平衡集群节点slot数量。
add-node:将一个节点添加到集群里,参数:new_host:new_port existing_host:existing_port,第一个参数为新节点(new_host)的ip:port,第二个参数为集群中任意一个已经存在的节点(existing_host)的ip:port。
del-node:移除一个节点。
call:可以执行redis命令。
3.4 配置Redis实例6385为集群主节点
#使用命令add-node新增一个主节点6385。
/usr/local/redis/bin/redis-cli -a 123456 --cluster add-node 192.168.1.6:6385 192.168.1.6:6380
#查看集群状态
/usr/local/redis/bin/redis-cli -a 123456 -c -h 192.168.1.6 -p 6379
192.168.1.6:6379>cluster nodes
当新节点加入集群后,节点没有任何数据,因为它还没有分配存储hash槽位(slot),需要手工为新节点分配hash槽位。
#使用命令reshard重新为节点分配槽位
/usr/local/redis/bin/redis‐cli ‐a 123456 ‐‐cluster reshard 192.168.1.6:6380
3.5 配置Redis实例6386为主节点6386的从节点
#将redis实例6386节点添加到集群中
/usr/local/redis/bin/redis-cli -a 123456 --cluster add-node 192.168.1.6:6386 192.168.1.6:6380
#查看集群状态
/usr/local/redis/bin/redis-cli -a 123456 -c -h 192.168.1.6 -p 6380
192.168.1.6:6380>cluster nodes
已经成功将redis实例6386添加到集群,并且还是master,还没有分配hash槽位。
#通过执行replicate命令来指定当前从节点的主节点为哪个,首先需要连接新加的6386节点的客户端,然后使用集群命令进行操作,把当前的6386(master)节点指定到一个主节点6385(master)下成为从节点。
#连接客户端
/usr/local/redis/bin/redis-cli -a 123456 -c -h 192.168.1.6 -p 6386
#执行replicate命令来指定
192.168.1.6:6386> cluster replicate 6a14670fcf844b7ea35177a40b49ea50e36286fe
至此Redis高可用集群水平扩展完成。
4.水平扩展集群删除操作
4.1.先删除从节点
#通过命令del-node先删除从节点6386,指定删除节点ip和端口,以及节点id
/usr/local/redis/bin/redis-cli -a 123456 --cluster del-node 192.168.1.6:6386 58ddf8c9ff21225dea479f3cc1b158ed78b00829
#查看集群状态
/usr/local/redis/bin/redis-cli -a 123456 -c -h 192.168.1.6 -p 6380
192.168.1.6:6380>cluster nodes
redis从节点6385已经移除,并且该节点的redis服务已经停止服务。
4.2.最后删除主节点
#删除主节点相对麻烦,因为主节点里分配了hash槽位,先要把主节点里的hash槽位移除到其他可用的主节点中去,然后再进行移除节点,不然会出现数据丢失问题
/usr/local/redis/bin/redis-cli -a 123456 --cluster reshard 192.168.1.6:6385
操作如下:
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.#迁移量
How many slots do you want to move (from 1 to 16384)? 900#需要把数据迁移到那个可用的主节点id(6380)
What is the receiving node ID? 5d25be4b68237e66b78b50f712a9bb410a3dde60
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.#数据源节点ID(6385)
Source node #1: 6a14670fcf844b7ea35177a40b49ea50e36286feSource node #2: done
Do you want to proceed with the proposed reshard plan (yes/no)? yes#查看集群状态
/usr/local/redis/bin/redis-cli -a 123456 -c -h 192.168.1.6 -p 6380
192.168.1.6:6380>cluster nodes
通过上图可以看出已经成功的把主节点6385的数据迁移到6380上去了,6385节点已经没有任何hash槽了,证明迁移成功!
#通过命令del-node删除6385主节点
/usr/local/redis/bin/redis-cli -a 123456 --cluster del-node 192.168.1.6:6385 6a14670fcf844b7ea35177a40b49ea50e36286fe
#查看集群状态
/usr/local/redis/bin/redis-cli -a 123456 -c -h 192.168.1.6 -p 6380
192.168.1.6:6380>cluster nodes
#平衡集群节点slot数量
/usr/local/redis/bin/redis-cli -a 123456 --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 192.168.1.6:6380
话说一招回到解放前,但是Redis高可用集群水平扩展比较麻烦,删除水平扩展的节点同样比较麻烦,因为存在节点数据迁移,不然会存在数据丢失问题。
相关推荐
- Java培训机构,你选对了吗?(java培训机构官网)
-
如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...
- 产品经理MacBook软件清单-20个实用软件
-
三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...
- RAD Studio(Delphi) 本月隆重推出新的版本12.3
-
#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...
- 图解Java垃圾回收机制,写得非常好
-
什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...
- Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷
-
1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...
- 半虚拟化如何提高服务器性能(虚拟化 半虚拟化)
-
半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...
- HashMap底层实现原理以及线程安全实现
-
HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...
- long和double类型操作的非原子性探究
-
前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...
- 数据库DELETE 语句,还保存原有的磁盘空间
-
MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...
- 线程池—ThreadPoolExecutor详解(线程池实战)
-
一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...
- navicat如何使用orcale(详细步骤)
-
前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...
- 你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开
-
各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...
- 大数据正当时,理解这几个术语很重要
-
目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...
- 秒懂列式数据库和行式数据库(列式数据库的特点)
-
行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...
- AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4
-
AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)