`
gao_xianglong
  • 浏览: 467189 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

redis3.x cluster

 
阅读更多

《redis3.x cluster》

 

前言

redis集群后,我们就需要一种数据路由算法将不同key分散存储到不同的redis节点内,通常的做法是获取某个key的hashcode,然后mod,不过这种做法无法很好的支持动态伸缩性需求,一旦节点的增或者删操作,都会导致key无法在redis中命中,所以在redis3.x之前,基本上都是采用编写一致性hash算法实现redis的集群,但是redis3.x正式支持cluster后,却采用的是hash slot(hash槽)。

 

redis集群中一共内置了16384个哈希槽,当set操作时,redis先对key使用crc16验证出一个结果,然后把结果对mod 16384,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。这样做的好处很明显,当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;当需要移除节点时,只需要把移除节点上的哈希槽挪到其他节点就行了。

 

目录

一、redis的下载与编译;

二、集群安装所需外围插件;

三、redis集群部署;

四、验证redis集群以及HA;

五、重新指定redis集群的分片规则

六、集群节点的伸缩调整;

七、jediscluster API的使用;

八、注意项;

九、推荐阅读;

 

一、redis的下载与编译

redis的官网下载地址http://redis.io/,笔者本章博文所使用的版本为redis3.0.7正式版,为了避免出现一些无法预估的错误或不一致的情况出现,建议大家使用和笔者一样的版本。或者直接使用下述命令执行redis的下载和编译,如下所示:

$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz
$ tar -zvxf redis-3.0.7.tar.gz
$ cd redis-3.0.7
$ make

 

当成功执行编译命令后,redis的二进制代码包含在/src目录下。

 

二、集群安装所需外围环境

redis集群需要ruby的一系列环境支持,因此我们需要安装一些ruby环境,如下所示 :

$ yum install ruby
$ yum install rubygems
$ gem install redis

 

首先下载并安装ruby环境,然后是rubygems组件,最后是redis接口。在此大家需要注意,如果如法下载安装redis.gem,则可能gem服务器无法连接,手动下载安装即可,推荐地址http://download.csdn.net/download/menggucaoyuan/8487967

手动安装,如下所示:

gem install -l ./redis-3.0.0.gem

 

三、redis集群部署

笔者的redis在安装地址在/usr/local/redis/redis-3.0.7,那么在/usr/local/redis/目录下,笔者新建了如下9个目录,如下所示:

$ mkdir redis7000 redis7001 redis7002 redis7003 redis7004 redis7005 redis7006 redis7007 redis7008

 

然后将/usr/local/redis/redis-3.0.7/redis.conf拷贝至上述9个新建目录中,并逐个修改每一个redis节点的redis配置项,如下所示:

port 每一个redis实例端口
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

  

上述文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf.节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。

在此大家需要注意,要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。笔者本章博文所使用的是9个节点,其中3个主节点,每一个主节点有2个从节点。

 

当配置完成后,使用如下命令启动每一个redis节点,如下所示:

redis-server redis.conf

 

当每一个节点都成功启动之后,最后再使用命令创建redis集群,如下所示:

./redis-trib.rb  create --replicas 2 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 127.0.0.1:7008

 

上述命令用于创建一个新的集群, 选项–replicas 2 表示我们希望为集群中的每个主节点创建2个从节点。之后跟着的其他参数则是这个集群实例的地址列表,3个master,6个slave。 redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:

[OK] All 16384 slots covered

 

 这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。

 

四、验证redis集群以及HA

当成功启动redis集群后,我们可以尝试使用如下命令登录redis客户端验证redis集群,如下所示:

$ ./redis-cli -c -p 7000
$ cluster nodes

 

当成功执行上述命令后,将会输出:

 

上述集群信息显示为3个master,6个slave,采用1主2从,一共9个节点。在此大家需要注意,redis集群中如果超过半数以上的master节点不可用,意味着整个集群节点不可用。

 

假设我们在某一个master上set一个数据,然后kill掉这个进程,它的slave节点会接管并成为新的master,当集群中挂了3个节点后,redis会将集群进行调整,变化为1主1从,还是3个master节点,并由新的master接替之前down机的数据,这样做的好处是可以避免重新分配hash slot,如下所示: 

 

五、重新指定redis集群的分片规则

重新分片操作基本上就是将某些节点上的哈希槽移动到另外一些节点上面, 和创建集群一样, 重新分片也可以使用 redis-trib 程序来执行一次重新分片操作。在此大家需要注意,重新分片并不会对正在运行的集群程序产生任何影响。执行分片命令,如下所示:

./redis-trib.rb reshard 127.0.0.1:7000

 

我们只需要指定集群中其中一个节点的地址, redis-trib 就会自动找到集群中的其他节点。当执行重新分片命令后,会提示究竟移动多少个hash槽,这里假设我们需要移动1000个hash槽,就输入1000。接下来就要输入希望将这些hash槽移动到哪一个master的id上,最后需要指定将哪些节点上的hash槽移动到之前指定的目标master上,如果输入all就会从其他所有的master上取一些哈希槽移动到目标master上。

最后确认后你将会看到每个redis-trib移动的槽的信息,每个key的移动的信息也会打印出来。在重新分片的过程中,你得例子程序是不会受到影响的,你可以停止或者重新启动多次。在重新分片结束后你可以通过如下命令检查集群状态,如下所示:
./redis-trib.rb check 127.0.0.1:7000 
 
六、集群节点的伸缩调整
redis集群节点的伸缩性调整主要指的是动态向集群中添加master或者slave节点,或者移除master或者slave节点。假设在现有的集群节点中新增加一个master节点,使用如下命令:
./redis-trib.rb add-node 127.0.0.1:7009 127.0.0.1:7000
 
由于新加的master节点还没有分配任何的hash槽,因此还需要对这个master分配hash槽操作。当然出了添加master节点万,我们还可以向集群环境中添加slave节点,使用下述命令往集群节点中新增一个slave节点,如下所示:
./redis-trib.rb add-node --slave 127.0.0.1:7010 127.0.0.1:7000
 
此处的命令和添加一个主节点命令类似,此处并没有指定添加的这个从节点的主节点,这种情况下系统会在其他的复制集中的主节点中随机选取一个作为这个从节点的主节点。当然我们可以通过下面的命令指定主节点:
./redis-trib.rb add-node --slave --master-id be50d14dca84586054196c867f52bc05a5261561 127.0.0.1:7010 127.0.0.1:7000
 
对于移除集群环境中的master或者slave节点,可以使用下述命令:
./redis-trib.rb del-node 127.0.0.1:7000 `<node-id>`
 
第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址。使用同样的方法移除主节点,不过在移除主节点前,需要确保这个主节点是空的. 如果不是空的,需要将这个节点的数据重新分片到其他主节点上。
分享到:
评论

相关推荐

    Redis3.x和Redis4.x的Windows版.zip

    本压缩包包含Windows版的Redis3.x和Redis4.x,下面将分别介绍这两个版本的重要特性及其在Windows环境下的安装与使用。 **Redis3.x** Redis 3.x是Redis的一个稳定版本,主要改进包括: 1. **多线程支持**:引入了...

    redis集群安装 redis 6.x 安装包 redis-6.2.1_install.tar.gz

    3. OpenSSL:Redis 6.x 开始默认启用 SSL 支持,需要 OpenSSL 库。 如果你使用的是未包含预编译二进制的源码包,需要先执行以下步骤编译 Redis: 1. 解压下载的源码包:`tar -zxvf redis-6.2.1.tar.gz` 2. 进入源码...

    Redis 4.x Cookbook中文版PDF

    9. **集群(Cluster)**:Redis 4.x引入了官方集群支持,可以自动分片数据并处理节点间的通信,实现水平扩展。 10. **lua脚本**:Redis支持内联Lua脚本,允许在服务器端执行复杂逻辑,保证操作的原子性。 11. **...

    redis6.x视频教程分享下载

    - **Redis Cluster**:自动分片和故障转移的分布式解决方案,支持多主节点和槽分区。 5. **安全与访问控制** - **Authentication**:通过密码认证确保客户端连接的安全性。 - **Access Control List (ACL)**:...

    Redis3.2.100免安装版

    - **免安装版**:你提供的 Redis-x64-3.2.100 是一个免安装版本,解压后可以直接运行,适用于开发和测试环境。通常包含 `redis-server` 和 `redis-cli` 等命令行工具。 - **启动与关闭**:执行 `redis-server.exe`...

    Redis6.x视频教程分享下载

    8. **Cluster集群**:Redis Cluster是Redis的分布式解决方案,支持自动分片,可以在多个节点间分散数据,提供高可用性和可扩展性。 9. **lua脚本**:Redis支持内嵌的Lua脚本,允许用户在服务器端执行计算任务,提升...

    Redis3.x集群配置操作文档

    ### Redis 3.x 集群配置操作文档 #### Redis 集群简介 Redis 集群是一种通过分区和分片技术实现的分布式存储方案,它可以提高数据处理能力和系统的高可用性。集群中的每个节点负责一部分数据集,并且可以通过复制...

    redis3.2.100.zip

    Redis通常被认为是Linux平台上的数据库,但随着3.x版本开始,官方开始提供Windows兼容的二进制版本。这对于Windows开发环境或者Windows服务器上的应用来说是个好消息,因为它们可以直接使用Redis而无需依赖虚拟机或...

    Redis-x64-3.2.100免安装版配置+linux版.zip

    此外,Redis Cluster是另一种集群解决方案,允许数据在多个节点间分布式存储,提供数据分区和容错能力。 Redis的数据结构包括字符串、哈希、列表、集合和有序集合,这些结构为多种应用场景提供了基础。例如,哈希...

    redis-windows-redis7.0.5.zip

    - **Cluster集群**:Redis Cluster支持自动分片,可以在多个节点间分散数据,提高处理能力和容错能力。 在"redis-windows-redis7.0.5.zip"这个压缩包中,可能包含的文件有: 1. `redis-server.exe`:Redis服务器的...

    Redis-x64-3.2.100

    此外,通过Cluster集群功能,Redis还能实现数据分片,进一步提升处理能力。 总之,“Redis-x64-3.2.100”提供了在64位Windows系统上运行Redis所需的所有必要组件,无论是初学者还是经验丰富的开发者,都能快速地...

    redis_exporter:用于Redis度量标准的Prometheus导出器。 支持Redis 2.x,3.x,4.x,5.x和6.x

    支持Redis 2.x,3.x,4.x,5.x和6.x建立并运行出口商在本地构建和运行git clone https://github.com/oliver006/redis_exporter.gitcd redis_exportergo build ../redis_exporter --version预编译二进制对于预构建的...

    Redis 3.x 分布式集群搭建.pdf

    Redis Cluster是由多个Redis实例组成,官方推荐我们使用6实例,其中3个为主节点,3个为从结点。一旦有主节点发生故障的时候,Redis Cluster可以选举出对应的从结点成为新的主节点,继续对外服务,从而保证服务的高...

    redis-5.0.14.1安装包

    - **集群**:Redis Cluster提供自动分片和故障转移功能,支持大规模数据存储。 在实际应用中,Redis常被用作高并发场景下的数据缓存,提高应用程序的性能。此外,由于其丰富的数据结构,也常用于实现如计数器、排行...

    Redis-x64-5.0.14.1

    这个“Redis-x64-5.0.14.1”很可能是 Redis 的 Windows 64 位版本的安装包或二进制文件,版本号为 5.0.14,而“Redis-x64-3.2.100”可能是一个较旧的版本,例如 3.2.100 版本的 Redis Windows 64 位文件。...

    Redis-x64-5.0.14.1.zip

    在你提供的压缩包"Redis-x64-5.0.14.1.zip"中,包含的是Redis 5.0.14的64位Windows版本。解压这个文件后,你会得到以下关键组件: 1. **redis-server.exe**:这是Redis服务器的执行文件,用于启动Redis服务。当你...

    Redis-x64-3.2.100-稳定版.rar

    10. **Cluster 集群**:Redis Cluster 提供了数据分区和分布式功能,允许多个 Redis 实例共享同一个键空间,支持自动分片和容错能力。 通过理解和掌握这些知识点,你将能够有效地在 Windows 环境中安装、配置和使用...

    redis安装包.rar

    1. 进入源代码目录:`cd redis-x.x.x`(x.x.x代表Redis的版本号) 2. 执行配置脚本:`./configure` 这个脚本会检查你的系统环境,并生成适合的Makefile。 3. 编译源代码:`make` 4. 安装到系统默认位置(通常为`/...

    win下redis5.x zip

    10. Redis集群:Redis Cluster是Redis的分布式解决方案,它允许你在多台机器上分布数据,提供自动分片和故障恢复功能。不过,Redis 5.0.14的Windows版本可能不支持集群,集群功能通常在Linux环境下使用更多。 了解...

    Redis-x64-3.0.504 MSI ZIP

    10. **集群支持**:从Redis 3.0版本开始,官方引入了Redis Cluster,支持数据分片和故障自动转移,可以构建大规模的分布式数据库系统。 这个3.0.504版本的Redis安装包包含以下文件: - `Redis-x64-3.0.504.msi`:这...

Global site tag (gtag.js) - Google Analytics