欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis集群

程序员文章站 2022-03-10 15:48:46
...

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文件

Redis集群

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

Redis集群

(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集群

连接集群的一个节点

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

相关标签: linux redis