`
wb284551926
  • 浏览: 551470 次
文章分类
社区版块
存档分类
最新评论

Redis 集群(中)(转载)

 
阅读更多

昨天晚上钓鱼回来,大发神经,写了篇概括程序员生活现状的文章,没想到招来众多人的口诛笔伐,大有上升到政治层面的趋势。

我也许不会再发表任何冲击心灵的文章,我希望给大家带来更多的正能量,所以那篇文章已被我删除。

我的本意只是想让各位看过文章之后能冷静地思考自己的程序人生,不管是对是错,人都有选择的权力,走好自己的路。

我没有你们想象中那么悲观,我也在不懈的努力,哪怕一时的跌倒,我也要重新站起。

生活无时无刻不是压力,让我们背起行囊,迈出踏实的一步,走起!

我们继续我们的 redis 缓存之旅。

前一篇我们实现了一个简单的 redis 集群,redis 也为了让我们方便的维护集群提供了非常好的工具。

首先请大家参照我的上一篇文章,把集群环境搭建起来。

OK,我用了分分钟的时间已经搭建好了。

[OK] All 16384 slots covered.

zhaoguihuadediannao:src zhaogh$ ./redis-cli -c -p 9001

127.0.0.1:9001> get testkey001

-> Redirected to slot [12786] located at 127.0.0.1:9003

(nil)

127.0.0.1:9003> 

如何增加节点:

首先我们创建一个叫做 9004 的目录:

zhaoguihuadediannao:redis-cluster zhaogh$ mkdir 9004

zhaoguihuadediannao:redis-cluster zhaogh$ 

接着我们将 9001 目录下的 redis-server 、 redis.conf 两个文件拷贝到 9004 目录:

zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis-server 9004

zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis.conf 9004

然后我们打开 redis.conf 文件修改里面的端口配置项,将其改为 9004 。

启动 9004 实例:

zhaoguihuadediannao:redis-cluster zhaogh$ cd 9004

zhaoguihuadediannao:9004 zhaogh$ ./redis-server ./redis.conf

zhaoguihuadediannao:9004 zhaogh$ 

想要把这个实例加入到集群,我们只需要执行 redis-trib.rb 命令:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb add-node 127.0.0.1:9004 127.0.0.1:9001

第一个参数是我们刚才启动的新实例,第二个参数是集群中已有的节点。

检查一下新节点是否已经加入:

zhaoguihuadediannao:src zhaogh$ ./redis-cli -c -p 9001

127.0.0.1:9001> cluster nodes

0e8f980bfe7a682e3d71b15523a41293535b8ccd :0 myself,master - 0 0 1 connected 0-5460

cbb01bdfdc265b190496956354d84aaae6e7d54d 127.0.0.1:9004 master - 0 1401952316346 0 connected

708e6e14474e3a99677b05ff89bd857375884437 127.0.0.1:9002 master - 0 1401952314325 2 connected 5461-10922

a7f9d3c64540cc3fc8cd3072e573bb8ab0bf1e6f 127.0.0.1:9003 master - 0 1401952315334 3 connected 10923-16383

127.0.0.1:9001> 

我们可以发现 9004 并不包含任何哈希槽,因为它还没有数据。

我们还可以为集群中的主节点增加从节点用于只读查询。

如何增加从节点:

我们还是要创建目录,拷贝那两个文件,修改配置,然后启动实例:

zhaoguihuadediannao:redis-cluster zhaogh$ mkdir 9005

zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis-server 9005

zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis.conf 9005

修改 port 为 9005

zhaoguihuadediannao:redis-cluster zhaogh$ cd 9005

zhaoguihuadediannao:9005 zhaogh$ ./redis-server ./redis.conf

zhaoguihuadediannao:9005 zhaogh$ 

执行下面的命令,增加从节点:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb add-node --slave 127.0.0.1:9005 127.0.0.1:9001

第一个参数为从节点,第二个参数为主节点。

如何删除一个节点:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 'cbb01bdfdc265b190496956354d84aaae6e7d54d'

这里要注意一下,第一个参数是集群中的任何一个主节点地址,而第二个参数是要删除节点的 ID,这个ID如果你不知道的话,可以通过 cluster nodes 命令查看。

还有一点就是要删除的节点必须是空的,也就是不能缓存任何数据,否则会删除不成功。对于非空节点,在删除之前需要重新分片,将缓存的数据转移到别的节点。

如何重新分片:

我们先给某个节点做点数据:

zhaoguihuadediannao:src zhaogh$ ./redis-cli -c -p 9001

127.0.0.1:9001> set testkey001 testvalue001

-> Redirected to slot [12786] located at 127.0.0.1:9003

OK

127.0.0.1:9003> 

现在 9003 上已经有数据了,我们尝试删除一下:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 '78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'

>>> Removing node 78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3 from cluster 127.0.0.1:9001

Connecting to node 127.0.0.1:9001: OK

Connecting to node 127.0.0.1:9002: OK

Connecting to node 127.0.0.1:9003: OK

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

zhaoguihuadediannao:src zhaogh$ 

没有删除成功,我们来重新分片,把 9003 上的数据转移:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb reshard 127.0.0.1:9003

然后输出了很多信息,很多数值和ID都可以从这段信息中找到。

How many slots do you want to move (from 1 to 16384)? 5461

会问你要移动多少个哈希槽,我们把 9003 上的所有哈希槽都移走,5461 这个数字可以从终端上看到,或许你的实际情况不是这个数字。

What is the receiving node ID? 4d2e0a8360795ce7ce8381c68746034aeba3c9b9

然后问你你要把这些哈希槽移到哪儿去,我指定了 9001 的 节点 ID。

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.

Source node #1:78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3

Source node #2:done

之后,redis 列出了重新分片计划,最后问你

Do you want to proceed with the proposed reshard plan (yes/no)? yes

 

执行完成后,我们看看 9003 上还有没有 key:

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 9003

127.0.0.1:9003> keys *

(empty list or set)

127.0.0.1:9003> 

再看看 9001 上是不是有这个 key 了

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 9001

127.0.0.1:9001> keys *

1) "testkey001"

127.0.0.1:9001> 

没错,果然转移过来了。

最后我们试试能不能把 9003 删除:

zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 '78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'

>>> Removing node 78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3 from cluster 127.0.0.1:9001

Connecting to node 127.0.0.1:9001: OK

Connecting to node 127.0.0.1:9002: OK

Connecting to node 127.0.0.1:9003: OK

>>> Sending CLUSTER FORGET messages to the cluster...

>>> SHUTDOWN the node.

zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 9003

Could not connect to Redis at 127.0.0.1:9003: Connection refused

not connected> 

非常好,it’s very good.

 

原文地址:http://www.cnblogs.com/zhaoguihua/p/redis-006.html

分享到:
评论

相关推荐

    springcloud部署redis集群

    在SpringCloud框架中,部署Redis集群是实现高可用、数据持久化和分布式缓存的关键步骤。Redis是一款高性能的键值数据库,广泛应用于缓存、消息队列等多种场景。SpringCloud通过集成Spring Data Redis模块,使得在...

    k8s集群搭建redis集群

    k8s集群搭建redis集群 k8s集群搭建redis集群 k8s集群搭建redis集群 k8s集群搭建redis集群 k8s集群搭建redis集群

    阿里云公网redis集群搭建以及java访问redis集群

    3. 配置集群模式:在创建实例的过程中,选择“集群版”以创建Redis集群。集群版支持数据分片,提高了数据容错性和可扩展性。 4. 安全配置:设置访问密码,配置安全组规则,允许公网IP访问Redis实例。确保安全组规则...

    SpringBoot集成Redis集群

    在本文档中,我们将指导您如何在SpringBoot 2.X中集成Redis集群。下面是相关的知识点: 集成Redis集群的必要性 在实际应用中,使用Redis集群可以提高系统的可扩展性和可靠性。Redis集群可以将数据分布在多个节点上...

    springboot整合redis集群零配置

    在Spring Boot 2.1及以上版本中,我们可以利用`spring.redis.cluster.nodes`属性来实现零配置连接到Redis集群,只需将所有集群节点的IP和端口以逗号分隔的形式列出即可,如: ```properties spring.redis.cluster....

    redis集群连接及工具类DEMO

    【Redis集群连接及工具类DEMO】是一个Spring工程,它提供了与Redis集群交互的实例,同时也包含了一些实用的工具类,使得开发者能够更方便地在Java应用中使用Redis作为数据存储。这个DEMO的主要目标是展示如何配置和...

    Redis集群弱/空密码问题整改

    使用redis安装用户,在命令行连接上redis集群后,执行命令:config set requirepass 【自定义的强密码】,如: config set requirepass mypassword@#75@~ 然后执行 config rewrite 将配置密码持久化到redis配置文件...

    spring + redis集群

    总结,本篇文章详细介绍了如何使用Spring Data Redis搭建Redis集群,以及如何在Spring应用中操作Redis集群,存储和检索对象。`RedisClusterDemo`项目提供了一个具体的实践示例,适合初学者理解和学习。

    Redis集群测试

    在“Redis集群测试”中,我们通常会关注以下几个关键知识点: 1. **集群架构**:Redis集群采用无中心节点的分布式架构,由多个独立的Redis实例组成,每个实例负责一部分键空间。数据通过哈希槽(Hash Slots)进行...

    Redis集群下过期key监听的实现代码

    在使用redis集群时,发现过期key始终监听不到。网上也没有现成的解决方案。于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听。以上做法可能不尽人意,目前也没找到好的解决...

    Redis集群配置文件

    Redis集群配置文件,包含了三个主节点,三个从节点的配置文件,该配置是在docker中运行,有完整的docker-compose.yml文件,只要修改映射的宿主机的路径为你自己的路径。然后直接docker-compose up既可以完成环境启动...

    Redis集群数据迁移操作文档

    实际迁移过程中,我们以两个场景为例:一是从一个Redis集群(Cluster_A)迁移到另一个Redis集群(Cluster_B),二是从Redis集群(Cluster_A)迁移到单个Redis实例(Redis_C)。在迁移前,务必先检查源和目标Redis...

    rancher2.3.6部署redis集群配置教程.pdf

    标题中的“rancher2.3.6部署redis集群配置教程.pdf”暗示了这份文档是针对特定版本的Rancher软件(版本号2.3.6)的使用教程,旨在指导用户如何部署Redis集群。Rancher是一款开源的容器管理平台,可以用来部署、管理...

    redis集群批量插入

    总结起来,要在Java中连接Redis集群并批量插入String类型数据,你需要: 1. 配置JedisCluster实例,包含所有集群节点的信息。 2. 创建一个Map对象,存储键值对。 3. 使用`mset`方法执行批量插入。 4. 确保所有键在...

    springboot集成redis集群,redis安装包配置

    在本文中,我们将深入探讨如何在SpringBoot应用中集成Redis集群以及如何配置Redis服务器。首先,Redis是一个开源的、基于键值对的数据存储系统,常用于数据库、缓存和消息中间件。它以其高性能和易用性而备受青睐。...

    redis集群一键自动部署脚本.rar

    - **主从复制(Replication)**:Redis 集群中的每个节点都可以是主节点或从节点,主节点负责处理写操作,从节点则复制主节点的数据并处理读操作,提高读性能。 - **槽分配(Slots)**:集群将键空间划分为16384个...

    Linux系统中redis集群包和Windows环境中的redis集群资源

    在本文中,我们将深入探讨Linux系统中的Redis集群以及如何在Windows环境下搭建Redis集群。首先,我们来看一下标题和描述中提及的关键组件。 标题提到了“Linux系统中redis集群包”,这意味着我们要讨论的是在Linux...

    redis集群批处理一键搭建

    Redis集群批处理一键搭建是指通过一个简单的批处理脚本来快速构建和配置四个节点的Redis集群。这种方式极大地简化了安装和部署过程,使得在64位操作系统上启用Redis集群变得更加便捷。Redis是一个开源的、高性能的...

    SpringMVC整合Redis集群

    项目由maven构建,使用springMVC整合了Redis的集群,发布到tomcat中,访问http://localhost:8080/SpringRedisCluster/redis/hello.do测试即可,前提是配好了redis的集群。

Global site tag (gtag.js) - Google Analytics