Redis集群

5 篇文章 0 订阅

1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。

5、Redis集群预分好16384个槽,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个槽中。

1、redis cluster节点分配

现在我们是三个主节点分别是:A, B, C 三个节点,它们可以是一台机器上的三个端口,也可以是三台不同的服务器。那么,采用哈希槽 (hash slot)的方式来分配16384个slot 的话,它们三个节点分别承担的slot 区间是:

  节点A覆盖0-5460;
  节点B覆盖5461-10922;
  节点C覆盖10923-16383.

获取数据:

  如果存入一个值,按照redis cluster哈希槽的算法: CRC16('key')384 = 6782。 那么就会把这个key 的存储分配到 B 上了。同样,当我连接(A,B,C)任何一个节点想获取'key'这个key时,也会这样的算法,然后内部跳转到B节点上获取数据 



 新增一个主节点:

  新增一个节点D,redis cluster的这种做法是从各个节点的前面各拿取一部分slot到D上,我会在接下来的实践中实验。大致就会变成这样:
节点A覆盖1365-5460
节点B覆盖6827-10922
节点C覆盖12288-16383
节点D覆盖0-1364,5461-6826,10923-12287


 同样删除一个节点也是类似,移动完成后就可以删除这个节点了。

2、Redis Cluster主从模式

redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。

  上面那个例子里, 集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。

 所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。

 B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。

不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。

Redis伪集群搭建,3主3从

  1. 安装ruby
yum install ruby  
yum install rubygems  

也可下载安装包进行安装 http://www.ruby-lang.org/zh_cn/downloads/,redis4要求ruby版本要大于2.2

linux CentOS7 下 ruby 卸载 | 安装:
(1) https://blog.csdn.net/chuxin_mm/article/details/81639305
(2)https://blog.csdn.net/hello_world_qwp/article/details/78261618

安装完成之后执行

gem install redis

2.新建 redis-cluster 并将 上篇安装的redis文件夹复制6份,分别命名为 redis01,redis02,…redis06,并删除dump.rdb文件

这里写图片描述

3.分别修改每个redis文件夹下的redis.conf文件,对应打开以下属性的注释(也可直接添加),并对应修改端口7001至7006

# bind 默认为 127.0.0.1 可以改为自己的IP
daemonize yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000

4 复制redis解压文件src下的redis-trib.rb文件到redis-cluster目录

5 启动

(1)编写启动脚本redis-cluster-start.sh

#!/bin/bash
cd /usr/local/redis-cluster/redis01/bin
 ./redis-server redis.conf

cd /usr/local/redis-cluster/redis02/bin
 ./redis-server redis.conf

cd /usr/local/redis-cluster/redis03/bin
 ./redis-server redis.conf

cd /usr/local/redis-cluster/redis04/bin
 ./redis-server redis.conf

cd /usr/local/redis-cluster/redis05/bin
 ./redis-server redis.conf

cd /usr/local/redis-cluster/redis06/bin
 ./redis-server redis.conf

添加执行权限,并启动

chmod +x redis-cluster-start.sh

./redis-cluster-start.sh

这里写图片描述

(2)创建集群(也可将这条命令写入上面的脚本中),redis会自动给我们分配主从节点,在询问处输入 yes ,表示同意redis的节点分配

./redis-trib.rb create --replicas 1 192.168.214.130:7001 192.168.214.130:7002 192.168.214.130:7003 192.168.214.130:7004 192.168.214.130:7005 192.168.214.130:7006

在这里插入图片描述

连接集群的一个节点

redis-cli -c -h 192.168.214.130 -p 7001

Java 连接Redis 单机,集群操作推荐文章:https://blog.csdn.net/u010246789/article/details/52220067
https://www.cnblogs.com/edisonfeng/p/3571870.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值