维护节点redis集群节点

Redis cluster 集群节点维护 Redis cluster 集群节点维护 一 Redis cluster 集群节点维护 集群运行时间长久之后,难免由于硬件故障、网络规划、 业务增长等原因对已有集群进行相应的调整, 比如增加 Redis node 节点、 减少节点、 节点迁移、更换服务器等。 增加节点和删除节点会涉及到已有的槽位重新分配及数据迁移 二 动态添加master节点 增加 Redis node 节点,需要与之前的 Redis node 版本相同、配置一致,然后分别启动两台 Redis node,因为一主一从。 案例: 因公司业务发 阅读详情

1.1 

1.1.1 添加主节点

集群创建成功后可以向集群中添加节点,下面是添加一个master主节点

Ø 添加7007结点作为新节点

执行命令:./redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7001

 

 

 

Ø 查看集群结点发现7007已添加到集群中

 

 

 

1.1.2 hash槽重新分配

添加完主节点需要对主节点进行hash槽分配,这样该主节才可以存储数据。

 

Ø 查看集群中槽占用情况

 

redis集群有16384个槽,集群中的每个结点分配自已槽,通过查看集群结点可以看到槽占用情况。

 

 

 

Ø 给刚添加的7007结点分配槽

第一步:连接上集群(连接集群中任意一个可用结点都行)

[root@redis01 redis0707]# ./redis-trib.rb reshard 192.168.101.3:7001

 

第二步:输入要分配的槽数量

 

输入:500,表示要分配500个槽

 

第三步:输入接收槽的结点id

 

输入:15b809eadae88955e36bcdbb8144f61bbbaf38fb

PS:这里准备给7007分配槽,通过cluster nodes查看7007结点id为:

15b809eadae88955e36bcdbb8144f61bbbaf38fb

 

 

 

第四步:输入源结点id

 

输入:all

 

 

第五步:输入yes开始移动槽到目标结点id

 

输入:yes

 

 

1.1.3 添加从节点

 

集群创建成功后也可以向集群中添加从节点。

Ø 添加7008从结点,将7008作为7007的从结点

 

命令:./redis-trib.rb add-node --slave --master-id 主节点id 新节点的ip和端口 旧节点ip和端口

 

执行如下命令:

./redis-trib.rb add-node --slave --master-id cad9f7413ec6842c971dbcc2c48b4ca959eb5db4  192.168.101.3:7008 192.168.101.3:7001

 

cad9f7413ec6842c971dbcc2c48b4ca959eb5db4  是7007结点的id,可通过cluster nodes查看。

 

 

 

注意:如果原来该结点在集群中的配置信息已经生成到cluster-config-file指定的配置文件中(如果cluster-config-file没有指定则默认为nodes.conf),这时可能会报错:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法是删除生成的配置文件nodes.conf,删除后再执行./redis-trib.rb add-node指令

 

Ø 查看集群中的结点,刚添加的7008为7007的从节点:

 

 

 

 

1.1.4 删除结点

命令:./redis-trib.rb del-node 127.0.0.1:7005 4b45eb75c8b428fbd77ab979b85080146a9bc017

 

 

删除已经占有hash槽的结点会失败,报错如下:

[ERR] Node 127.0.0.1:7005 is not empty! Reshard data away and try again.

 

需要将该结点占用的hash槽分配出去(参考hash槽重新分配章节)。

2 Jedis连接集群

需要开启防火墙,或者直接关闭防火墙。

[root@localhost-0723 bin]# service iptables stop

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6380 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7001 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7002 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7003 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7004 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7005 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7006 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

~                                                                               

"/etc/sysconfig/iptables" 22L, 1079C 已写入                   

[root@localhost-0723 bin]# service iptables restart

iptables:应用防火墙规则:                                 [确定]

[root@localhost-0723 bin]#

 

2.1 代码实现

创建JedisCluster类连接redis集群。

 

@Test

