Redis 集群cluster

在网上查找 redis集群的相关文档,很多都是以主从或者主从故障转移而说是集群,前几天玩了下集群,今天终于写出来一部分内容,可以分享出来了。

一、       Redis集群基础介绍

1、Redis集群简介:
Redis集群是一个可以在多个 Redis 节点之间进行数据共享的设施。
Redis 集群通过分区来提供一定程度的可用性:即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。
Redis 集群提供了以下两个好处:
(1、)将数据自动切分(split)到多个节点的能力。
(2、)当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。
2、集群的数据分片功能:
Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态。
3、Redis集群的主从架构:
为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品。
eg:如有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少B节点所承担的哈希槽这个范围的槽而不可用。

然而如果在集群创建的时候(或者过一段时间)我们为每个节点添加一个从节点A1,B1,C1,那么整个集群便有三个master节点和三个slave节点组成,这样在节点B失败后,集群便会选举B1为新的主节点继续服务,整个集群便不会因为槽找不到而不可用了。当然如果B和B1都down了,那集群还是不可用的。

二、      搭建并使用Redis集群
1、架构剖析:

IP                                                       Port

192.168.1.223                                 6379、6380、6381、6382 6383

192.168.1.226                                  6379、6380、6381、6382 6383

2、安装redis:
redis的安装方法不再阐述,看参考前面的文档:
http://www.minunix.com/2014/07/redis-install/
3、修改redis配置文件:
其它配置文件和上文中的配置一样,只需要将配置文件中的cluster 部分中开启以下三项:
cluster-enabled yes

cluster-config-file "nodes.conf"

cluster-node-timeout 1500

其它配置同Redis基础及部署文档 ;

文件中的 cluster-enabled 选项用于开实例的集群模式, 而 cluster-conf-file 选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf.节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。
要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时, 强烈建议使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。本例中使用10个节点,5个主节点,5个从节点。

4、搭建集群:

通过使用 Redis 集群命令行工具 redis-trib , 编写节点配置文件的工作可以非常容易地完成: redis-trib位于Redis源码的src文件夹中, 它是一个Ruby程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。
# ./redis-trib create --replicas 1 192.168.1.223:6379 192.168.1.223:6380 192.168.1.223:6381 192.168.1.223:6382 192.168.1.223:6383 192.168.1.226:6379

192.168.1.226:6380 192.168.1.226:6381 192.168.1.226:6382 192.168.1.226:6383

此语句是创建一个集群的命令,其中“--replicas 1”意思是为集群中的每个节点创建一个从节点,后面的是节点的实体ip:port;
redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,各个节点互相通信,得到如下结果:

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

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

5、测试集群:

测试 Redis 集群比较简单的办法就是使用 redis-rb-cluster 或者 redis-cli , 我们将使用 redis-cli 为例来进行演示:

# ./redis-cli -h 192.168.1.223 -p 6379 -c

192.168.1.223:6379> set aa bb

OK

192.168.1.223:6379> set 33 dd

-> Redirected to slot [5878] located at 192.168.1.226:6379

OK

192.168.1.226:6379>get aa

-> Redirected to slot [1180] located at 192.168.1.223:6379

"bb"

192.168.1.223:6379> get 33

-> Redirected to slot [5878] located at 192.168.1.226:6379

"dd"

由此可以看到,redis集群已经搭建完成。

redis-cli 对集群的支持是非常基本的, 所以它总是依靠 Redis 集群节点来将它转向(redirect)至正确的节点。一个真正的(serious)集群客户端应该做得比这更好: 它应该用缓存记录起哈希槽与节点地址之间的映射(map), 从而直接将命令发送到正确的节点上面。这种映射只会在集群的配置出现某些修改时变化, 比如说, 在一次故障转移(failover)之后, 或者系统管理员通过添加节点或移除节点来修改了集群的布局(layout)之后, 诸如此类。

时间: 2024-10-26 04:40:48

Redis 集群cluster的相关文章

Docker快速构建Redis集群(cluster)

Docker快速构建Redis集群(cluster) 以所有redis实例运行在同一台宿主机上为例子 搭建步骤 redis集群目录清单 . ├── Dockerfile ├── make_master_slave.sh ├── run_master_slave.sh ├── compose_master_slave.sh ├── redis-trib.rb ├── master │?? ├── 7000 │?? │?? ├── data │?? │?? │?? ├── appendonly.ao

redis单点、主从、集群cluster配置搭建与使用

目录 redis单点.主从.集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作redis 1.1.3 使用jedis客户端操作redis 1.1.4 使用spring-redis操作 1.2 redis 主从 1.3 哨兵sentinel 1.3.2 哨兵sentinel配置 1.3.3 启动哨兵,使用jedis连接哨兵操作redis 1.3.4 编写程序&运行 1.3.5模拟主节点宕机情况 1.4 redis cluster 1

redis集群出现JedisNoReachableClusterNodeException异常(No reachable node in cluster)

上午午好好的,突然抛了如下异常: Exception in thread "main" redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler

关于redis集群的问题no reachable node in cluster

重新启动redis集群时启动失败 n context with path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: redis.clients.jedis.exceptions.JedisConnectionException: no reachable node in clusterredis.clients.jedis.exceptions.Je

redis集群与分片(2)-Redis Cluster集群的搭建与实践

Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.其redis-cluster架构图如下: 其结构特点: 1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.     2.节点的fail是通过集群中超过半

Redis集群(三)Cluster集群

在哨兵模式中,仍然只有一个Master节点,当并发写请求较大时,无法缓解写的压力,在3.0版本Redis-Cluster出现解决了这个问题 Redis-Cluster集群特点: 1)由多个Redis服务器组成的分布式网络服务集群 2)集群之中由多个Master主节点,每一个主节点都可读可写 3)节点之间相互通信,两两相连 4)Redis集群无中心节点 在Redis-Cluster集群中,可以为每一个主节点添加从结点,主节点和从结点遵循主从模型的特性(添加从节点可以扩展系统的读性能) Redis-

redis集群报错:(error) CLUSTERDOWN The cluster is down

更换了电脑,把原来的电脑上的虚拟机复制到了新电脑上,启动虚拟机上的centos系统,然后启动redis集群(redis5版本),发现集群可以启动,redis进程也有,但是连接集群中的任意节点就报错,如下 查看单个节点的集群配置信息: 发现是因为原来的集群配置信息导致的错误,需要将每个redis实例下的dump.rdb 和nodes.conf文件删除,然后重新创建集群 重新创建集群: 首先启动6个redis实例 2 .进入任意一个redis实例,执行集群创建命令: ./redis-cli --cl

redis集群之Cluster

RedisCluster 是 Redis 的亲儿子,它是 Redis 作者自己提供的 Redis 集群化方案. 相对于 Codis 的不同,它是去中心化的,如图所示,该集群有三个 Redis 节点组成,每个节点负责整个集群的一部分数据,每个节点负责的数据多少可能不一样.这三个节点相互连接组成一个对等的集群,它们之间通过一种特殊的二进制协议相互交互集群信息. Redis Cluster 将所有数据划分为 16384 的 slots,它比 Codis 的 1024 个槽划分的更为精细,每个节点负责其

redis集群 Waiting for the cluster to join 一直等待

问题: redis集群创建执行 ./redis-trib.rb create --replicas 1 XXXX:PORT1 XXXX:PORT2 .... 的时候一直等待 Waiting for the cluster to join 很久都没有反应 原因: redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口 集群总线端口为redis客户端连接的端口 + 10000 如redis端口为6379 则集群总线端口为16379 故,所有服务器的点需要开通redis的客户端