《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 Cluster是由多个Redis实例组成,官方推荐我们使用6实例,其中3个为主节点,3个为从结点。一旦有主节点发生故障的时候,Redis Cluster可以选举出对应的从结点成为新的主节点,继续对外服务,从而保证服务的高...
支持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预编译二进制对于预构建的...
windows一键Redis-Cluster集群工具(32位和64位Redis-v3.0.504,以及64位Redis-v3.2.100),资源包括:ruby安装包,rubygem,32位Redis-v3.0.504,64位Redis-v3.0.504,64位Redis-v3.2.100,一键Redis-Cluster集群...
RedisCluster + SpringBoot演示案例 本案例所用的Redis是5.0.8所以和旧版的4.0.X不同的地方在于创建集群的方式的变化 所用系统:Centos7.7 64位 本案例设置的统一密码为:shunleite Spring Boot 2.0+ 原文地址:...
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速...内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
redis-py-cluster 该客户端提供了Redis 3.0中添加的Redis集群客户端... redis-py-cluster 2.1.x将是支持Python 2.7的最后一个主要版本。 2.1.x系列将继续获得支持Python 2的错误修复和安全补丁,直到2020年8月1日。red
这个是windows已经配置好的版本,讲道理你下载过去只需要执行几条命令,redis集群就能搭建起来,懒癌的福音。 注意:基于windows,支持windows离线安装
tomcat 集群 session 共享,配置domain域名等
改压缩包中含了centos7.x离线安装redis-cluster的所有相关文件,包括ruby-2.4.1.tar.gz,rubygems-2.7.6.tgz,zlib-1.2.11.tar.gz,redis-4.0.2.gem,tcl8.6.8-src.tar.gz
Redis-x64-3.0.504.zip -windows版本 redis.exe This is a critical bug fix release for Redis on Windows 3.0. If you are running a previous version of 3.0 in a cluster configuration you should upgrade to ...
Redis-x64-cluster
06、安装ruby环境(rubyinstaller-2.2.4-x64.exe),注意(安装所有模块),后台需要使用此环境。 07、下载ruby环境下Redis的驱动“redis-3.2.2.gem”。 08、把“redis-3.2.2.gem”放到ruby环境下进行驱动,在所在的目录...
复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用...
fat.redis.cluster.nodes=x.x.x.x:x,x.x.x.x:x # zookeeper服务器地址 fat.zookeeper.host=x.x.x.x:x,x.x.x.x:x # zookeeper活跃时间 fat.zookeeper.sessionTimeout=x.x.x.x:x,x.x.x.x:x ``` 应用标识,与spirng....
Redis 6 RC1 发布了,项目创建人 antirez 在博客中介绍,这是迄今最“企业”化的版本(SSL 与 ACL 等特性与企业极相关)...Redis Cluster 代理与 Redis 6 一起发布(不同仓库) Redis 6 发布 Disque 模块(不同仓库)
Redis 是一个开源的(BSD 许可)内存数据结构...Redis 具有高性能,并且提供复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久性,还通过 Redis Sentinel 提供高可用服务,并提供自动分区功能通过 Redis Cluster。
redis-desktop-manager-2020.1.0.0.x64.exe,64位的已编译好的安装包,已解决cluster模式不能自动跳转的bug
docker编排redis集群, ...3.使用redis-trib.rb初始化集群:redis-trib.rb create --replicas 1 127.0.0.1:7391 127.0.0.1:7392 127.0.0.1:7393 127.0.0.1:7394 127.0.0.1:7395 127.0.0.1:7396(ip改为自己ip即可)
SpringBoot整合Redis,包括整合单机版Redis、redis-cluster集群、redis哨兵模式
Redis-x64-3.2.100.zip hope help you, Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), ...