public void testJedisCluster() throws Exception {

//创建一连接,JedisCluster对象,在系统中是单例存在

Set<HostAndPort> nodes = new HashSet<>();

nodes.add(new HostAndPort("127.0.0.1", 7001));

nodes.add(new HostAndPort("127.0.0.1", 7002));

nodes.add(new HostAndPort("127.0.0.1", 7003));

nodes.add(new HostAndPort("127.0.0.1", 7004));

nodes.add(new HostAndPort("127.0.0.1", 7005));

nodes.add(new HostAndPort("127.0.0.1", 7006));

JedisCluster cluster = new JedisCluster(nodes);

//执行JedisCluster对象中的方法,方法和redis一一对应。

cluster.set("cluster-test", "my jedis cluster test");

String result = cluster.get("cluster-test");

System.out.println(result);

//程序结束时需要关闭JedisCluster对象

cluster.close();

}

2.2 使用spring

Ø 配置applicationContext.xml

<!-- 连接池配置 -->

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">

<!-- 最大连接数 -->

<property name="maxTotal" value="30" />

<!-- 最大空闲连接数 -->

<property name="maxIdle" value="10" />

<!-- 每次释放连接的最大数目 -->

<property name="numTestsPerEvictionRun" value="1024" />

<!-- 释放连接的扫描间隔(毫秒) -->

<property name="timeBetweenEvictionRunsMillis" value="30000" />

<!-- 连接最小空闲时间 -->

<property name="minEvictableIdleTimeMillis" value="1800000" />

<!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->

<property name="softMinEvictableIdleTimeMillis" value="10000" />

<!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->

<property name="maxWaitMillis" value="1500" />

<!-- 在获取连接的时候检查有效性, 默认false -->

<property name="testOnBorrow" value="true" />

<!-- 在空闲时检查有效性, 默认false -->

<property name="testWhileIdle" value="true" />

<!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->

<property name="blockWhenExhausted" value="false" />

</bean>

<!-- redis集群 -->

<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">

<constructor-arg index="0">

<set>

<bean class="redis.clients.jedis.HostAndPort">

<constructor-arg index="0" value="192.168.101.3"></constructor-arg>

<constructor-arg index="1" value="7001"></constructor-arg>

</bean>

<bean class="redis.clients.jedis.HostAndPort">

<constructor-arg index="0" value="192.168.101.3"></constructor-arg>

<constructor-arg index="1" value="7002"></constructor-arg>

</bean>

<bean class="redis.clients.jedis.HostAndPort">

<constructor-arg index="0" value="192.168.101.3"></constructor-arg>

<constructor-arg index="1" value="7003"></constructor-arg>

</bean>

<bean class="redis.clients.jedis.HostAndPort">

<constructor-arg index="0" value="192.168.101.3"></constructor-arg>

<constructor-arg index="1" value="7004"></constructor-arg>

</bean>

<bean class="redis.clients.jedis.HostAndPort">

<constructor-arg index="0" value="192.168.101.3"></constructor-arg>

<constructor-arg index="1" value="7005"></constructor-arg>

</bean>

<bean class="redis.clients.jedis.HostAndPort">

<constructor-arg index="0" value="192.168.101.3"></constructor-arg>

<constructor-arg index="1" value="7006"></constructor-arg>

</bean>

</set>

</constructor-arg>

<constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg>

</bean>

 

 

Ø 测试代码

 

private ApplicationContext applicationContext;

@Before

public void init() {

applicationContext = new ClassPathXmlApplicationContext(

"classpath:applicationContext.xml");

}

 

// redis集群

@Test

public void testJedisCluster() {

JedisCluster jedisCluster = (JedisCluster) applicationContext

.getBean("jedisCluster");

 

jedisCluster.set("name", "zhangsan");

String value = jedisCluster.get("name");

System.out.println(value);

}

 

 

手把手教你用STM32F103C8T6驱动CLRC663国产NFC模块(兼容A/B/F/15693卡) 本文详细介绍了如何使用STM32F103C8T6驱动国产CLRC663 NFC模块,支持ISO14443A/B、Felica和ISO15693协议。从硬件设计、协议适配到状态监控,提供完整的工程实现方案,适用于智能门锁、支付终端等应用场景。 阅读详情

相关推荐

