Redis集群

清疚 2022-06-02 07:09 113阅读 0赞

当单台redis服务器的内存存储空间有限的情况下,可以使用redis集群扩展存储空间

一、redis-cluster架构图

SouthEast

架构细节

1、 使用PING-PONG机制,检测节点的健康状态

2、所有的redis节点彼此互联

3、 每个节点中保存的数据不一样,为了保证集群的高可用,数据的完整性,需要给每个节点配置从机

4、节点是否fail通过投票机制判断:集群中超过半数的节点检测失效时才fail。因此集群中至少有三个节点。

SouthEast 1

5、客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

6、redis-cluster把 [0-16383] 个 slot(槽)上均匀的分配到集群中的物理节点上,cluster 负责维护 节点 — 槽 — 值

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

例如:下图是一个典型的三台主机的分配方式

SouthEast 2

二、redis集群的搭建

redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。

redis集群至少需要6台服务器。

解决方案:可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006

1、使用ruby脚本搭建集群。需要ruby的运行环境

安装ruby:

yum install ruby

安装ruby包管理器:

yum install rubygems

2、安装ruby脚本运行使用的包

在线安装:

gem install redis -v 3.0.7

离线安装:

现将redis-3.0.7.gem拷贝到服务器上

gem install redis-3.0.7.gem

3、找到一会要执行的ruby脚本文件

[root@helen-linux64-03 ~]# cd redis-3.0.7/src

[root@helen-linux64-03 src]# ll *.rb

-rwxrwxr-x. 1 root root 60527 Jan 25 2016 redis-trib.rb

4、创建六个redis实例

在 /usr/local 下创建 redis-cluster文件夹

在这个文件夹下复制6个redis实例

如下,是已经创建完6个实例的情况:

SouthEast 3

5、修改配置文件

修改每个实例的配置文件:

  • cluster-enabled yes前的注释去掉

  • 修改端口号分别为 7001 - 7006

6、启动每个实例

为了方便启动,可以写一个批处理文件 cluster-start.sh 放在 redis-cluster 文件夹下面







cd redis01 
bin/redis-server redis.conf 
cd .. 
cd redis02 
bin/redis-server redis.conf 
cd .. 
cd redis03 
bin/redis-server redis.conf 
cd .. 
cd redis04 
bin/redis-server redis.conf 
cd .. 
cd redis05 
bin/redis-server redis.conf 
cd .. 
cd redis06 
bin/redis-server redis.conf 
cd ..

同时也可以写一个批处理批量关闭:cluster-stop.sh







cd redis01  
bin/redis-cli -p 7001 shutdown 
cd ..  
cd redis02  
bin/redis-cli -p 7002 shutdown 
cd ..  
cd redis03  
bin/redis-cli -p 7003 shutdown 
cd ..  
cd redis04  
bin/redis-cli -p 7004 shutdown
cd ..  
cd redis05  
bin/redis-cli -p 7005 shutdown
cd ..  
cd redis06  
bin/redis-cli -p 7006 shutdown
cd ..

执行批量启动服务的脚本







[root@helen-linux64-03 redis-cluster]# ./cluster-start.sh

执行批量停止服务的脚本







[root@helen-linux64-03 redis-cluster]# ./cluster-stop.sh

要给这两个文件添加执行权限







[root@helen-linux64-03 redis-cluster]# chmod u+x cluster-start.sh
[root@helen-linux64-03 redis-cluster]# chmod u+x cluster-stop.sh

启动后查看服务是否成功启动







ps aux | grep redis

7、运行ruby脚本

进入前面第3步ruby脚本所在的目录,或将ruby脚本拷贝至redis-cluster中,执行下面的命令

其中的 1 意思是 1 台主机配置 1 台从服务器:







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

看到下面的界面后,输入“ yes”,脚本会自动创建集群中的节点,并自动分配主从服务器

看到下面的界面,则说明集群创建成功:

SouthEast 4

三、使用cli连接集群

一定要写 -c 参数,表示连接集群

集群会自动计算当前key所在的 槽(slot),并且 redirect 到相应的节点并存储。

使用客户端工具可以查看下面的 key a 的值被存储在了 192.168.100.53:7003 上

SouthEast 5

发表评论

表情:
评论列表 (有 0 条评论,113人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis

    当单台redis服务器的内存存储空间有限的情况下,可以使用redis集群扩展存储空间 一、redis-cluster架构图 ![SouthEast][] 架构细

    相关 Redis --- Redis

    Redis集群原理 如何从海量数据里快速找到所需? 分片:按照某种规则去划分数据,分散储存在多个节点上 常规按照哈希划分无法实现节点的动态增减 一致性哈希算法:对2^3

    相关 Redis

    Redis主从复制集群: slaveof,可redis.conf配置也可客户端命令 PSYNC:初始全量复制,master进行bgsave生成rdb传给slave 断线