pytorch图像分类篇: 花分类数据集下载和AlexNet网络搭建训练

一、花分类数据集下载 data_setdata_set该文件夹是用来存放训练数据的目录 使用步骤如下: (1)在data_set文件夹下创建新文件夹"flower_data" (2)点击链接下载花分类数据集 (3)解压数据集到flower_data文件夹下 (4)执行"flower_data.py"脚本自动将数据集划分成训练集train和验证集val ├── flower_data ├── flower_photos(解压的数据集文件夹,3670个样本) ...

橙子的博客 8219

Redis 集群搭建

由于主从复制所有的写操作都是先在 Master 上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重。因此我们还需要集群来进一步提升 redis 性能。 集群原理 Redis 集群架构如下图: Redis 集群运行原理如下: 所有的 Redis 节点彼此互联( PING-PONG 机制),内部使用二进制协议优化传输速度和带宽 节点的 fail 是通过集群中超过半数的节点

彭楷淳在 优快云 555

成本150元的高性能RDP协议瘦客户机

云终端市场是一个跨度很大的市场。既有数千元的品牌的瘦客户机,也有几百元的瘦客户机,还有200-300元的支持RDP协议的多用户云终端。但是200-300元的多用户终端,在显示性能上不尽人意,一般用于地产中介门店,工厂产线的电子看板等场合。有没有性能更好,价格更低的方案呢? 答案是有。 这个方案就是 二手的x86 瘦客户机 + DoraOS瘦客户机系统免费版(仅支持RDP)。 首先我们看硬件,在某宝搜索 升腾C92 ,找到最低配置的( CPU:J1800,内存:2G,硬盘:8G)。价格都在150以内。

云飞扬的桌面云 7413

Docker安装Redis集群失败经历汇总

在程序员的开发过程中,Redis可以说基本上是必不可少的缓存中间件。不管是二进制包还是docker安装Redis的文章在网上都是数不胜数。我之前自己玩Redis的时候基本不是二进制包安装就是docker安装,也没有尝试过集群方式。每次需要的时候,网上百度一篇文章,安装一个单机版的,有的时候行,有的文章不行。也正是因为这个原因,本篇文章就想着自己创建Redis,通过docker方式进行部署。算是记录一下,方便以后使用。最后,然后我们再安装一下Redis集群模式。

帝上无天的博客 3276

Sourcetree与Gitee的搭配使用

初次将gitee与sourcetree联合起来使用,还是遇到了不少问题,其中最让人烦恼的就是在我修改了一下用户名之后,便无法在Sourcetree直接推送到gitee,很是让人郁闷。本文处理Sourcetree与gitee搭配使用过程中的问题:Sourcetree身份验证失败,无法推送;Sourcetree推送时,无法显示要推送的分支;Sourcetree远端上面有感叹号。

年少时的棉花糖 4435

【阿里云大模型高级工程师ACP习题集】2.1 用大模型构建新人答疑机器人

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2610

Redis Cluster集群(二)

需要更多教程,微信扫码即可 ???????????? 别忘了扫码领资料哦【高清Java学习路线图】 和【全套学习视频及配套资料】 1、客户端登陆 测试链接redis,存取数据(链接集群中任意一台机器就可以。) 存: [root@redis-cluster1 src]# ./redis-cli -h 192.168.116.172 -c -p 7000 192.168.116.172:7000> ping PONG 192.168.116.172:7000> set n

关注我!带你一路 "狂飙" 到底! 638

企业多部门网络隔离实战:用华为交换机VLAN+Trunk实现行政/技术部安全隔离

本文详细介绍了如何利用华为交换机的VLAN划分与Trunk链路技术,实现企业行政与技术部门间的网络逻辑隔离。通过具体的配置案例,阐述了Access与Trunk端口的工作原理、单交换机与多交换机环境下的部署策略,并延伸至三层网关部署与ACL访问控制,为企业构建安全、高效的核心网络提供实战指导。

p4q5r6s7t的博客 579

高性能网站架构设计之缓存篇

Redis 的主从复制配置非常容易,但我们先来了解一下它的一些特性。 redis 使用异步复制。从 redis 2.8 开始,slave 也会周期性的告诉 master 现在的数据量。可能只是个机制,用途应该不大。 一个 master 可以拥有多个 slave,废话,这也是业界的标配吧。 slave 可以接收来自其他 slave 的连接。意思是不是就是说 slave 在接收其他的sl

每天积累一点,一年后你会发现,自己变化很大 774

【初阶】手把手教你轻松上手Denodo | 连接数据库并创建基本视图 (二)

在本教程的第二部分,我们将涵盖:连接到数据库,与创建基本视图。

Denodo的博客 1113

YOLOv11安卓端部署终极指南:从训练到NCNN移植,30分钟搞定手机实时检测!

本文详细介绍了YOLOv11模型在安卓设备上的NCNN部署全流程。主要内容包括:1) 环境配置要求(Python3.8+、PyTorch、NCNN框架等);2) COCO2017数据集准备与配置;3) 模型训练建议(使用RTX3090,50-100个epoch);4) 模型导出转换步骤(ONNX格式转换、NCNN优化);5) 安卓端实现的关键优化(快速sigmoid实现、纯C++NMS等)。项目在安卓CPU模式下可实现20FPS的稳定检测,并提供了激活函数选择、模型量化等性能调优建议。通过参考多个开源项目,

FJN110的博客 1726

Redis系列之新增节点与删除节点(四)

在上一篇文章中,简单实现了一个Redis集群,假如需要在集群中增加或删除节点,怎么办呢,下面以一个例子来绍介下。 1、首先把前面搭建好的集群启动起来longwentaodeMacBook-Pro:redis-cluster longwentao$ cd 9001 longwentaodeMacBook-Pro:9001 longwentao$ ./redis-server redis.conf

kity9420的专栏 1925

基于YOLOv11的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理系统

基于YOLOv11的水果/商品/食堂/蔬菜/饮料/书籍识别与计价系统,前台+后台管理系统

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1225

redis(九)cluster 集群节点维护

Redis cluster 集群节点维护 集群运行时间长久之后,难免由于硬件故障、网络规划、 业务增长等原因对已有集群进行相应的调整, 比如增加 Redis node 节点、 减少节点、 节点迁移、更换服务器等。 增加节点和删除节点会涉及到已有的槽位重新分配及数据迁移。 动态添加master节点 增加 Redis node 节点,需要与之前的 Redis node 版本相同、配置一致,然后分别启动...

Not Found 404 915

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

redis--集群节点维护

因公司业务发展迅猛,现有的三主三从redis cluster架构可能无法满足现有业务的并发写入需求,因此公司紧急采购一台服务器192.168.7.107,需要将其动态添加到集群当中其不能影响业务使用和数据丢失,则添加过程如下:同步之前Redis node的配置文件到192.168.7.104 Redis编译安装目录,注意配置文件的监听 IP。

m0_65342309的博客 949

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

集群维护(重分配哈希槽)、移除,添加节点护、Redis集群扩展、twemproxy实现hash分片

对集群维护调整数据的存储,就是对slot哈希槽和节点的调整。Redis内置的集群支持动态调整,可以在集群不停机的情况下,改变slot、添加或删除节点。 ps -ef | grep redis ./redis-cli -p 7001 cluster nodes (查看集群信息) #分片重哈希,可以连接任意节点,对哈希槽进行重分配 #cd /root/redis-4.0.14/src/ ./redis-trib.rb reshard 192.168.200.130:7001 #...

qq_42722241的博客 619

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

redis演练(10) redis Cluster 集群节点维护

通过《redis演练(9)》演练,借助自带的redis-trib.rb工具,可“秒出”一个6节点的主从集群;还可以阅读服务器的响应;还演练了下自动failover效果。接上回继续演练。本文演练内容涵盖以下内容。为6节点集群环境,添加新节点删除新增的新节点集群间迁移1.添加新节点#环境清理 [root@hadoop2create-cluster]#./create-clus...

weixin_33796205的博客 184

Redis集群

** Redis集群 ** 一、redis-cluster【集群】架构图   架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)redis-cl...

鸭梨山大山大的博客 314

【Redis】Redis学习⑪ - redis高可用与集群-redis集群

codis-proxy 相当于redis,即连接codis-proxy和连接redis是没有任何区别的,codis-proxy无状态,不负责记录是否在哪保存,数据在zookeeper 记录,即codis proxy向zookeeper查询key的记录位置,proxy将请求转发到一个组进行处理,一个组里面有一个master和一个或多个slave组成,默认有1024个槽位,redis cluster默认有16384个槽位,其把不同的槽位的内容放在不同的group。被迁移的master服务器必须保证没有数据。

学无止境 186

Redis 高可用与集群

虽然 Redis 可以实现单机的数据持久化,但无论是 RDB 也好或者 AOF 也好,都解决不了单点宕机问题,即一旦单台 redis 服务器本身出现系统故障、硬件故障等问题后,就会直接造成数据的丢失,因此需要使用另外的技术来解决单点问题。

wang11876的博客 1万+

【Redis】Redis学习⑩ - redis高可用与集群-redis集群

在哨兵 sentinel 机制中,可以解决redis高可用的问题,即当master故障后可以自动将slave提升为master从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题,即单机的redis写入性能受限于单机的内存大小、并发数量、网卡速率等因素,因此redis官方在redis 3.0版本之后推出了无中心架构的redis cluster机制。redis cluster 的架构虽然解决了并发的问题,但是又引入了一个新的问题,每个redis master的高可用如何解决?

学无止境 223

Redis高可用-Cluster(集群)

集群运行时间长久之后,难免由于硬件故障、网络规划、业务增长等原因对已有集群进行相应的调整, 比如增加 Redis node 节点、减少节点、节点迁移、更换服务器等。添加节点的时候是先添加 node 节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相反,是先将被删除的 Redis node 上的槽位迁移到集群中的其他 Redis node 节点上,然后再将其删除。如果一个 Redis node 节点上的槽位没有被完全迁移,删除该 node 的时候会提示有数据且无法删除。

cuiwin的专栏 1123

NoSql数据库 - Redis Cluster集群详解及案例实现

在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master,从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题,即单机redis写入性能受限于单机的内存大小、并发数量、网卡速率等因素。redis 3.0版本之后推出了无中心架构的redis cluster机制,在无中心的redis集群当中,其每个节点保存当前节点数据和整个集群状态,每个节点都和其他所有节点连接所有Redis节点使用(PING机制)互联。

m0_63631814的博客 1431

【Redis】Redis学习⑨ - redis高可用与集群-redis集群

前一章的主从架构无法实现master和slave角色的自动切换,即当master出现redis服务异常、主机断电、磁盘损坏等问题导致master无法使用,而redis高可用无法实现自故障转移(将slave提升为master),需要手动改环境配置才能切换到slave redis 服务器,另外也无法横向扩展Redis服务的并行写入性能,当单台Redis服务器性能无法满足业务写入需求的时候就必须要一种方式解决以上的两个核心问题。1)master和slave角色的无缝切换,让业务无感知从而不影响业务使用。

学无止境 241

Redis集群模式之Redis Cluster(2)

上篇文章我们讲解了Redis Cluster中的主要模块和两种重定向方式,这篇文章我们来讲解一下Redis Cluster的状态监测和维护。

zErO__N的博客 1199

Redis集群之简单搭建和集群维护

文章目录1 redis集群1.1 redis集群简介1.2 redis集群步骤1.2.1 建立文件夹1.2.2 复制配置1.2.3 安装ruby1.2.3.1 gem install redis报错1.2.4 启动6个实例1.2.5 创建集群 1 redis集群 1.1 redis集群简介 在redis3.0以前,提供了Sentinel工具来监控各Master的状态,如果Master异常,则会做主从切换,将slave作为master,同时把master作为slave。其配置也是稍微的复杂,并且各方面表现一般

上善若泪 1533
上一篇: Redis Cluster 初探(1) - 集群搭建与扩容
下一篇: Tomcat中文乱码处理总结
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值